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 1/4] =?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 { From aae33a5602afe9cd691de21790143fbf4ada0ea0 Mon Sep 17 00:00:00 2001 From: zhangrenyuan <18990852002@163.com> Date: Fri, 30 Jan 2026 10:50:33 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E6=9D=83=E9=99=90ID=E5=92=8C=E4=BC=98=E5=8C=96=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/index.js | 18 +++++++++--------- src/views/home.vue | 12 ++++++++++-- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/router/index.js b/src/router/index.js index 1ad5f4b..d739a6f 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -307,27 +307,27 @@ const routes = [ { path: 'receiveDetail', name: "receiveDetail", - meta: {permissionId: 74}, + meta: {permissionId: 59}, children: [ // 收款提交 { path: 'receiveService', name: "receiveService", component: () => import("../views/moneyManage/receiveDetail/receiveService.vue"), - meta: {permissionId: 60} + meta: {permissionId: [60, 61, 62, 63, 64, 65, 66]} }, // 收款处理(负责人) { path: 'receiveManager', name: "receiveManager", component: () => import("../views/moneyManage/receiveDetail/receiveManage.vue"), - meta: {permissionId: [67, 79]} + meta: {permissionId: [79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90]} }, {//收款处理 path: 'receiveFinance', name: "receiveFinance", component: () => import("../views/moneyManage/receiveDetail/receiveFinance.vue"), - meta: {permissionId: [67, 79]} + meta: {permissionId: [67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78]} }, //总部管理员及财务(移除) // { @@ -350,28 +350,28 @@ const routes = [ path: 'refundService', name: "refundService", component: () => import("../views/moneyManage/refundDetail/refundService.vue"), - meta: {permissionId: 99} + meta: {permissionId: [99, 100, 101, 102]} }, // 退款审批 { path: 'refundFinance', name: "refundFinance", component: () => import("../views/moneyManage/refundDetail/refundFinance.vue"), - meta: {permissionId: 103} + meta: {permissionId: [103, 104, 105, 106]} }, // 退款审批(负责人) { path: 'refundCharge', name: "refundCharge", component: () => import("../views/moneyManage/refundDetail/refundCharge.vue"), - meta: {permissionId: 107} + meta: {permissionId: [107, 108, 109, 110]} }, // 退款审批(总部财务) { path: 'refundHeader', name: "refundHeader", component: () => import("../views/moneyManage/refundDetail/refundHeader.vue"), - meta: {permissionId: 111} + meta: {permissionId: [111, 112, 113, 114]} }, ] }, @@ -380,7 +380,7 @@ const routes = [ path: 'executor', name: "executor", component: () => import("../views/moneyManage/executor/executor.vue"), - meta: {permissionId: 115} + meta: {permissionId: [115, 116, 117, 118]} }, // 财务核算 { diff --git a/src/views/home.vue b/src/views/home.vue index 99398d8..299ead6 100644 --- a/src/views/home.vue +++ b/src/views/home.vue @@ -287,13 +287,21 @@ const getPathByQueryId = (queryId) => { const qid = Number(queryId) if (!Number.isFinite(qid)) return null - const record = router.getRoutes().find(r => { + const matchedRoutes = router.getRoutes().filter(r => { const pid = r.meta?.permissionId if (Array.isArray(pid)) return pid.includes(qid) return pid === qid }) - return record?.path || null + if (!matchedRoutes.length) return null + + matchedRoutes.sort((a, b) => { + const aDepth = typeof a.path === 'string' ? a.path.split('/').length : 0 + const bDepth = typeof b.path === 'string' ? b.path.split('/').length : 0 + return bDepth - aDepth + }) + + return matchedRoutes[0]?.path || null } // 点击消息 → 已读 + 跳转 From 3352e2cddd366c16094c4db8bf83cf4b8d73ab0e Mon Sep 17 00:00:00 2001 From: zhangrenyuan <18990852002@163.com> Date: Fri, 30 Jan 2026 14:28:21 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=E6=B3=A8=E9=87=8A=E6=8E=89=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E8=AE=A2=E5=8D=95=E5=AE=A1=E6=A0=B8=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=EF=BC=9B=E4=BD=BF=E7=94=A8=E5=90=8E=E7=AB=AF=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=9A=84=E6=96=87=E6=9C=AC=EF=BC=8C=E6=9B=B4=E6=96=B0=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=8F=8F=E8=BF=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/locales/lang/en.js | 2 +- src/components/locales/lang/zh-CN.js | 2 +- src/views/home.vue | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/locales/lang/en.js b/src/components/locales/lang/en.js index 4419fed..1fd0f87 100644 --- a/src/components/locales/lang/en.js +++ b/src/components/locales/lang/en.js @@ -1018,7 +1018,7 @@ export default { market: "Region", registerTime: "Registered at", }, - orderNeedsReview: "A receipt order requires review", + // orderNeedsReview: "A receipt order requires review", messageGroups: { today: "Today", yesterday: "Yesterday", diff --git a/src/components/locales/lang/zh-CN.js b/src/components/locales/lang/zh-CN.js index f285323..3f35ab6 100644 --- a/src/components/locales/lang/zh-CN.js +++ b/src/components/locales/lang/zh-CN.js @@ -1029,7 +1029,7 @@ export default { market: "地区", registerTime: "注册时间", }, - orderNeedsReview: "用户有条收款订单需审核", + // orderNeedsReview: "用户有条收款订单需审核", messageGroups: { today: "今天", yesterday: "昨天", diff --git a/src/views/home.vue b/src/views/home.vue index 299ead6..e88d654 100644 --- a/src/views/home.vue +++ b/src/views/home.vue @@ -527,7 +527,7 @@ onMounted(() => getMessage())