From 8034d916bc286a18083a770cb08a9d1dda63a8e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E8=87=AA=E8=BE=BE?= <980324341@qq.com> Date: Sun, 6 Sep 2026 15:21:26 +0800 Subject: [PATCH] =?UTF-8?q?align(=E6=92=9E=E6=AC=BE):=20=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=87=8D=E5=A4=8D=E6=8C=89=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=8C=BA=E5=88=86=E8=8C=83=E5=9B=B4=E2=80=94?= =?UTF-8?q?=E2=80=94=E8=B6=85=E7=AE=A1=E7=9C=8B=E5=85=A8=E5=88=86=E7=BB=84?= =?UTF-8?q?=E3=80=81=E7=AE=A1=E7=90=86=E5=91=98=E5=8F=AA=E7=9C=8B=E6=9C=AC?= =?UTF-8?q?=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 撞款控制台角色收口:前端读会话角色(isSuperAdmin),非超管隐藏筛选「分组」下拉、 「分组撞款」分段与「分组说明」按钮(分组专属交互仅超管需要);普通管理员数据已由 后端 resolveVisibleShopKeys 裁剪到所管分组店铺(超管 null=全量)。前端 1554 测试全绿 + build 通过。 --- .../src/pages/tasks/DuplicateCheckPage.vue | 11 ++++++++--- .../tests/align-dup-console.test.ts | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/admin-frontend-vue/src/pages/tasks/DuplicateCheckPage.vue b/admin-frontend-vue/src/pages/tasks/DuplicateCheckPage.vue index 11883aec..25516409 100644 --- a/admin-frontend-vue/src/pages/tasks/DuplicateCheckPage.vue +++ b/admin-frontend-vue/src/pages/tasks/DuplicateCheckPage.vue @@ -5,6 +5,7 @@ * 分组归属来自「店铺管理」真实店铺分组,本页只读展示,仅用于分组撞款范围切换。 */ import { computed, onMounted, reactive, ref } from 'vue' +import { useAdminSessionStore } from '@/stores/admin-session' import type { DuplicateItem, DuplicateOccurrence, DuplicateMetrics, DuplicateShop } from './duplicate-model.ts' import { fetchDuplicateConsole, fetchDuplicateLedger, requestDuplicateExportBlob, type LedgerSortKey } from './duplicate-console-api.ts' import { aggregateDrawerRows, drawerSummaryOf, dupWithinGroup, indexShopGroups, type DrawerAggRow, type DrawerSummary, type ShopGroups } from './duplicate-console-logic.ts' @@ -21,6 +22,10 @@ const reanalyzing = ref(false) const filter = reactive({ asin: '', shop: '', group: '', country: '', dateFrom: '', dateTo: '' }) +/** 角色范围:超管可看全部分组店铺并可跨分组筛选;普通管理员数据已由后端裁剪到自己分组,无需分组筛选。 */ +const session = useAdminSessionStore() +const isSuper = computed(() => session.isSuperAdmin) + const activeTab = ref('dup') const scope = ref('global') const selectedGroup = ref('') @@ -393,7 +398,7 @@ onMounted(() => { -
+