From 2ddc26091c1536d8a8b223c49a73a3fe20ed9d29 Mon Sep 17 00:00:00 2001 From: zhaoxing <2558691827@qq.com> Date: Tue, 27 Oct 2026 18:49:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AF=84=E5=8D=96=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E5=AE=A2=E6=9C=8D=EF=BC=8C=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0=E6=8E=A5=E5=8D=95=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/frontend/src/App.tsx | 9 +- apps/frontend/src/layouts/AdminLayout.tsx | 9 +- .../pages/admin/AdminWorkerPlatformPage.tsx | 12 +- .../ConsignmentContactsPanel.tsx} | 103 ++++++++++-------- .../src/utils/admin-worker-platform-tabs.ts | 2 + .../tests/admin-worker-platform-tabs.test.ts | 7 ++ 6 files changed, 86 insertions(+), 56 deletions(-) rename apps/frontend/src/pages/admin/{AdminConsignmentContactsPage.tsx => panels/ConsignmentContactsPanel.tsx} (77%) diff --git a/apps/frontend/src/App.tsx b/apps/frontend/src/App.tsx index 9cc0017b..1e761bf6 100644 --- a/apps/frontend/src/App.tsx +++ b/apps/frontend/src/App.tsx @@ -24,9 +24,6 @@ const AdminFinancePage = lazy(() => import('@/pages/admin/AdminFinancePage')) const AdminFinanceLedgerPage = lazy(() => import('@/pages/admin/AdminFinanceLedgerPage')) const AdminSalesProfitPage = lazy(() => import('@/pages/admin/AdminSalesProfitPage')) const AdminCostCenterPage = lazy(() => import('@/pages/admin/AdminCostCenterPage')) -const AdminConsignmentContactsPage = lazy( - () => import('@/pages/admin/AdminConsignmentContactsPage'), -) const AdminFundPage = lazy(() => import('@/pages/admin/AdminFundPage')) const AdminAuditLogsPage = lazy(() => import('@/pages/admin/AdminAuditLogsPage')) const AdminKuaishouIndustryPage = lazy(() => import('@/pages/admin/AdminKuaishouIndustryPage')) @@ -161,6 +158,11 @@ function AdminApplication() { } /> } /> + {/* 旧「配置 → 对接客服」地址已并入接单平台 tab,书签继续可用。 */} + } + /> }> } /> }> } /> - } /> } /> } /> } /> diff --git a/apps/frontend/src/layouts/AdminLayout.tsx b/apps/frontend/src/layouts/AdminLayout.tsx index 2ff839b1..701ff733 100644 --- a/apps/frontend/src/layouts/AdminLayout.tsx +++ b/apps/frontend/src/layouts/AdminLayout.tsx @@ -4,7 +4,6 @@ import { ApartmentOutlined, BellOutlined, BugOutlined, - CustomerServiceOutlined, DashboardOutlined, FileSearchOutlined, LogoutOutlined, @@ -284,11 +283,6 @@ export default function AdminLayout() { label: '配置', children: [ { key: '/admin/users', icon: , label: '后台用户' }, - { - key: '/admin/consignment-contacts', - icon: , - label: '对接客服', - }, { key: '/admin/platform-shops', icon: , label: '平台配置' }, { key: '/admin/platform-fulfillment', icon: , label: '履约配置' }, ], @@ -857,7 +851,8 @@ function resolveSelectedKey(pathname: string) { if (pathname.startsWith('/admin/finance')) return '/admin/finance' if (pathname.startsWith('/admin/tasks')) return '/admin/tasks' if (pathname.startsWith('/admin/worker-platform')) return '/admin/worker-platform' - if (pathname.startsWith('/admin/consignment-contacts')) return '/admin/consignment-contacts' + // 旧「配置 → 对接客服」地址已并入接单平台 tab,保留高亮兼容。 + if (pathname.startsWith('/admin/consignment-contacts')) return '/admin/worker-platform' if (pathname.startsWith('/admin/kuaishou-industry')) return '/admin/kuaishou-industry' if (pathname === '/admin/platform-shops') return '/admin/platform-shops' return pathname diff --git a/apps/frontend/src/pages/admin/AdminWorkerPlatformPage.tsx b/apps/frontend/src/pages/admin/AdminWorkerPlatformPage.tsx index e4cdf293..d1c59f43 100644 --- a/apps/frontend/src/pages/admin/AdminWorkerPlatformPage.tsx +++ b/apps/frontend/src/pages/admin/AdminWorkerPlatformPage.tsx @@ -15,6 +15,7 @@ import AfterSalesPanel, { type AfterSalesPanelHandle } from './panels/AfterSales import AnnouncementPanel from './panels/AnnouncementPanel' import CancelRequestsPanel from './panels/CancelRequestsPanel' import CategoriesPanel from './panels/CategoriesPanel' +import ConsignmentContactsPanel from './panels/ConsignmentContactsPanel' import ConsignmentInventoryPanel from './panels/ConsignmentInventoryPanel' import ConsignmentSubmissionsPanel from './panels/ConsignmentSubmissionsPanel' import FeedbacksPanel from './panels/FeedbacksPanel' @@ -44,8 +45,10 @@ export default function AdminWorkerPlatformPage() { const isFinance = role === 'finance' const canViewConsignment = hasAdminPermission('consignment.view') const isConsignmentTab = - activeTab === 'consignment-inventory' || activeTab === 'consignment-submissions' - // 没有 consignment.view 时这两个 tab 不渲染,把 URL/localStorage 里的旧选择也拉回工单页, + activeTab === 'consignment-inventory' || + activeTab === 'consignment-submissions' || + activeTab === 'consignment-contacts' + // 没有 consignment.view 时这些 tab 不渲染,把 URL/localStorage 里的旧选择也拉回工单页, // 否则会落在一个空的 tab 内容上。 const visibleActiveTab = isFinance ? 'finance' @@ -113,6 +116,11 @@ export default function AdminWorkerPlatformPage() { label: '寄售仓库', children: , }, + { + key: 'consignment-contacts', + label: '对接客服', + children: , + }, { key: 'consignment-submissions', label: '寄卖提报审核', diff --git a/apps/frontend/src/pages/admin/AdminConsignmentContactsPage.tsx b/apps/frontend/src/pages/admin/panels/ConsignmentContactsPanel.tsx similarity index 77% rename from apps/frontend/src/pages/admin/AdminConsignmentContactsPage.tsx rename to apps/frontend/src/pages/admin/panels/ConsignmentContactsPanel.tsx index 93b715ba..eaf7dd74 100644 --- a/apps/frontend/src/pages/admin/AdminConsignmentContactsPage.tsx +++ b/apps/frontend/src/pages/admin/panels/ConsignmentContactsPanel.tsx @@ -16,8 +16,8 @@ import { } from 'antd' import { useEffect, useState } from 'react' -import PageHeader from '@/components/admin/PageHeader' import PercentTable from '@/components/common/PercentTable' +import { fetchAdminSession } from '@/services/admin/auth' import { createAdminConsignmentContact, deleteAdminConsignmentContact, @@ -26,6 +26,7 @@ import { updateAdminConsignmentContact, } from '@/services/admin/consignment' import type { ConsignmentContactSupporter } from '@/types/consignment' +import { resolveAdminPermission } from '@/utils/admin-auth' import { formatDateTime } from '@/utils/date-time' import type { TableColumnsType } from 'antd' @@ -45,12 +46,12 @@ const ENABLED_FILTER_OPTIONS = [ ] /** - * 配置 → 对接客服。 + * 接单平台 → 对接客服。 * * 独立名单(不复用后台账号):打手发布寄卖时必选,后台按人统计提成与快速联系。 * 已被寄卖记录引用的客服只能禁用,不能删除,保证历史单归属不丢。 */ -export default function AdminConsignmentContactsPage() { +export default function ConsignmentContactsPanel() { const { message, modal } = App.useApp() const queryClient = useQueryClient() const [form] = Form.useForm() @@ -68,6 +69,18 @@ export default function AdminConsignmentContactsPage() { return () => window.clearTimeout(timer) }, [keywordInput]) + const adminSessionQuery = useQuery({ + queryKey: ['admin-session'], + queryFn: fetchAdminSession, + retry: false, + }) + // 写操作统一按 consignment.manage 门控:后端接口都挂了 requireAdminPermission, + // 没有权限时按钮点了只会 403,所以直接从界面隐藏。 + const canManage = resolveAdminPermission( + adminSessionQuery.data?.data.user.permissions, + 'consignment.manage', + ) + const query = useQuery({ queryKey: ['admin-consignment-contacts', keyword, enabledFilter], queryFn: () => @@ -195,6 +208,7 @@ export default function AdminConsignmentContactsPage() { ( - - - - - ), + render: (_, record) => + canManage ? ( + + + + + ) : ( + - + ), }, ] return (
- } onClick={openCreate}> - 新增对接客服 - - } - /> - - - } - placeholder="搜索姓名 / 备注" - value={keywordInput} - onChange={(event) => setKeywordInput(event.target.value)} - style={{ width: 280 }} - /> - } + placeholder="搜索姓名 / 备注" + value={keywordInput} + onChange={(event) => setKeywordInput(event.target.value)} + style={{ width: 280 }} + /> +