From 4a9ddcab64afac20a2c52ff8811717eeaf224778 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 23:31:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E9=9C=80=E6=B1=82):=20=E2=91=A0=E8=B4=A6?= =?UTF-8?q?=E6=88=B7=E5=9F=9F=E8=8F=9C=E5=8D=95/=E5=88=86=E7=BB=84?= =?UTF-8?q?=E8=A1=A5=E7=AD=9B=E9=80=89(=E5=90=8D=E7=A7=B0/=E7=BB=84?= =?UTF-8?q?=E9=95=BF/=E7=B1=BB=E5=9E=8B)=20+=20=E5=88=86=E7=BB=84=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E7=A7=BB=E9=99=A4=E3=80=8C=E6=95=B0=E6=8D=AE=E6=9D=83?= =?UTF-8?q?=E9=99=90=E5=88=86=E7=BB=84=E3=80=8D=E6=91=98=E8=A6=81=E5=8D=A1?= =?UTF-8?q?=20=E2=91=A1=E5=BA=97=E9=93=BA=E5=AF=86=E9=92=A5=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E8=A1=A5=E7=AD=9B=E9=80=89(=E5=A4=87=E6=B3=A8/?= =?UTF-8?q?=E7=B4=AB=E9=B8=9F=E8=B4=A6=E5=8F=B7)=20=E2=91=A2=E5=BA=97?= =?UTF-8?q?=E9=93=BA=E6=95=B0=E6=8D=AE=E8=AE=B0=E5=BD=95=E4=B8=A4=E7=BA=A7?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E5=B8=B8=E6=98=BE=20=E2=91=A3=E5=85=A8?= =?UTF-8?q?=E7=AB=99=E5=88=86=E7=BB=84=E7=AD=9B=E9=80=89=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=A8=A1=E7=B3=8A=E6=90=9C=E7=B4=A2(el-selec?= =?UTF-8?q?t=20filterable,=E6=A0=B7=E5=BC=8F=E5=AF=B9=E9=BD=90=E8=93=9D?= =?UTF-8?q?=E7=99=BD42px)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/account/GroupsPage.vue | 140 +++++++++--------- .../src/pages/account/MenusPage.vue | 78 +++++++++- .../src/pages/asin/AsinInvalidPage.vue | 7 +- .../src/pages/asin/DedupeRegistryPage.vue | 7 +- .../src/pages/asin/QueryAsinPage.vue | 7 +- .../src/pages/asin/SkipPricePage.vue | 7 +- .../src/pages/shop/ShopKeysPage.vue | 67 ++++++++- .../src/pages/shop/ShopManagePage.vue | 7 +- .../src/pages/tasks/ShopDataTasksPage.vue | 4 +- admin-frontend-vue/src/styles/main.css | 18 +++ admin-frontend-vue/tests/task-59.test.ts | 4 +- 11 files changed, 243 insertions(+), 103 deletions(-) diff --git a/admin-frontend-vue/src/pages/account/GroupsPage.vue b/admin-frontend-vue/src/pages/account/GroupsPage.vue index b970ce10..83edb7fe 100644 --- a/admin-frontend-vue/src/pages/account/GroupsPage.vue +++ b/admin-frontend-vue/src/pages/account/GroupsPage.vue @@ -7,8 +7,7 @@ import { ElMessage } from 'element-plus' import { useAdminSessionStore } from '@/stores/admin-session' import { openAdminConfirm } from '@/components/admin-confirm' import { deleteShopGroup, fetchShopGroups } from './shop-group-api' -import { shopGroupSummary, type ShopGroupItem } from './shop-group-model' -import { dedupeGroupSummaryOf } from '@/pages/asin/dedupe-total-model' +import type { ShopGroupItem } from './shop-group-model' import GroupEditorDialog from './GroupEditorDialog.vue' const session = useAdminSessionStore() @@ -16,17 +15,21 @@ const loading = ref(false) const rows = ref([]) const editorVisible = ref(false) const editingGroup = ref(null) -const summary = computed(() => shopGroupSummary(rows.value)) const isSuperAdmin = computed(() => session.isSuperAdmin) const currentUserId = computed(() => session.user?.id ?? null) -/** 顶部摘要 chips(对齐 admin.js renderShopManageGroupSummary;与去重汇总同构)。 */ -const groupChips = computed(() => - dedupeGroupSummaryOf( - rows.value.map((g) => ({ id: g.id, name: g.name, leaderUserId: g.leaderUserId })), - currentUserId.value, - session.user?.role || '', - ), -) +/** 筛选:分组名称/组长 模糊过滤(用户要求账户域子菜单补筛选条件)。 */ +const filterKeyword = ref('') +const filterLeader = ref('') +const filteredRows = computed(() => { + const kw = (filterKeyword.value || '').trim().toLowerCase() + const ldr = (filterLeader.value || '').trim().toLowerCase() + if (!kw && !ldr) return rows.value + return rows.value.filter((g) => { + const nameOk = !kw || (g.name || '').toLowerCase().includes(kw) + const leaderOk = !ldr || (g.leaderUsername || '').toLowerCase().includes(ldr) + return nameOk && leaderOk + }) +}) function canEditOf(group: ShopGroupItem): boolean { if (isSuperAdmin.value) return true @@ -72,32 +75,23 @@ onMounted(loadGroups)