Просмотр исходного кода

✨ feat(menu): 添加销售人员个人数据菜单及路由

- 在客户关系管理菜单下增加销售人员个人数据子菜单
- 添加"我的客户"、"我的待审核"、"我的已审核"、"我的联系人"、"我的订单"和"我的跟单"选项
- 为个人数据菜单添加对应的路由配置
- 为费用管理和合同管理添加"我的费用"和"我的合同"子菜单及路由
- 添加UserSwitchOutlined图标支持
- 为不同角色设置相应的权限控制,区分部门经理和销售人员数据视图
yourname 7 месяцев назад
Родитель
Сommit
a3babfce41
2 измененных файлов с 92 добавлено и 1 удалено
  1. 52 1
      src/client/admin/menu.tsx
  2. 40 0
      src/client/admin/routes.tsx

+ 52 - 1
src/client/admin/menu.tsx

@@ -18,7 +18,8 @@ import {
   FileProtectOutlined,
   HistoryOutlined,
   AuditOutlined,
-  SettingOutlined
+  SettingOutlined,
+  UserSwitchOutlined
 } from '@ant-design/icons';
 
 export interface MenuItem {
@@ -102,6 +103,7 @@ export const useMenu = () => {
       label: '客户关系管理',
       icon: <CustomerServiceOutlined />,
       children: [
+        // 部门及全部数据(部门经理及以上)
         {
           key: 'customers-all',
           label: '全部客户',
@@ -144,6 +146,43 @@ export const useMenu = () => {
           path: '/admin/follow-up-records',
           permission: 'follow_up:view:department'
         },
+        // 个人数据(销售人员专用)
+        {
+          key: 'my-customers',
+          label: '我的客户',
+          path: '/admin/clients/my',
+          permission: 'client:view:own'
+        },
+        {
+          key: 'my-customers-pending',
+          label: '我的待审核',
+          path: '/admin/clients/my/pending',
+          permission: 'client:view:own'
+        },
+        {
+          key: 'my-customers-approved',
+          label: '我的已审核',
+          path: '/admin/clients/my/approved',
+          permission: 'client:view:own'
+        },
+        {
+          key: 'my-contacts',
+          label: '我的联系人',
+          path: '/admin/contacts/my',
+          permission: 'client:view:own'
+        },
+        {
+          key: 'my-orders',
+          label: '我的订单',
+          path: '/admin/order-records/my',
+          permission: 'order:view:own'
+        },
+        {
+          key: 'my-follow-ups',
+          label: '我的跟单',
+          path: '/admin/follow-up-records/my',
+          permission: 'follow_up:view:own'
+        },
       ]
     },
     {
@@ -204,6 +243,12 @@ export const useMenu = () => {
           label: '费用管理',
           path: '/admin/expenses',
           permission: 'expense:view:department'
+        },
+        {
+          key: 'my-expenses',
+          label: '我的费用',
+          path: '/admin/expenses/my',
+          permission: 'expense:view:own'
         }
       ]
     },
@@ -218,6 +263,12 @@ export const useMenu = () => {
           path: '/admin/contracts',
           permission: 'contract:view:department'
         },
+        {
+          key: 'my-contracts',
+          label: '我的合同',
+          path: '/admin/contracts/my',
+          permission: 'contract:view:own'
+        },
         {
           key: 'contract-renews',
           label: '合同续签',

+ 40 - 0
src/client/admin/routes.tsx

@@ -80,11 +80,31 @@ export const router = createBrowserRouter([
         element: <RejectedClients />,
         errorElement: <ErrorPage />
       },
+      {
+        path: 'clients/my',
+        element: <ClientsPage />,
+        errorElement: <ErrorPage />
+      },
+      {
+        path: 'clients/my/pending',
+        element: <PendingClients />,
+        errorElement: <ErrorPage />
+      },
+      {
+        path: 'clients/my/approved',
+        element: <ApprovedClients />,
+        errorElement: <ErrorPage />
+      },
       {
         path: 'expenses',
         element: <ExpensesPage />,
         errorElement: <ErrorPage />
       },
+      {
+        path: 'expenses/my',
+        element: <ExpensesPage />,
+        errorElement: <ErrorPage />
+      },
       {
         path: 'files',
         element: <FilesPage />,
@@ -95,6 +115,11 @@ export const router = createBrowserRouter([
         element: <ContractsPage />,
         errorElement: <ErrorPage />
       },
+      {
+        path: 'contracts/my',
+        element: <ContractsPage />,
+        errorElement: <ErrorPage />
+      },
       {
         path: 'contract-renews',
         element: <ContractRenewsPage />,
@@ -105,6 +130,11 @@ export const router = createBrowserRouter([
         element: <ContactsPage />,
         errorElement: <ErrorPage />
       },
+      {
+        path: 'contacts/my',
+        element: <ContactsPage />,
+        errorElement: <ErrorPage />
+      },
       {
         path: 'logs',
         element: <LogsPage />,
@@ -115,11 +145,21 @@ export const router = createBrowserRouter([
         element: <OrderRecordsPage />,
         errorElement: <ErrorPage />
       },
+      {
+        path: 'order-records/my',
+        element: <OrderRecordsPage />,
+        errorElement: <ErrorPage />
+      },
       {
         path: 'follow-up-records',
         element: <FollowUpRecordsPage />,
         errorElement: <ErrorPage />
       },
+      {
+        path: 'follow-up-records/my',
+        element: <FollowUpRecordsPage />,
+        errorElement: <ErrorPage />
+      },
       {
         path: 'departments',
         element: <DepartmentsPage />,