From 0713b828cd82db43df1ec0b58a17130c910440f8 Mon Sep 17 00:00:00 2001 From: zhangrenyuan <18990852002@163.com> Date: Thu, 29 Jan 2026 18:24:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=E5=92=8C=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E5=A2=9E=E5=BC=BA=E5=81=A5=E5=A3=AE?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在路由守卫和首页中统一处理消息数据,确保 data 字段为数组类型 - 新增 getMessageJumpTarget 工具函数,根据消息的 queryId、type 或 status 智能确定跳转目标 - 首页点击消息时优先尝试根据 queryId 查找路由,提高跳转准确性 --- src/router/index.js | 9 +++++---- src/utils/goToCheck.js | 42 +++++++++++++++++++++++++++++++++++++++++- src/views/home.vue | 19 +++++++++++++++++-- 3 files changed, 63 insertions(+), 7 deletions(-) diff --git a/src/router/index.js b/src/router/index.js index b0a927a..1ad5f4b 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -579,11 +579,12 @@ router.afterEach(async (to) => { // 接收to参数获取当前路由信息 // 存入全局状态,供所有页面访问 const messageStore = useMessageStore(); // 过滤 flag=1的消息 - newMessageRes.data = newMessageRes.data.filter(item => item.flag !== 1); - - messageStore.setMessages(newMessageRes.data); + const list = Array.isArray(newMessageRes.data) + ? newMessageRes.data + : (Array.isArray(newMessageRes.data?.list) ? newMessageRes.data.list : []); + messageStore.setMessages(list.filter(item => item.flag !== 1)); } catch (error) { console.error('获取消息失败:', error); } }); -export default router; \ No newline at end of file +export default router; diff --git a/src/utils/goToCheck.js b/src/utils/goToCheck.js index c9d40b6..e67f6ef 100644 --- a/src/utils/goToCheck.js +++ b/src/utils/goToCheck.js @@ -33,4 +33,44 @@ export function getOrderPage(status) { } // 未知状态返回工作台 return '/workbench'; -} \ No newline at end of file +} + +function toNumberOrNull(value) { + if (value === null || value === undefined) return null; + const num = typeof value === 'number' ? value : Number(String(value).trim()); + return Number.isFinite(num) ? num : null; +} + +const queryIdRouteNameMap = { + 6: 'rechargeAudit', + 7: 'rechargeAudit', + 8: 'rechargeAudit', + 9: 'rechargeAudit', + 10: 'rechargeAudit', + 11: 'rechargeAudit', + 12: 'rechargeAudit', + 13: 'refundAudit', + 14: 'refundAudit', + 15: 'refundAudit', + 16: 'refundAudit', + 17: 'refundAudit', + 18: 'refundAudit', + 19: 'refundAudit' +}; + +export function getMessageJumpTarget(message) { + const permissionId = toNumberOrNull(message?.queryId ?? message?.menuId ?? message?.permissionId); + if (permissionId !== null) { + const routeName = queryIdRouteNameMap[permissionId]; + if (routeName) return { name: routeName }; + } + + const type = toNumberOrNull(message?.type); + if (type === 0) return { name: 'rechargeAudit' }; + if (type === 1) return { name: 'refundAudit' }; + + const status = toNumberOrNull(message?.status); + if (status !== null) return getOrderPage(status); + + return '/workbench'; +} diff --git a/src/views/home.vue b/src/views/home.vue index 650e8d6..99398d8 100644 --- a/src/views/home.vue +++ b/src/views/home.vue @@ -211,7 +211,8 @@ const getMessage = async () => { }); if (res?.data) { - const cleanList = res.data.filter(i => i.flag !== 1) + const list = Array.isArray(res.data) ? res.data : (Array.isArray(res.data?.list) ? res.data.list : []) + const cleanList = list.filter(i => i.flag !== 1) messageStore.setMessages(cleanList) } } catch (e) { @@ -282,6 +283,19 @@ const toggleShowAll = () => showAll.value = !showAll.value const scrollContainer = ref(null) const scrollToTop = () => scrollContainer.value?.scrollTo({top: 0, behavior: 'smooth'}) +const getPathByQueryId = (queryId) => { + const qid = Number(queryId) + if (!Number.isFinite(qid)) return null + + const record = router.getRoutes().find(r => { + const pid = r.meta?.permissionId + if (Array.isArray(pid)) return pid.includes(qid) + return pid === qid + }) + + return record?.path || null +} + // 点击消息 → 已读 + 跳转 const handleMessageClick = async (item) => { const res = await API({ @@ -292,7 +306,8 @@ const handleMessageClick = async (item) => { if (res.code === 200) { closeMessageDialog() - await router.push(getOrderPage(item.status)) + const targetPath = item?.queryId ? getPathByQueryId(item.queryId) : null + await router.push(targetPath || getOrderPage(item.status) || '/noPermission') await getMessage() ElMessage.success(t('elmessage.jumpSuccess')) } else {