From fe4255c59b5af820c69297efadad2453e36a0493 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Fri, 30 Oct 2026 11:40:32 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E6=AD=A3=E5=BC=8F?= =?UTF-8?q?=E7=BB=93=E7=AE=97=E6=97=A7=E8=B7=AF=E5=BE=84=E7=A9=BA=E7=99=BD?= =?UTF-8?q?=EF=BC=8C=E6=8C=89=E5=8D=95=E5=8F=B7=E8=B7=B3=E8=BD=AC=E4=BB=98?= =?UTF-8?q?=E6=AC=BE/=E6=94=B6=E6=AC=BE=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- src/router/views/index.js | 16 +++++++ .../settlement/formal-settlement-redirect.vue | 42 +++++++++++++++++++ src/views/settlement/formal-settlement.vue | 27 ++++++++++-- .../settlement/receivable-payable-detail.vue | 2 +- .../settlement/settlement-adjustment.vue | 12 ++++-- 5 files changed, 91 insertions(+), 8 deletions(-) create mode 100644 src/views/settlement/formal-settlement-redirect.vue diff --git a/src/router/views/index.js b/src/router/views/index.js index be1a05d..e90da64 100644 --- a/src/router/views/index.js +++ b/src/router/views/index.js @@ -104,6 +104,22 @@ export default [ }, ], }, + { + // 兼容旧菜单路径:按 detailNo 解析应付/应收后跳转到拆分后的列表页 + path: '/settlement/formal-settlement', + component: Layout, + children: [ + { + path: '', + name: '正式结算单兼容跳转', + meta: { + keepAlive: false, + activeMenu: '/settlement/payment-settlement', + }, + component: loadView(() => import('@/views/settlement/formal-settlement-redirect.vue')), + }, + ], + }, { path: '/settlement/formal-settlement/form', component: Layout, diff --git a/src/views/settlement/formal-settlement-redirect.vue b/src/views/settlement/formal-settlement-redirect.vue new file mode 100644 index 0000000..76f3ce1 --- /dev/null +++ b/src/views/settlement/formal-settlement-redirect.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/views/settlement/formal-settlement.vue b/src/views/settlement/formal-settlement.vue index 3c7926c..f622d02 100644 --- a/src/views/settlement/formal-settlement.vue +++ b/src/views/settlement/formal-settlement.vue @@ -152,6 +152,8 @@ export default { form: { appliedAmount: 0, remark: '' }, }, mkEnabled: false, + // keep-alive 多标签下仅激活实例响应 detailNo,避免缓存页重复弹窗 + isPageActive: true, }; }, computed: { @@ -222,11 +224,10 @@ export default { }, }, created() { - // 标签机制按 fullPath 缓存同页多实例:仅当前路由实例应响应 detailNo 跳转,防止缓存旧实例也弹窗 - this.ownFullPath = this.$route.fullPath; this.loadOrganizationOptions(); }, mounted() { + this.isPageActive = true; this.openRouteDetail(); loadMkEnabled() .then(enabled => { @@ -237,10 +238,18 @@ export default { }); }, activated() { + this.isPageActive = true; if (sessionStorage.getItem('formal-settlement-list-refresh') === '1') { sessionStorage.removeItem('formal-settlement-list-refresh'); this.onLoad(this.page); } + // 从其他页带 detailNo 跳回时,激活态补开详情 + if (this.$route.query.detailNo) { + this.openRouteDetail(); + } + }, + deactivated() { + this.isPageActive = false; }, methods: { hasPermission(actionOrCode) { @@ -320,7 +329,7 @@ export default { }, async openRouteDetail(detailNo = this.$route.query.detailNo) { const formalSettlementNo = String(detailNo || '').trim(); - if (!formalSettlementNo || this.ownFullPath !== this.$route.fullPath) return; + if (!formalSettlementNo || !this.isPageActive) return; const response = await api.getList(1, 10, { formalSettlementNo }); const data = this.unwrapData(response); const row = (data.records || []).find(item => item.formalSettlementNo === formalSettlementNo); @@ -328,6 +337,18 @@ export default { this.$message.warning(`未找到对应的${this.billLabel}`); return; } + // 锁定菜单(付款/收款)下若单号属于另一类型,跳到对应列表页再打开 + if ( + this.lockedSettlementType && + row.settlementType && + row.settlementType !== this.lockedSettlementType + ) { + await this.$router.replace({ + path: settlementListPath(row.settlementType), + query: { detailNo: formalSettlementNo }, + }); + return; + } if (!this.lockedSettlementType) { this.activeSettlementType = row.settlementType || this.activeSettlementType; } diff --git a/src/views/settlement/receivable-payable-detail.vue b/src/views/settlement/receivable-payable-detail.vue index 75603cd..3d15c6c 100644 --- a/src/views/settlement/receivable-payable-detail.vue +++ b/src/views/settlement/receivable-payable-detail.vue @@ -1914,7 +1914,7 @@ export default { return; } if (this.settlementType === 'payable' && column.prop === 'formalSettlementNo') { - this.openSettlementDetail('/settlement/formal-settlement', row.formalSettlementNo); + this.openSettlementDetail('/settlement/payment-settlement', row.formalSettlementNo); return; } this.openDetailDialog(row); diff --git a/src/views/settlement/settlement-adjustment.vue b/src/views/settlement/settlement-adjustment.vue index 3d99e0c..93f1b06 100644 --- a/src/views/settlement/settlement-adjustment.vue +++ b/src/views/settlement/settlement-adjustment.vue @@ -185,6 +185,7 @@ import { kingdeeSyncStatusOptions } from '@/option/settlement/formalSettlementSe import SettlementAdjustmentEditor from './components/settlement-adjustment-editor.vue'; import SettlementTableTools from './components/settlement-table-tools.vue'; import { isAdministrator } from '@/utils/auth'; +import { settlementListPath } from '@/utils/settlement-menu'; const emptyQuery = () => ({ adjustmentNo: '', @@ -285,20 +286,23 @@ export default { openView(row) { this.editor = { visible: true, id: row.id, readonly: true }; }, - // 单据号→本单查看弹窗;结算单号→跳正式结算列表页并自动打开该单详情(页面支持 ?detailNo=) + // 单据号→本单查看弹窗;结算单号→跳付款/收款结算列表页并自动打开该单详情(页面支持 ?detailNo=) handleTableLink(row, column) { if (column.prop === 'formalSettlementNo') { - this.openSettlementDetail(row.formalSettlementNo); + this.openSettlementDetail(row.formalSettlementNo, row.settlementType); return; } this.openView(row); }, - openSettlementDetail(detailNo) { + openSettlementDetail(detailNo, settlementType) { if (!detailNo) { this.$message.info('当前记录未关联结算单详情'); return; } - this.$router.push({ path: '/settlement/formal-settlement', query: { detailNo } }); + this.$router.push({ + path: settlementListPath(settlementType), + query: { detailNo }, + }); }, isEditable(row) { return ['draft', 'returned'].includes(row.approvalStatus);