From 3096b2c0ddaffd6b393ce5dbc5dd2b0fd5649d14 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Fri, 12 Jun 2026 19:49:01 +0800 Subject: [PATCH] =?UTF-8?q?refactor(router):=20=E9=87=8D=E6=9E=84=20sqxp.t?= =?UTF-8?q?s=20=E4=B8=BA=205=20=E4=B8=AA=E4=B8=80=E7=BA=A7=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=88=86=E7=BB=84=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将原来的 14 个一级菜单重组为 5 个一级菜单分组(市场、生产、质检、运营支撑、系统管理), 与后端 backend/app/api/menu.py 保持一致。 - 市场(market): 细胞存储、科研捐赠、中试服务、基础实验、市场基础信息 - 生产(production): 临床应用、生产管理、生产基础信息 - 质检(quality): 质检管理、质检基础信息 - 运营支撑(operations): 系统基础信息、运营支撑 - 系统管理(system-manage): 系统管理、工作流管理 新增 isTopMenu: true 和 menuCode 到各一级菜单 meta。 Co-authored-by: Cursor --- web-admin/src/router/modules/sqxp.ts | 2376 +++++++++++++------------- 1 file changed, 1223 insertions(+), 1153 deletions(-) diff --git a/web-admin/src/router/modules/sqxp.ts b/web-admin/src/router/modules/sqxp.ts index bf010508..2865f40f 100644 --- a/web-admin/src/router/modules/sqxp.ts +++ b/web-admin/src/router/modules/sqxp.ts @@ -1,1263 +1,1333 @@ import type { AppRouteRecord } from '@/types/router' /** - * 前端路由(14 个一级菜单:细胞存储、科研捐赠、中试服务、临床应用、基础实验、 - * 质检管理、生产管理、运营支撑、市场基础信息、质检基础信息、生产基础信息、 - * 系统基础信息、工作流管理、系统管理) + * 前端路由(5 个一级菜单分组:市场、生产、质检、运营支撑、系统管理) * 与后端菜单对齐时请同步 `backend/app/api/menu.py`。 */ export const sqxpAdminRoutes: AppRouteRecord[] = [ - // ────────────────────────────────────────────── - // 1. 细胞存储 - // ────────────────────────────────────────────── + // ═══════════════════════════════════════════════════════════════════════════ + // 1. 市场 (menu:market) + // 二级菜单:细胞存储、科研捐赠、中试服务、基础实验、市场基础信息 + // ═══════════════════════════════════════════════════════════════════════════ { - id: 'CEL00000000000000000000000000001', - name: 'CellStorage', - path: '/cell-storage', + id: 'TOP00000000000000000000000000001', + name: 'Market', + path: '/market', component: '/index/index', meta: { - title: '细胞存储', - icon: 'ri:test-tube-line', + title: '市场', + icon: 'ri:shopping-cart-line', keepAlive: false, + isTopMenu: true, + menuCode: 'menu:market', roles: ['admin'] }, children: [ + // ── 细胞存储 ────────────────────────────────────────────────────────── { - id: '50000000000000000000000000000002', - name: 'CellStorageProtocol', - path: 'protocol', - component: '/cell-storage/protocol/index', + id: 'CEL00000000000000000000000000001', + name: 'CellStorage', + path: 'cell-storage', + component: '/index/index', meta: { - title: '采集协议单录入', - keepAlive: true, - isHide: true, - menuCode: 'biz:cellStorageProtocol:list' - } - }, - { - id: '50000000000000000000000000000003', - name: 'CellStorageProtocolAudit', - path: 'protocol-audit', - component: '/cell-storage/protocol-audit/index', - meta: { - title: '采集协议单', - keepAlive: true, - menuCode: 'biz:cellStorageProtocolAudit:list' - } - }, - { - id: '50000000000000000000000000000013', - name: 'CellStorageSampleInfo', - path: 'sample-info', - component: '/cell-storage/sample-info/index', - meta: { - title: '样本信息管理', - keepAlive: true, - menuCode: 'cell-storage:sample-info:list' - } - }, - { - id: '904b5173519411f1944300163e3bdd96', - name: 'CellStoragePaymentInfo', - path: 'payment-info', - component: '/cell-storage/payment-info/index', - meta: { - title: '缴费信息', + title: '细胞存储', + icon: 'ri:test-tube-line', keepAlive: false, - isHide: true, - menuCode: 'cellStorage:paymentInfo:list' - } + roles: ['admin'] + }, + children: [ + { + id: '50000000000000000000000000000002', + name: 'CellStorageProtocol', + path: 'protocol', + component: '/cell-storage/protocol/index', + meta: { + title: '采集协议单录入', + keepAlive: true, + isHide: true, + menuCode: 'biz:cellStorageProtocol:list' + } + }, + { + id: '50000000000000000000000000000003', + name: 'CellStorageProtocolAudit', + path: 'protocol-audit', + component: '/cell-storage/protocol-audit/index', + meta: { + title: '采集协议单', + keepAlive: true, + menuCode: 'biz:cellStorageProtocolAudit:list' + } + }, + { + id: '50000000000000000000000000000013', + name: 'CellStorageSampleInfo', + path: 'sample-info', + component: '/cell-storage/sample-info/index', + meta: { + title: '样本信息管理', + keepAlive: true, + menuCode: 'cell-storage:sample-info:list' + } + }, + { + id: '904b5173519411f1944300163e3bdd96', + name: 'CellStoragePaymentInfo', + path: 'payment-info', + component: '/cell-storage/payment-info/index', + meta: { + title: '缴费信息', + keepAlive: false, + isHide: true, + menuCode: 'cellStorage:paymentInfo:list' + } + }, + { + id: '50000000000000000000000000000004', + name: 'CellStoragePaymentConfirm', + path: 'payment-confirm', + component: '/cell-storage/payment-confirm/index', + meta: { + title: '缴退费财务确认', + keepAlive: true, + menuCode: 'biz:cellStoragePaymentConfirm:list' + } + }, + { + id: '70000000000000000000000000000011', + name: 'CellStorageStorageReleaseReview', + path: 'storage-release-review', + component: '/quality-inspection/storage-release-review/index', + meta: { + title: '入库放行审核', + keepAlive: true, + menuCode: 'biz:storageReleaseReview:list' + } + }, + { + id: '50000000000000000000000000000005', + name: 'CellStorageRefundConfirm', + path: 'refund-confirm', + component: '/cell-storage/refund-confirm/index', + meta: { + title: '退费确认(财务)', + keepAlive: false, + isHide: true, + menuCode: 'biz:cellStorageRefundConfirm:list' + } + }, + { + id: '50000000000000000000000000000011', + name: 'CellStorageSampleReceptionInfo', + path: 'sample-reception-info', + component: '/cell-storage/sample-reception-info/index', + meta: { + title: '样本接收信息', + keepAlive: false, + isHide: true, + menuCode: 'cell-storage:sample-reception-info:list' + } + }, + { + id: '50000000000000000000000000000012', + name: 'CellStorageStorageEntryInfo', + path: 'storage-entry-info', + component: '/cell-storage/storage-entry-info/index', + meta: { + title: '样本入库信息', + keepAlive: false, + isHide: true, + menuCode: 'cell-storage:storage-entry-info:list' + } + }, + { + id: '50000000000000000000000000000006', + name: 'CellStorageStorageCert', + path: 'storage-cert', + component: '/cell-storage/storage-cert/index', + meta: { + title: '储存证管理', + keepAlive: false, + isHide: true, + menuCode: 'cell-storage:storage-cert:list' + } + }, + { + id: '50000000000000000000000000000008', + name: 'CellStorageFullmoonTodo', + path: 'fullmoon-todo', + component: '/cell-storage/fullmoon-todo/index', + meta: { + title: '满月待办管理', + keepAlive: false, + isHide: true, + menuCode: 'cell-storage:fullmoon-todo:list' + } + } + ] }, + + // ── 科研捐赠 ────────────────────────────────────────────────────────── { - id: '50000000000000000000000000000004', - name: 'CellStoragePaymentConfirm', - path: 'payment-confirm', - component: '/cell-storage/payment-confirm/index', + id: 'RSC00000000000000000000000000001', + name: 'ResearchDonation', + path: 'research-donation', + component: '/index/index', meta: { - title: '缴退费财务确认', - keepAlive: true, - menuCode: 'biz:cellStoragePaymentConfirm:list' - } - }, - { - id: '70000000000000000000000000000011', - name: 'CellStorageStorageReleaseReview', - path: 'storage-release-review', - component: '/quality-inspection/storage-release-review/index', - meta: { - title: '入库放行审核', - keepAlive: true, - menuCode: 'biz:storageReleaseReview:list' - } - }, - { - id: '50000000000000000000000000000005', - name: 'CellStorageRefundConfirm', - path: 'refund-confirm', - component: '/cell-storage/refund-confirm/index', - meta: { - title: '退费确认(财务)', + title: '科研捐赠', + icon: 'ri:hand-heart-line', keepAlive: false, - isHide: true, - menuCode: 'biz:cellStorageRefundConfirm:list' - } + roles: ['admin'] + }, + children: [ + { + id: '60000000000000000000000000000002', + name: 'ResearchDonationList', + path: 'list', + component: '/research-donation/list/index', + meta: { + title: '捐赠协议单录入', + keepAlive: true, + isHide: true, + menuCode: 'biz:researchDonation:list' + } + }, + { + id: '60000000000000000000000000000003', + name: 'ResearchDonationAudit', + path: 'audit', + component: '/research-donation/audit/index', + meta: { + title: '捐赠协议单', + keepAlive: true, + menuCode: 'biz:researchDonationAudit:list' + } + }, + { + id: '60000000000000000000000000000004', + name: 'ResearchDonationSampleInfo', + path: 'sample-info', + component: '/research-donation/sample-info/index', + meta: { + title: '样本信息管理', + keepAlive: true, + menuCode: 'research-donation:sample-info:list' + } + } + ] }, + + // ── 中试服务 ────────────────────────────────────────────────────────── { - id: '50000000000000000000000000000011', - name: 'CellStorageSampleReceptionInfo', - path: 'sample-reception-info', - component: '/cell-storage/sample-reception-info/index', + id: 'PIL00000000000000000000000000001', + name: 'PilotService', + path: 'pilot-service', + component: '/index/index', meta: { - title: '样本接收信息', + title: '中试服务', + icon: 'ri:flask-line', keepAlive: false, - isHide: true, - menuCode: 'cell-storage:sample-reception-info:list' - } + roles: ['admin'] + }, + children: [ + { + id: '80000000000000000000000000000010', + name: 'PilotApplication', + path: 'pilot-application', + component: '/pilot-service/pilot-application/index', + meta: { + title: '中试服务申请单', + keepAlive: true, + menuCode: 'pilot-service:pilot-application:list' + }, + props: { bizType: 'pilot_service' } + }, + { + id: 'PIL00000000000000000000000000002', + name: 'PilotCheckupManagement', + path: 'checkup-management', + component: '/pilot-service/checkup-management/index', + meta: { + title: '体检管理', + keepAlive: false, + isHide: true, + menuCode: 'pilot-service:checkup-management:list' + }, + props: { bizType: 'pilot_service' } + }, + { + id: 'PIL00000000000000000000000000003', + name: 'PilotInfusionSchedule', + path: 'infusion-schedule-management', + component: '/pilot-service/infusion-schedule-management/index', + meta: { + title: '输注计划管理', + keepAlive: false, + isHide: true, + menuCode: 'pilot-service:infusion-schedule-management:list' + }, + props: { bizType: 'pilot_service' } + }, + { + id: 'PIL00000000000000000000000000004', + name: 'PilotOutboundRelease', + path: 'outbound-release-review', + component: '/pilot-service/outbound-release-review/index', + meta: { + title: '出库放行审核', + keepAlive: true, + menuCode: 'pilot-service:outbound-release-review:list' + }, + props: { bizType: 'pilot_service' } + } + ] }, + + // ── 基础实验 ────────────────────────────────────────────────────────── { - id: '50000000000000000000000000000012', - name: 'CellStorageStorageEntryInfo', - path: 'storage-entry-info', - component: '/cell-storage/storage-entry-info/index', + id: 'BEX00000000000000000000000000001', + name: 'BasicExperiment', + path: 'basic-experiment', + component: '/index/index', meta: { - title: '样本入库信息', + title: '基础实验', + icon: 'ri:flask-line', keepAlive: false, - isHide: true, - menuCode: 'cell-storage:storage-entry-info:list' - } + roles: ['admin'] + }, + children: [ + { + id: 'BEX00000000000000000000000000002', + name: 'BasicExperimentApplication', + path: 'application', + component: '/pilot-service/pilot-application/index', + meta: { + title: '基础实验申请单', + keepAlive: true, + menuCode: 'basic-experiment:application:list' + }, + props: { bizType: 'basic_experiment' } + }, + { + id: 'BEX00000000000000000000000000003', + name: 'BasicExperimentPaymentConfirm', + path: 'payment-confirm', + component: '/pilot-service/clinical-payment-confirm/index', + meta: { + title: '缴退费财务确认', + keepAlive: true, + menuCode: 'basic-experiment:payment-confirm:list' + }, + props: { bizType: 'basic_experiment' } + }, + { + id: 'BEX00000000000000000000000000004', + name: 'BasicExperimentOutboundRelease', + path: 'outbound-release-review', + component: '/pilot-service/outbound-release-review/index', + meta: { + title: '出库放行审核', + keepAlive: true, + menuCode: 'basic-experiment:outbound-release-review:list' + }, + props: { bizType: 'basic_experiment' } + } + ] }, + + // ── 市场基础信息 ───────────────────────────────────────────────────── { - id: '50000000000000000000000000000006', - name: 'CellStorageStorageCert', - path: 'storage-cert', - component: '/cell-storage/storage-cert/index', + id: 'MKT00000000000000000000000000001', + name: 'MarketInfo', + path: 'market-info', + component: '/index/index', meta: { - title: '储存证管理', + title: '市场基础信息', + icon: 'ri:price-tag-3-line', keepAlive: false, - isHide: true, - menuCode: 'cell-storage:storage-cert:list' - } - }, - { - id: '50000000000000000000000000000008', - name: 'CellStorageFullmoonTodo', - path: 'fullmoon-todo', - component: '/cell-storage/fullmoon-todo/index', - meta: { - title: '满月待办管理', - keepAlive: false, - isHide: true, - menuCode: 'cell-storage:fullmoon-todo:list' - } + roles: ['admin'] + }, + children: [ + { + id: '122', + name: 'BizCellSampleType', + path: 'cell-sample-type', + component: '/basic-info/cell-sample-type/index', + meta: { + title: '细胞样本基础信息维护', + keepAlive: true, + menuCode: 'biz:cellSampleType:list' + } + }, + { + id: '125', + name: 'BizSampleCode', + path: 'sample-code', + component: '/basic-info/sample-code/index', + meta: { + title: '样本编码管理', + keepAlive: false, + isHide: true, + menuCode: 'biz:sampleCode:list' + } + }, + { + id: '123', + name: 'BizCollectionRegion', + path: 'collection-region', + component: '/basic-info/collection-region/index', + meta: { + title: '细胞采集基础信息维护', + keepAlive: true, + menuCode: 'biz:collectionRegion:list' + } + }, + { + id: '124', + name: 'BizCollectionProtocolNo', + path: 'collection-protocol-no', + component: '/basic-info/collection-protocol-no/index', + meta: { + title: '采集协议号管理', + keepAlive: false, + isHide: true, + menuCode: 'biz:collectionProtocolNo:list' + } + }, + { + id: '80000000000000000000000000000002', + name: 'CellProductType', + path: 'cell-product-type', + component: '/pilot-service/cell-product-type/index', + meta: { + title: '细胞产品基础信息维护', + keepAlive: true, + menuCode: 'pilot-service:cell-product-type:list' + } + }, + { + id: '80000000000000000000000000000003', + name: 'CellProductSpec', + path: 'cell-product-spec', + component: '/pilot-service/cell-product-spec/index', + meta: { + title: '细胞产品规格管理', + keepAlive: false, + isHide: true, + menuCode: 'pilot-service:cell-product-spec:list' + } + }, + { + id: '80000000000000000000000000000004', + name: 'CellProductPrice', + path: 'cell-product-price', + component: '/pilot-service/cell-product-price/index', + meta: { + title: '细胞产品价格体系管理', + keepAlive: false, + isHide: true, + menuCode: 'pilot-service:cell-product-price:list' + } + }, + { + id: '80000000000000000000000000000005', + name: 'ProjectPriceSystem', + path: 'project-price-system', + component: '/pilot-service/project-price-system/index', + meta: { + title: '细胞产品项目价格管理', + keepAlive: false, + isHide: true, + menuCode: 'pilot-service:project-price-system:list' + } + }, + { + id: '40000000000000000000000000000007', + name: 'BasicInfoInsuranceCompany', + path: 'insurance-company', + component: '/basic-info/insurance-company/index', + meta: { + title: '保险公司及险种价格', + keepAlive: true, + menuCode: 'basic-info:insurance-company:list' + } + }, + { + id: '80000000000000000000000000000007', + name: 'CheckupInstitution', + path: 'checkup-institution', + component: '/pilot-service/checkup-institution/index', + meta: { + title: '体检机构及项目价格', + keepAlive: true, + menuCode: 'pilot-service:checkup-institution:list' + } + }, + { + id: '50000000000000000000000000000009', + name: 'MarketMaterial', + path: 'material', + component: '/cell-storage/material/index', + meta: { + title: '市场物料库', + keepAlive: true, + menuCode: 'biz:material:list' + } + }, + { + id: '50000000000000000000000000000010', + name: 'MarketMaterialStockLog', + path: 'material-stock-log', + component: '/cell-storage/material-stock-log/index', + meta: { + title: '市场物料变动记录', + keepAlive: false, + isHide: true, + menuCode: 'biz:materialStockLog:list' + } + }, + { + id: '121', + name: 'BizCustomer', + path: 'customer', + component: '/basic-info/customer/index', + meta: { title: '客户管理', keepAlive: true, menuCode: 'biz:customer:list' } + }, + { + id: '80000000000000000000000000000006', + name: 'Channel', + path: 'channel', + component: '/pilot-service/channel/index', + meta: { + title: '渠道信息管理', + keepAlive: true, + menuCode: 'pilot-service:channel:list' + } + }, + { + id: '80000000000000000000000000000008', + name: 'ChannelServiceOrder', + path: 'channel-service-order', + component: '/pilot-service/channel-service-order/index', + meta: { + title: '渠道服务购买订单', + keepAlive: false, + isHide: true, + menuCode: 'pilot-service:channel-service-order:list' + } + }, + { + id: '80000000000000000000000000000009', + name: 'ChannelServiceOrderFinance', + path: 'channel-service-order-finance', + component: '/pilot-service/channel-service-order-finance/index', + meta: { + title: '渠道服务订单(财务确认)', + keepAlive: true, + menuCode: 'pilot-service:channel-service-order-finance:list' + } + } + ] } ] }, - // ────────────────────────────────────────────── - // 2. 科研捐赠 - // ────────────────────────────────────────────── + // ═══════════════════════════════════════════════════════════════════════════ + // 2. 生产 (menu:production) + // 二级菜单:临床应用、生产管理、生产基础信息 + // ═══════════════════════════════════════════════════════════════════════════ { - id: 'RSC00000000000000000000000000001', - name: 'ResearchDonation', - path: '/research-donation', + id: 'TOP00000000000000000000000000002', + name: 'Production', + path: '/production-group', component: '/index/index', meta: { - title: '科研捐赠', - icon: 'ri:hand-heart-line', + title: '生产', + icon: 'ri:factory-line', keepAlive: false, + isTopMenu: true, + menuCode: 'menu:production', roles: ['admin'] }, children: [ + // ── 临床应用 ────────────────────────────────────────────────────────── { - id: '60000000000000000000000000000002', - name: 'ResearchDonationList', - path: 'list', - component: '/research-donation/list/index', - meta: { - title: '捐赠协议单录入', - keepAlive: true, - isHide: true, - menuCode: 'biz:researchDonation:list' - } - }, - { - id: '60000000000000000000000000000003', - name: 'ResearchDonationAudit', - path: 'audit', - component: '/research-donation/audit/index', - meta: { - title: '捐赠协议单', - keepAlive: true, - menuCode: 'biz:researchDonationAudit:list' - } - }, - { - id: '60000000000000000000000000000004', - name: 'ResearchDonationSampleInfo', - path: 'sample-info', - component: '/research-donation/sample-info/index', - meta: { - title: '样本信息管理', - keepAlive: true, - menuCode: 'research-donation:sample-info:list' - } - } - ] - }, - - // ────────────────────────────────────────────── - // 3. 中试服务 - // ────────────────────────────────────────────── - { - id: 'PIL00000000000000000000000000001', - name: 'PilotService', - path: '/pilot-service', - component: '/index/index', - meta: { - title: '中试服务', - icon: 'ri:flask-line', - keepAlive: false, - roles: ['admin'] - }, - children: [ - { - id: '80000000000000000000000000000010', - name: 'PilotApplication', - path: 'pilot-application', - component: '/pilot-service/pilot-application/index', - meta: { - title: '中试服务申请单', - keepAlive: true, - menuCode: 'pilot-service:pilot-application:list' - }, - props: { bizType: 'pilot_service' } - }, - { - id: 'PIL00000000000000000000000000002', - name: 'PilotCheckupManagement', - path: 'checkup-management', - component: '/pilot-service/checkup-management/index', - meta: { - title: '体检管理', - keepAlive: false, - isHide: true, - menuCode: 'pilot-service:checkup-management:list' - }, - props: { bizType: 'pilot_service' } - }, - { - id: 'PIL00000000000000000000000000003', - name: 'PilotInfusionSchedule', - path: 'infusion-schedule-management', - component: '/pilot-service/infusion-schedule-management/index', - meta: { - title: '输注计划管理', - keepAlive: false, - isHide: true, - menuCode: 'pilot-service:infusion-schedule-management:list' - }, - props: { bizType: 'pilot_service' } - }, - { - id: 'PIL00000000000000000000000000004', - name: 'PilotOutboundRelease', - path: 'outbound-release-review', - component: '/pilot-service/outbound-release-review/index', - meta: { - title: '出库放行审核', - keepAlive: true, - menuCode: 'pilot-service:outbound-release-review:list' - }, - props: { bizType: 'pilot_service' } - } - ] - }, - - // ────────────────────────────────────────────── - // 4. 临床应用 - // ────────────────────────────────────────────── - { - id: 'CLI00000000000000000000000000001', - name: 'ClinicalApplication', - path: '/clinical-application', - component: '/index/index', - meta: { - title: '临床应用', - icon: 'ri:heart-pulse-line', - keepAlive: false, - isHide: true, - roles: ['admin'] - }, - children: [ - { - id: 'CLI00000000000000000000000000002', - name: 'ClinicalApplicationList', + id: 'CLI00000000000000000000000000001', + name: 'ClinicalApplication', path: 'clinical-application', - component: '/pilot-service/pilot-application/index', + component: '/index/index', meta: { - title: '临床申请单', - keepAlive: true, - isHide: true, - menuCode: 'clinical-application:application:list' - }, - props: { bizType: 'clinical_application' } - }, - { - id: 'CLI00000000000000000000000000003', - name: 'ClinicalCheckupManagement', - path: 'clinical-checkup-management', - component: '/pilot-service/checkup-management/index', - meta: { - title: '体检管理', - keepAlive: true, - isHide: true, - menuCode: 'clinical-application:checkup-management:list' - }, - props: { bizType: 'clinical_application' } - }, - { - id: 'CLI00000000000000000000000000004', - name: 'ClinicalInfusionSchedule', - path: 'clinical-infusion-schedule-management', - component: '/pilot-service/infusion-schedule-management/index', - meta: { - title: '输注计划管理', + title: '临床应用', + icon: 'ri:heart-pulse-line', keepAlive: false, isHide: true, - menuCode: 'clinical-application:infusion-schedule-management:list' + roles: ['admin'] }, - props: { bizType: 'clinical_application' } + children: [ + { + id: 'CLI00000000000000000000000000002', + name: 'ClinicalApplicationList', + path: 'clinical-application', + component: '/pilot-service/pilot-application/index', + meta: { + title: '临床申请单', + keepAlive: true, + isHide: true, + menuCode: 'clinical-application:application:list' + }, + props: { bizType: 'clinical_application' } + }, + { + id: 'CLI00000000000000000000000000003', + name: 'ClinicalCheckupManagement', + path: 'clinical-checkup-management', + component: '/pilot-service/checkup-management/index', + meta: { + title: '体检管理', + keepAlive: true, + isHide: true, + menuCode: 'clinical-application:checkup-management:list' + }, + props: { bizType: 'clinical_application' } + }, + { + id: 'CLI00000000000000000000000000004', + name: 'ClinicalInfusionSchedule', + path: 'clinical-infusion-schedule-management', + component: '/pilot-service/infusion-schedule-management/index', + meta: { + title: '输注计划管理', + keepAlive: false, + isHide: true, + menuCode: 'clinical-application:infusion-schedule-management:list' + }, + props: { bizType: 'clinical_application' } + }, + { + id: 'CLI00000000000000000000000000005', + name: 'ClinicalPaymentInfo', + path: 'clinical-payment-info', + component: '/pilot-service/clinical-payment-info/index', + meta: { + title: '缴费信息', + keepAlive: false, + isHide: true, + menuCode: 'clinical-application:payment-info:list' + } + }, + { + id: 'CLI00000000000000000000000000006', + name: 'ClinicalPaymentConfirm', + path: 'clinical-payment-confirm', + component: '/pilot-service/clinical-payment-confirm/index', + meta: { + title: '缴退费财务确认', + keepAlive: true, + isHide: true, + menuCode: 'clinical-application:payment-confirm:list' + } + }, + { + id: 'CLI00000000000000000000000000007', + name: 'ClinicalRefundConfirm', + path: 'clinical-refund-confirm', + component: '/pilot-service/clinical-refund-confirm/index', + meta: { + title: '退费确认(财务)', + keepAlive: false, + isHide: true, + menuCode: 'clinical-application:refund-confirm:list' + } + }, + { + id: 'CLI00000000000000000000000000008', + name: 'ClinicalOutboundRelease', + path: 'clinical-outbound-release-review', + component: '/pilot-service/outbound-release-review/index', + meta: { + title: '出库放行审核', + keepAlive: true, + isHide: true, + menuCode: 'clinical-application:outbound-release-review:list' + }, + props: { bizType: 'clinical_application' } + } + ] }, + + // ── 生产管理 ────────────────────────────────────────────────────────── { - id: 'CLI00000000000000000000000000005', - name: 'ClinicalPaymentInfo', - path: 'clinical-payment-info', - component: '/pilot-service/clinical-payment-info/index', + id: 'PRM00000000000000000000000000001', + name: 'ProductionManage', + path: 'production', + component: '/index/index', meta: { - title: '缴费信息', + title: '生产管理', + icon: 'grid', keepAlive: false, - isHide: true, - menuCode: 'clinical-application:payment-info:list' - } - }, - { - id: 'CLI00000000000000000000000000006', - name: 'ClinicalPaymentConfirm', - path: 'clinical-payment-confirm', - component: '/pilot-service/clinical-payment-confirm/index', - meta: { - title: '缴退费财务确认', - keepAlive: true, - isHide: true, - menuCode: 'clinical-application:payment-confirm:list' - } - }, - { - id: 'CLI00000000000000000000000000007', - name: 'ClinicalRefundConfirm', - path: 'clinical-refund-confirm', - component: '/pilot-service/clinical-refund-confirm/index', - meta: { - title: '退费确认(财务)', - keepAlive: false, - isHide: true, - menuCode: 'clinical-application:refund-confirm:list' - } - }, - { - id: 'CLI00000000000000000000000000008', - name: 'ClinicalOutboundRelease', - path: 'clinical-outbound-release-review', - component: '/pilot-service/outbound-release-review/index', - meta: { - title: '出库放行审核', - keepAlive: true, - isHide: true, - menuCode: 'clinical-application:outbound-release-review:list' + roles: ['admin'] }, - props: { bizType: 'clinical_application' } + children: [ + { + id: '61000000000000000000000000000003', + name: 'ProductionStorageFacility', + path: 'storage-facility', + component: '/operations/storage-facility/index', + meta: { + title: '库位管理', + keepAlive: true, + menuCode: 'operations:storage-facility:list' + } + }, + { + id: '90000000000000000000000000000013', + name: 'CellProduct', + path: 'cell-product', + component: '/production/cell-product/index', + meta: { + title: '细胞产品库', + keepAlive: true, + menuCode: 'production:cell-product:list' + } + }, + { + id: '90000000000000000000000000000011', + name: 'ProductionWorkOrder', + path: 'production-work-order', + component: '/production/production-work-order/index', + meta: { + title: '生产工单', + keepAlive: true, + menuCode: 'production:work-order:list' + } + }, + { + id: '90000000000000000000000000000012', + name: 'ProductionTask', + path: 'production-task', + component: '/production/production-task/index', + meta: { + title: '生产任务', + keepAlive: false, + isHide: true, + menuCode: 'production:task:list' + } + }, + { + id: '91000000000000000000000000000001', + name: 'ProductionSampleReceptionCompletion', + path: 'sample-reception-completion', + component: '/production/sample-reception-completion/index', + meta: { + title: '样本接收信息完善', + keepAlive: true, + menuCode: 'production:sample-reception-completion:list' + } + } + ] + }, + + // ── 生产基础信息 ────────────────────────────────────────────────────── + { + id: 'PRB00000000000000000000000000001', + name: 'ProductionBase', + path: 'production-base', + component: '/index/index', + meta: { + title: '生产基础信息', + icon: 'ri:tools-line', + keepAlive: false, + roles: ['admin'] + }, + children: [ + { + id: '90000000000000000000000000000002', + name: 'ProductionConsumable', + path: 'consumable', + component: '/production/consumable/index', + meta: { + title: '耗材管理', + keepAlive: true, + menuCode: 'production:consumable:list' + } + }, + { + id: '90000000000000000000000000000007', + name: 'ProductionConsumablePack', + path: 'consumable-pack', + component: '/production/consumable-pack/index', + meta: { + title: '耗材包管理', + keepAlive: false, + isHide: true, + menuCode: 'production:consumable-pack:list' + } + }, + { + id: '90000000000000000000000000000003', + name: 'ProductionReagent', + path: 'reagent', + component: '/production/reagent/index', + meta: { + title: '试剂管理', + keepAlive: true, + menuCode: 'production:reagent:list' + } + }, + { + id: '90000000000000000000000000000004', + name: 'ProductionSop', + path: 'sop', + component: '/production/sop/index', + meta: { + title: 'SOP文档', + keepAlive: true, + menuCode: 'production:sop-document:list' + } + }, + { + id: '90000000000000000000000000000005', + name: 'ProductionProcessCategory', + path: 'process-category', + component: '/production/process-category/index', + meta: { + title: '工艺基础信息维护', + keepAlive: true, + menuCode: 'production:process-category:list' + } + }, + { + id: '90000000000000000000000000000006', + name: 'ProductionOutputType', + path: 'output-type', + component: '/production/output-type/index', + meta: { + title: '工艺产出物类型', + keepAlive: false, + isHide: true, + menuCode: 'production:output-type:list' + } + }, + { + id: '90000000000000000000000000000008', + name: 'ProductionProcess', + path: 'process', + component: '/production/process/index', + meta: { + title: '工艺库管理', + keepAlive: true, + menuCode: 'production:process:list' + } + }, + { + id: '90000000000000000000000000000010', + name: 'ProductionProcessRoute', + path: 'process-route', + component: '/production/process-route/index', + meta: { + title: '工艺路线管理', + keepAlive: false, + isHide: true, + menuCode: 'production:process-route:list' + } + } + ] } ] }, - // ────────────────────────────────────────────── - // 5. 基础实验 - // ────────────────────────────────────────────── + // ═══════════════════════════════════════════════════════════════════════════ + // 3. 质检 (menu:quality) + // 二级菜单:质检管理、质检基础信息 + // ═══════════════════════════════════════════════════════════════════════════ { - id: 'BEX00000000000000000000000000001', - name: 'BasicExperiment', - path: '/basic-experiment', + id: 'TOP00000000000000000000000000003', + name: 'Quality', + path: '/quality-group', component: '/index/index', meta: { - title: '基础实验', - icon: 'ri:flask-line', - keepAlive: false, - roles: ['admin'] - }, - children: [ - { - id: 'BEX00000000000000000000000000002', - name: 'BasicExperimentApplication', - path: 'application', - component: '/pilot-service/pilot-application/index', - meta: { - title: '基础实验申请单', - keepAlive: true, - menuCode: 'basic-experiment:application:list' - }, - props: { bizType: 'basic_experiment' } - }, - { - id: 'BEX00000000000000000000000000003', - name: 'BasicExperimentPaymentConfirm', - path: 'payment-confirm', - component: '/pilot-service/clinical-payment-confirm/index', - meta: { - title: '缴退费财务确认', - keepAlive: true, - menuCode: 'basic-experiment:payment-confirm:list' - }, - props: { bizType: 'basic_experiment' } - }, - { - id: 'BEX00000000000000000000000000004', - name: 'BasicExperimentOutboundRelease', - path: 'outbound-release-review', - component: '/pilot-service/outbound-release-review/index', - meta: { - title: '出库放行审核', - keepAlive: true, - menuCode: 'basic-experiment:outbound-release-review:list' - }, - props: { bizType: 'basic_experiment' } - } - ] - }, - - // ────────────────────────────────────────────── - // 6. 质检管理 - // ────────────────────────────────────────────── - { - id: 'QCM00000000000000000000000000001', - name: 'QualityManage', - path: '/quality-manage', - component: '/index/index', - meta: { - title: '质检管理', + title: '质检', icon: 'ri:shield-check-line', keepAlive: false, + isTopMenu: true, + menuCode: 'menu:quality', roles: ['admin'] }, children: [ + // ── 质检管理 ────────────────────────────────────────────────────────── { - id: '70000000000000000000000000000002', - name: 'QualityInspectionSampleReception', - path: 'sample-reception', - component: '/quality-inspection/sample-reception/index', + id: 'QCM00000000000000000000000000001', + name: 'QualityManage', + path: 'quality-manage', + component: '/index/index', meta: { - title: '样本接收', - keepAlive: true, - menuCode: 'biz:sampleReception:list' - } - }, - { - id: '70000000000000000000000000000007', - name: 'QualityInspectionQcWorkOrder', - path: 'qc-work-order', - component: '/quality-inspection/qc-work-order/index', - meta: { - title: '质检工单', - keepAlive: true, - menuCode: 'biz:qcWorkOrder:list' - } - }, - { - id: '71000000000000000000000000000002', - name: 'QualityInspectionEnvDetectRecord', - path: 'env-detect-record', - component: '/quality-inspection/env-detect-record/index', - meta: { - title: '环境检测管理', - keepAlive: true, - menuCode: 'biz:envDetectRecord:list' - } - }, - { - id: '92000000000000000000000000000001', - name: 'QualityInspectionMyQcMaterialUsage', - path: 'my-qc-material-usage', - component: '/quality-inspection/my-qc-material-usage/index', - meta: { - title: '我的物料领用记录', - keepAlive: true, - menuCode: 'biz:myQcMaterialUsage:list' - } - }, - { - id: '93000000000000000000000000000001', - name: 'QualityInspectionMyQcTask', - path: 'my-qc-task', - component: '/quality-inspection/my-qc-task/index', - meta: { - title: '我的质检任务', - keepAlive: true, - menuCode: 'biz:myQcTask:list' - } - }, - { - id: '70000000000000000000000000000008', - name: 'QualityInspectionQcTask', - path: 'qc-task', - component: '/quality-inspection/qc-task/index', - meta: { - title: '质检任务', + title: '质检管理', + icon: 'ri:shield-check-line', keepAlive: false, - isHide: true, - menuCode: 'biz:qcTask:list' - } + roles: ['admin'] + }, + children: [ + { + id: '70000000000000000000000000000002', + name: 'QualityInspectionSampleReception', + path: 'sample-reception', + component: '/quality-inspection/sample-reception/index', + meta: { + title: '样本接收', + keepAlive: true, + menuCode: 'biz:sampleReception:list' + } + }, + { + id: '70000000000000000000000000000007', + name: 'QualityInspectionQcWorkOrder', + path: 'qc-work-order', + component: '/quality-inspection/qc-work-order/index', + meta: { + title: '质检工单', + keepAlive: true, + menuCode: 'biz:qcWorkOrder:list' + } + }, + { + id: '71000000000000000000000000000002', + name: 'QualityInspectionEnvDetectRecord', + path: 'env-detect-record', + component: '/quality-inspection/env-detect-record/index', + meta: { + title: '环境检测管理', + keepAlive: true, + menuCode: 'biz:envDetectRecord:list' + } + }, + { + id: '92000000000000000000000000000001', + name: 'QualityInspectionMyQcMaterialUsage', + path: 'my-qc-material-usage', + component: '/quality-inspection/my-qc-material-usage/index', + meta: { + title: '我的物料领用记录', + keepAlive: true, + menuCode: 'biz:myQcMaterialUsage:list' + } + }, + { + id: '93000000000000000000000000000001', + name: 'QualityInspectionMyQcTask', + path: 'my-qc-task', + component: '/quality-inspection/my-qc-task/index', + meta: { + title: '我的质检任务', + keepAlive: true, + menuCode: 'biz:myQcTask:list' + } + }, + { + id: '70000000000000000000000000000008', + name: 'QualityInspectionQcTask', + path: 'qc-task', + component: '/quality-inspection/qc-task/index', + meta: { + title: '质检任务', + keepAlive: false, + isHide: true, + menuCode: 'biz:qcTask:list' + } + }, + { + name: 'QualityInspectionStorageReleaseReviewRedirect', + path: 'storage-release-review', + redirect: '/market/cell-storage/storage-release-review', + meta: { + title: '入库放行审核', + keepAlive: false, + isHide: true + } + } + ] }, + + // ── 质检基础信息 ────────────────────────────────────────────────────── { - name: 'QualityInspectionStorageReleaseReviewRedirect', - path: 'storage-release-review', - redirect: '/cell-storage/storage-release-review', + id: 'QCB00000000000000000000000000001', + name: 'QualityBase', + path: 'quality-base', + component: '/index/index', meta: { - title: '入库放行审核', + title: '质检基础信息', + icon: 'ri:clipboard-line', keepAlive: false, - isHide: true - } + roles: ['admin'] + }, + children: [ + { + id: '70000000000000000000000000000003', + name: 'QualityInspectionSampleReceptionCheckItem', + path: 'sample-reception-check-item', + component: '/quality-inspection/sample-reception-check-item/index', + meta: { + title: '接收检查项配置', + keepAlive: true, + menuCode: 'biz:sampleReceptionCheckItem:list' + } + }, + { + id: '70000000000000000000000000000006', + name: 'QualityInspectionLabTestItem', + path: 'lab-test-item', + component: '/quality-inspection/lab-test-item/index', + meta: { + title: '质检项目管理', + keepAlive: true, + menuCode: 'biz:qcLabTestItem:list' + } + }, + { + id: '70000000000000000000000000000004', + name: 'QualityInspectionThirdPartyCompany', + path: 'third-party-company', + component: '/quality-inspection/third-party-company/index', + meta: { + title: '第三方检测公司及项目', + keepAlive: false, + isHide: true, + menuCode: 'biz:qcThirdPartyCompany:list' + } + }, + { + id: '71000000000000000000000000000001', + name: 'QualityInspectionEnvDetectItem', + path: 'env-detect-item', + component: '/quality-inspection/env-detect-item/index', + meta: { + title: '环境检测项维护', + keepAlive: true, + menuCode: 'biz:envDetectItem:list' + } + }, + { + id: '70000000000000000000000000000009', + name: 'QualityInspectionQcMaterial', + path: 'qc-material', + component: '/quality-inspection/qc-material/index', + meta: { + title: '质检物料库', + keepAlive: true, + menuCode: 'biz:qcMaterial:list' + } + }, + { + id: '70000000000000000000000000000010', + name: 'QualityInspectionQcMaterialUsage', + path: 'qc-material-usage', + component: '/quality-inspection/qc-material-usage/index', + meta: { + title: '质检物料变动记录', + keepAlive: false, + isHide: true, + menuCode: 'biz:qcMaterialUsage:list' + } + } + ] } ] }, - // ────────────────────────────────────────────── - // 6. 生产管理 - // ────────────────────────────────────────────── + // ═══════════════════════════════════════════════════════════════════════════ + // 4. 运营支撑 (menu:operations) + // 二级菜单:系统基础信息、运营支撑 + // ═══════════════════════════════════════════════════════════════════════════ { - id: 'PRM00000000000000000000000000001', - name: 'ProductionManage', - path: '/production', - component: '/index/index', - meta: { - title: '生产管理', - icon: 'grid', - keepAlive: false, - roles: ['admin'] - }, - children: [ - { - id: '61000000000000000000000000000003', - name: 'ProductionStorageFacility', - path: 'storage-facility', - component: '/operations/storage-facility/index', - meta: { - title: '库位管理', - keepAlive: true, - menuCode: 'operations:storage-facility:list' - } - }, - { - id: '90000000000000000000000000000013', - name: 'CellProduct', - path: 'cell-product', - component: '/production/cell-product/index', - meta: { - title: '细胞产品库', - keepAlive: true, - menuCode: 'production:cell-product:list' - } - }, - { - id: '90000000000000000000000000000011', - name: 'ProductionWorkOrder', - path: 'production-work-order', - component: '/production/production-work-order/index', - meta: { - title: '生产工单', - keepAlive: true, - menuCode: 'production:work-order:list' - } - }, - { - id: '90000000000000000000000000000012', - name: 'ProductionTask', - path: 'production-task', - component: '/production/production-task/index', - meta: { - title: '生产任务', - keepAlive: false, - isHide: true, - menuCode: 'production:task:list' - } - }, - { - id: '91000000000000000000000000000001', - name: 'ProductionSampleReceptionCompletion', - path: 'sample-reception-completion', - component: '/production/sample-reception-completion/index', - meta: { - title: '样本接收信息完善', - keepAlive: true, - menuCode: 'production:sample-reception-completion:list' - } - } - ] - }, - - // ────────────────────────────────────────────── - // 7. 运营支撑 - // ────────────────────────────────────────────── - { - id: 'OPS00000000000000000000000000001', - name: 'Operations', - path: '/operations', + id: 'TOP00000000000000000000000000004', + name: 'OperationsGroup', + path: '/operations-group', component: '/index/index', meta: { title: '运营支撑', - icon: 'operation', + icon: 'ri:settings-3-line', keepAlive: false, + isTopMenu: true, + menuCode: 'menu:operations', roles: ['admin'] }, children: [ + // ── 系统基础信息 ────────────────────────────────────────────────────── { - id: '61000000000000000000000000000002', - name: 'CleanRoom', - path: 'clean-room', - component: '/operations/clean-room/index', + id: 'SYSB000000000000000000000000000001', + name: 'SystemBase', + path: 'system-base', + component: '/index/index', meta: { - title: '洁净室管理', - keepAlive: true, - menuCode: 'operations:clean-room:list' - } + title: '系统基础信息', + icon: 'ri:archive-line', + keepAlive: false, + roles: ['admin'] + }, + children: [ + { + id: '107', + name: 'Site', + path: 'site', + component: '/system/site/index', + meta: { + title: '站点管理', + keepAlive: true, + menuCode: 'system:site:list' + } + }, + { + id: '109', + name: 'Unit', + path: 'unit', + component: '/system/unit/index', + meta: { + title: '物品单位管理', + keepAlive: true, + menuCode: 'system:unit:list' + } + }, + { + id: '110', + name: 'Express', + path: 'express', + component: '/system/express/index', + meta: { + title: '快递公司', + keepAlive: true, + menuCode: 'system:express:list' + } + } + ] }, + + // ── 运营支撑 ────────────────────────────────────────────────────────── { - id: '61000000000000000000000000000004', - name: 'ExhibitionAppointment', - path: 'exhibition-appointment', - component: '/operations/exhibition-appointment/index', + id: 'OPS00000000000000000000000000001', + name: 'Operations', + path: 'operations', + component: '/index/index', meta: { - title: '展馆预约', - keepAlive: true, - menuCode: 'operations:exhibition-appointment:list' - } + title: '运营支撑', + icon: 'operation', + keepAlive: false, + roles: ['admin'] + }, + children: [ + { + id: '61000000000000000000000000000002', + name: 'CleanRoom', + path: 'clean-room', + component: '/operations/clean-room/index', + meta: { + title: '洁净室管理', + keepAlive: true, + menuCode: 'operations:clean-room:list' + } + }, + { + id: '61000000000000000000000000000004', + name: 'ExhibitionAppointment', + path: 'exhibition-appointment', + component: '/operations/exhibition-appointment/index', + meta: { + title: '展馆预约', + keepAlive: true, + menuCode: 'operations:exhibition-appointment:list' + } + } + ] } ] }, - // ────────────────────────────────────────────── - // 8. 市场基础信息 - // ────────────────────────────────────────────── + // ═══════════════════════════════════════════════════════════════════════════ + // 5. 系统管理 (menu:system-manage) + // 二级菜单:系统管理、工作流管理 + // ═══════════════════════════════════════════════════════════════════════════ { - id: 'MKT00000000000000000000000000001', - name: 'MarketInfo', - path: '/market-info', - component: '/index/index', - meta: { - title: '市场基础信息', - icon: 'ri:price-tag-3-line', - keepAlive: false, - roles: ['admin'] - }, - children: [ - { - id: '122', - name: 'BizCellSampleType', - path: 'cell-sample-type', - component: '/basic-info/cell-sample-type/index', - meta: { - title: '细胞样本基础信息维护', - keepAlive: true, - menuCode: 'biz:cellSampleType:list' - } - }, - { - id: '125', - name: 'BizSampleCode', - path: 'sample-code', - component: '/basic-info/sample-code/index', - meta: { - title: '样本编码管理', - keepAlive: false, - isHide: true, - menuCode: 'biz:sampleCode:list' - } - }, - { - id: '123', - name: 'BizCollectionRegion', - path: 'collection-region', - component: '/basic-info/collection-region/index', - meta: { - title: '细胞采集基础信息维护', - keepAlive: true, - menuCode: 'biz:collectionRegion:list' - } - }, - { - id: '124', - name: 'BizCollectionProtocolNo', - path: 'collection-protocol-no', - component: '/basic-info/collection-protocol-no/index', - meta: { - title: '采集协议号管理', - keepAlive: false, - isHide: true, - menuCode: 'biz:collectionProtocolNo:list' - } - }, - { - id: '80000000000000000000000000000002', - name: 'CellProductType', - path: 'cell-product-type', - component: '/pilot-service/cell-product-type/index', - meta: { - title: '细胞产品基础信息维护', - keepAlive: true, - menuCode: 'pilot-service:cell-product-type:list' - } - }, - { - id: '80000000000000000000000000000003', - name: 'CellProductSpec', - path: 'cell-product-spec', - component: '/pilot-service/cell-product-spec/index', - meta: { - title: '细胞产品规格管理', - keepAlive: false, - isHide: true, - menuCode: 'pilot-service:cell-product-spec:list' - } - }, - { - id: '80000000000000000000000000000004', - name: 'CellProductPrice', - path: 'cell-product-price', - component: '/pilot-service/cell-product-price/index', - meta: { - title: '细胞产品价格体系管理', - keepAlive: false, - isHide: true, - menuCode: 'pilot-service:cell-product-price:list' - } - }, - { - id: '80000000000000000000000000000005', - name: 'ProjectPriceSystem', - path: 'project-price-system', - component: '/pilot-service/project-price-system/index', - meta: { - title: '细胞产品项目价格管理', - keepAlive: false, - isHide: true, - menuCode: 'pilot-service:project-price-system:list' - } - }, - { - id: '40000000000000000000000000000007', - name: 'BasicInfoInsuranceCompany', - path: 'insurance-company', - component: '/basic-info/insurance-company/index', - meta: { - title: '保险公司及险种价格', - keepAlive: true, - menuCode: 'basic-info:insurance-company:list' - } - }, - { - id: '80000000000000000000000000000007', - name: 'CheckupInstitution', - path: 'checkup-institution', - component: '/pilot-service/checkup-institution/index', - meta: { - title: '体检机构及项目价格', - keepAlive: true, - menuCode: 'pilot-service:checkup-institution:list' - } - }, - { - id: '50000000000000000000000000000009', - name: 'MarketMaterial', - path: 'material', - component: '/cell-storage/material/index', - meta: { - title: '市场物料库', - keepAlive: true, - menuCode: 'biz:material:list' - } - }, - { - id: '50000000000000000000000000000010', - name: 'MarketMaterialStockLog', - path: 'material-stock-log', - component: '/cell-storage/material-stock-log/index', - meta: { - title: '市场物料变动记录', - keepAlive: false, - isHide: true, - menuCode: 'biz:materialStockLog:list' - } - }, - { - id: '121', - name: 'BizCustomer', - path: 'customer', - component: '/basic-info/customer/index', - meta: { title: '客户管理', keepAlive: true, menuCode: 'biz:customer:list' } - }, - { - id: '80000000000000000000000000000006', - name: 'Channel', - path: 'channel', - component: '/pilot-service/channel/index', - meta: { - title: '渠道信息管理', - keepAlive: true, - menuCode: 'pilot-service:channel:list' - } - }, - { - id: '80000000000000000000000000000008', - name: 'ChannelServiceOrder', - path: 'channel-service-order', - component: '/pilot-service/channel-service-order/index', - meta: { - title: '渠道服务购买订单', - keepAlive: false, - isHide: true, - menuCode: 'pilot-service:channel-service-order:list' - } - }, - { - id: '80000000000000000000000000000009', - name: 'ChannelServiceOrderFinance', - path: 'channel-service-order-finance', - component: '/pilot-service/channel-service-order-finance/index', - meta: { - title: '渠道服务订单(财务确认)', - keepAlive: true, - menuCode: 'pilot-service:channel-service-order-finance:list' - } - } - ] - }, - - // ────────────────────────────────────────────── - // 9. 质检基础信息 - // ────────────────────────────────────────────── - { - id: 'QCB00000000000000000000000000001', - name: 'QualityBase', - path: '/quality-base', - component: '/index/index', - meta: { - title: '质检基础信息', - icon: 'ri:clipboard-line', - keepAlive: false, - roles: ['admin'] - }, - children: [ - { - id: '70000000000000000000000000000003', - name: 'QualityInspectionSampleReceptionCheckItem', - path: 'sample-reception-check-item', - component: '/quality-inspection/sample-reception-check-item/index', - meta: { - title: '接收检查项配置', - keepAlive: true, - menuCode: 'biz:sampleReceptionCheckItem:list' - } - }, - { - id: '70000000000000000000000000000006', - name: 'QualityInspectionLabTestItem', - path: 'lab-test-item', - component: '/quality-inspection/lab-test-item/index', - meta: { - title: '质检项目管理', - keepAlive: true, - menuCode: 'biz:qcLabTestItem:list' - } - }, - { - id: '70000000000000000000000000000004', - name: 'QualityInspectionThirdPartyCompany', - path: 'third-party-company', - component: '/quality-inspection/third-party-company/index', - meta: { - title: '第三方检测公司及项目', - keepAlive: false, - isHide: true, - menuCode: 'biz:qcThirdPartyCompany:list' - } - }, - { - id: '71000000000000000000000000000001', - name: 'QualityInspectionEnvDetectItem', - path: 'env-detect-item', - component: '/quality-inspection/env-detect-item/index', - meta: { - title: '环境检测项维护', - keepAlive: true, - menuCode: 'biz:envDetectItem:list' - } - }, - { - id: '70000000000000000000000000000009', - name: 'QualityInspectionQcMaterial', - path: 'qc-material', - component: '/quality-inspection/qc-material/index', - meta: { - title: '质检物料库', - keepAlive: true, - menuCode: 'biz:qcMaterial:list' - } - }, - { - id: '70000000000000000000000000000010', - name: 'QualityInspectionQcMaterialUsage', - path: 'qc-material-usage', - component: '/quality-inspection/qc-material-usage/index', - meta: { - title: '质检物料变动记录', - keepAlive: false, - isHide: true, - menuCode: 'biz:qcMaterialUsage:list' - } - } - ] - }, - - // ────────────────────────────────────────────── - // 10. 生产基础信息 - // ────────────────────────────────────────────── - { - id: 'PRB00000000000000000000000000001', - name: 'ProductionBase', - path: '/production-base', - component: '/index/index', - meta: { - title: '生产基础信息', - icon: 'ri:tools-line', - keepAlive: false, - roles: ['admin'] - }, - children: [ - { - id: '90000000000000000000000000000002', - name: 'ProductionConsumable', - path: 'consumable', - component: '/production/consumable/index', - meta: { - title: '耗材管理', - keepAlive: true, - menuCode: 'production:consumable:list' - } - }, - { - id: '90000000000000000000000000000007', - name: 'ProductionConsumablePack', - path: 'consumable-pack', - component: '/production/consumable-pack/index', - meta: { - title: '耗材包管理', - keepAlive: false, - isHide: true, - menuCode: 'production:consumable-pack:list' - } - }, - { - id: '90000000000000000000000000000003', - name: 'ProductionReagent', - path: 'reagent', - component: '/production/reagent/index', - meta: { - title: '试剂管理', - keepAlive: true, - menuCode: 'production:reagent:list' - } - }, - { - id: '90000000000000000000000000000004', - name: 'ProductionSop', - path: 'sop', - component: '/production/sop/index', - meta: { - title: 'SOP文档', - keepAlive: true, - menuCode: 'production:sop-document:list' - } - }, - { - id: '90000000000000000000000000000005', - name: 'ProductionProcessCategory', - path: 'process-category', - component: '/production/process-category/index', - meta: { - title: '工艺基础信息维护', - keepAlive: true, - menuCode: 'production:process-category:list' - } - }, - { - id: '90000000000000000000000000000006', - name: 'ProductionOutputType', - path: 'output-type', - component: '/production/output-type/index', - meta: { - title: '工艺产出物类型', - keepAlive: false, - isHide: true, - menuCode: 'production:output-type:list' - } - }, - { - id: '90000000000000000000000000000008', - name: 'ProductionProcess', - path: 'process', - component: '/production/process/index', - meta: { - title: '工艺库管理', - keepAlive: true, - menuCode: 'production:process:list' - } - }, - { - id: '90000000000000000000000000000010', - name: 'ProductionProcessRoute', - path: 'process-route', - component: '/production/process-route/index', - meta: { - title: '工艺路线管理', - keepAlive: false, - isHide: true, - menuCode: 'production:process-route:list' - } - } - ] - }, - - // ────────────────────────────────────────────── - // 11. 系统基础信息 - // ────────────────────────────────────────────── - { - id: 'SYSB000000000000000000000000000001', - name: 'SystemBase', - path: '/system-base', - component: '/index/index', - meta: { - title: '系统基础信息', - icon: 'ri:archive-line', - keepAlive: false, - roles: ['admin'] - }, - children: [ - { - id: '107', - name: 'Site', - path: 'site', - component: '/system/site/index', - meta: { - title: '站点管理', - keepAlive: true, - menuCode: 'system:site:list' - } - }, - { - id: '109', - name: 'Unit', - path: 'unit', - component: '/system/unit/index', - meta: { - title: '物品单位管理', - keepAlive: true, - menuCode: 'system:unit:list' - } - }, - { - id: '110', - name: 'Express', - path: 'express', - component: '/system/express/index', - meta: { - title: '快递公司', - keepAlive: true, - menuCode: 'system:express:list' - } - } - ] - }, - - // ────────────────────────────────────────────── - // 12. 工作流管理 - // ────────────────────────────────────────────── - { - id: 'WKF00000000000000000000000000001', - name: 'Workflow', - path: '/workflow', - component: '/index/index', - meta: { - title: '工作流管理', - icon: 'workflow', - keepAlive: false, - roles: ['admin'] - }, - children: [ - { - id: '10000000000000000000000000000wf01', - name: 'WorkflowProcess', - path: 'process', - component: '/system/workflow/process/index', - meta: { - title: '流程配置', - keepAlive: true, - icon: 'workflow', - menuCode: 'workflow:process' - } - }, - { - id: '10000000000000000000000000000wf02', - name: 'WorkflowPending', - path: 'pending', - component: '/system/workflow/task-pending/index', - meta: { - title: '待办中心', - keepAlive: true, - menuCode: 'workflow:pending' - } - }, - { - id: '10000000000000000000000000000wf03', - name: 'WorkflowCompleted', - path: 'completed', - component: '/system/workflow/task-completed/index', - meta: { - title: '已办中心', - keepAlive: true, - menuCode: 'workflow:completed' - } - }, - { - id: '10000000000000000000000000000wf05', - name: 'WorkflowMyApplications', - path: 'my-applications', - component: '/system/workflow/my-applications/index', - meta: { - title: '我的申请', - keepAlive: true, - menuCode: 'workflow:myApplications' - } - }, - { - id: '10000000000000000000000000000wf04', - name: 'LeaveRequest', - path: 'leave', - component: '/system/leave/index', - meta: { - title: '请假申请', - keepAlive: true, - menuCode: 'workflow:leave' - } - } - ] - }, - - // ────────────────────────────────────────────── - // 13. 系统管理 - // ────────────────────────────────────────────── - { - id: 'SYSM000000000000000000000000000001', - name: 'SystemManage', - path: '/system', + id: 'TOP00000000000000000000000000005', + name: 'SystemManageGroup', + path: '/system-manage', component: '/index/index', meta: { title: '系统管理', - icon: 'ri:settings-3-line', + icon: 'ri:server-line', keepAlive: false, + isTopMenu: true, + menuCode: 'menu:system-manage', roles: ['admin'] }, children: [ + // ── 系统管理 ────────────────────────────────────────────────────────── { - id: '101', - name: 'Tenant', - path: 'tenant', - component: '/system/tenant/index', + id: 'SYSM000000000000000000000000000001', + name: 'SystemManage', + path: 'system', + component: '/index/index', meta: { - title: '租户管理', - keepAlive: true, - menuCode: 'system:tenant:list' - } + title: '系统管理', + icon: 'ri:settings-3-line', + keepAlive: false, + roles: ['admin'] + }, + children: [ + { + id: '101', + name: 'Tenant', + path: 'tenant', + component: '/system/tenant/index', + meta: { + title: '租户管理', + keepAlive: true, + menuCode: 'system:tenant:list' + } + }, + { + id: '102', + name: 'Dict', + path: 'dict', + component: '/system/dict/index', + meta: { + title: '字典管理', + keepAlive: true, + menuCode: 'system:dict:list' + } + }, + { + id: '106', + name: 'Menu', + path: 'menu', + component: '/system/menu/index', + meta: { + title: '菜单管理', + keepAlive: true, + menuCode: 'system:menu:list' + } + }, + { + id: '103', + name: 'Dept', + path: 'dept', + component: '/system/dept/index', + meta: { + title: '组织管理', + keepAlive: true, + menuCode: 'system:dept:list' + } + }, + { + id: '105', + name: 'Role', + path: 'role', + component: '/system/role/index', + meta: { + title: '角色管理', + keepAlive: true, + menuCode: 'system:role:list' + } + }, + { + id: '104', + name: 'User', + path: 'user', + component: '/system/user/index', + meta: { + title: '用户管理', + keepAlive: true, + menuCode: 'system:user:list' + } + }, + { + id: '108', + name: 'Post', + path: 'post', + component: '/system/post/index', + meta: { + title: '职位管理', + keepAlive: true, + menuCode: 'system:post:list' + } + }, + { + id: '10000000000000000000000000000008', + name: 'UserDetail', + path: 'user/detail', + component: '/system/user/detail', + meta: { title: '用户详情', isHide: true, keepAlive: true } + } + ] }, + + // ── 工作流管理 ───────────────────────────────────────────────────────── { - id: '102', - name: 'Dict', - path: 'dict', - component: '/system/dict/index', + id: 'WKF00000000000000000000000000001', + name: 'Workflow', + path: 'workflow', + component: '/index/index', meta: { - title: '字典管理', - keepAlive: true, - menuCode: 'system:dict:list' - } - }, - { - id: '106', - name: 'Menu', - path: 'menu', - component: '/system/menu/index', - meta: { - title: '菜单管理', - keepAlive: true, - menuCode: 'system:menu:list' - } - }, - { - id: '103', - name: 'Dept', - path: 'dept', - component: '/system/dept/index', - meta: { - title: '组织管理', - keepAlive: true, - menuCode: 'system:dept:list' - } - }, - { - id: '105', - name: 'Role', - path: 'role', - component: '/system/role/index', - meta: { - title: '角色管理', - keepAlive: true, - menuCode: 'system:role:list' - } - }, - { - id: '104', - name: 'User', - path: 'user', - component: '/system/user/index', - meta: { - title: '用户管理', - keepAlive: true, - menuCode: 'system:user:list' - } - }, - { - id: '108', - name: 'Post', - path: 'post', - component: '/system/post/index', - meta: { - title: '职位管理', - keepAlive: true, - menuCode: 'system:post:list' - } - }, - { - id: '10000000000000000000000000000008', - name: 'UserDetail', - path: 'user/detail', - component: '/system/user/detail', - meta: { title: '用户详情', isHide: true, keepAlive: true } + title: '工作流管理', + icon: 'workflow', + keepAlive: false, + roles: ['admin'] + }, + children: [ + { + id: '10000000000000000000000000000wf01', + name: 'WorkflowProcess', + path: 'process', + component: '/system/workflow/process/index', + meta: { + title: '流程配置', + keepAlive: true, + icon: 'workflow', + menuCode: 'workflow:process' + } + }, + { + id: '10000000000000000000000000000wf02', + name: 'WorkflowPending', + path: 'pending', + component: '/system/workflow/task-pending/index', + meta: { + title: '待办中心', + keepAlive: true, + menuCode: 'workflow:pending' + } + }, + { + id: '10000000000000000000000000000wf03', + name: 'WorkflowCompleted', + path: 'completed', + component: '/system/workflow/task-completed/index', + meta: { + title: '已办中心', + keepAlive: true, + menuCode: 'workflow:completed' + } + }, + { + id: '10000000000000000000000000000wf05', + name: 'WorkflowMyApplications', + path: 'my-applications', + component: '/system/workflow/my-applications/index', + meta: { + title: '我的申请', + keepAlive: true, + menuCode: 'workflow:myApplications' + } + }, + { + id: '10000000000000000000000000000wf04', + name: 'LeaveRequest', + path: 'leave', + component: '/system/leave/index', + meta: { + title: '请假申请', + keepAlive: true, + menuCode: 'workflow:leave' + } + } + ] } ] }