diff --git a/backend/app/api/menu.py b/backend/app/api/menu.py index b27c53bd..4d04effe 100644 --- a/backend/app/api/menu.py +++ b/backend/app/api/menu.py @@ -1,4 +1,4 @@ -"""运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,13 个一级菜单)""" +"""运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)""" from fastapi import APIRouter, Depends from app.core.menu_guard import require_admin_or_super_admin @@ -6,770 +6,827 @@ from app.core.response import success_response router = APIRouter(prefix="/web/menu", tags=["菜单管理"]) -# 与 web-admin/src/router/modules/sqxp.ts 一致:13 个一级菜单 +# 与 web-admin/src/router/modules/sqxp.ts 一致:5 个一级菜单分组 STATIC_MENU_TREE = [ # ──────────────────────────────────────────── - # 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", - "meta": {"title": "采集协议单录入", "keepAlive": True, "isHide": True, "menuCode": "biz:cellStorageProtocol:list"}, + "id": "CEL00000000000000000000000000001", + "name": "CellStorage", + "path": "cell-storage", + "component": "/index/index", + "meta": { + "title": "细胞存储", + "icon": "ri:test-tube-line", + "keepAlive": False, + "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": "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": "50000000000000000000000000000003", - "name": "CellStorageProtocolAudit", - "path": "protocol-audit", - "component": "/cell-storage/protocol-audit/index", - "meta": {"title": "采集协议单", "keepAlive": True, "menuCode": "biz:cellStorageProtocolAudit:list"}, + "id": "RSC00000000000000000000000000001", + "name": "ResearchDonation", + "path": "research-donation", + "component": "/index/index", + "meta": { + "title": "科研捐赠", + "icon": "ri:hand-heart-line", + "keepAlive": False, + "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": "50000000000000000000000000000013", - "name": "CellStorageSampleInfo", - "path": "sample-info", - "component": "/cell-storage/sample-info/index", - "meta": {"title": "样本信息管理", "keepAlive": True, "menuCode": "cell-storage:sample-info:list"}, + "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"}, + }, + { + "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"}, + }, + ], }, + # 基础实验 { - "id": "50000000000000000000000000000004", - "name": "CellStoragePaymentConfirm", - "path": "payment-confirm", - "component": "/cell-storage/payment-confirm/index", - "meta": {"title": "缴退费财务确认", "keepAlive": True, "menuCode": "biz:cellStoragePaymentConfirm:list"}, + "id": "BEX00000000000000000000000000001", + "name": "BasicExperiment", + "path": "basic-experiment", + "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", + }, + }, + { + "id": "BEX00000000000000000000000000003", + "name": "BasicExperimentPaymentConfirm", + "path": "payment-confirm", + "component": "/pilot-service/clinical-payment-confirm/index", + "meta": { + "title": "缴退费财务确认", + "keepAlive": True, + "menuCode": "basic-experiment:payment-confirm:list", + }, + }, + { + "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", + }, + }, + ], }, + # 市场基础信息 { - "id": "70000000000000000000000000000011", - "name": "CellStorageStorageReleaseReview", - "path": "storage-release-review", - "component": "/quality-inspection/storage-release-review/index", - "meta": {"title": "入库放行审核", "keepAlive": True, "menuCode": "biz:storageReleaseReview:list"}, + "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": "123", + "name": "BizCollectionRegion", + "path": "collection-region", + "component": "/basic-info/collection-region/index", + "meta": {"title": "细胞采集基础信息维护", "keepAlive": True, "menuCode": "biz:collectionRegion: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": "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": "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": "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"}, - }, - { - "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"}, - }, - ], - }, - - # ──────────────────────────────────────────── - # 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", - }, - }, - { - "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", - }, - }, - { - "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"], }, + "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", + }, + }, + { + "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", + }, + }, + { + "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", + }, + }, + { + "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": 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", + }, + }, + ], }, + # 生产管理 { - "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", + "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": "91000000000000000000000000000001", + "name": "ProductionSampleReceptionCompletion", + "path": "sample-reception-completion", + "component": "/production/sample-reception-completion/index", + "meta": { + "title": "样本接收信息完善", + "keepAlive": True, + "menuCode": "production:sample-reception-completion:list", + }, + }, + ], }, + # 生产基础信息 { - "id": "CLI00000000000000000000000000006", - "name": "ClinicalPaymentConfirm", - "path": "clinical-payment-confirm", - "component": "/pilot-service/clinical-payment-confirm/index", + "id": "PRB00000000000000000000000000001", + "name": "ProductionBase", + "path": "production-base", + "component": "/index/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": 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", + "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": "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": "90000000000000000000000000000008", + "name": "ProductionProcess", + "path": "process", + "component": "/production/process/index", + "meta": {"title": "工艺库管理", "keepAlive": True, "menuCode": "production:process: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", - }, - }, - { - "id": "BEX00000000000000000000000000003", - "name": "BasicExperimentPaymentConfirm", - "path": "payment-confirm", - "component": "/pilot-service/clinical-payment-confirm/index", - "meta": { - "title": "缴退费财务确认", - "keepAlive": True, - "menuCode": "basic-experiment:payment-confirm:list", - }, - }, - { - "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", - }, - }, - ], - }, - - # ──────────────────────────────────────────── - # 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", - "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", + "id": "QCM00000000000000000000000000001", + "name": "QualityManage", + "path": "quality-manage", + "component": "/index/index", "meta": { - "title": "我的物料领用记录", - "keepAlive": True, - "menuCode": "biz:myQcMaterialUsage:list", + "title": "质检管理", + "icon": "ri:shield-check-line", + "keepAlive": False, + "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": "93000000000000000000000000000001", - "name": "QualityInspectionMyQcTask", - "path": "my-qc-task", - "component": "/quality-inspection/my-qc-task/index", + "id": "QCB00000000000000000000000000001", + "name": "QualityBase", + "path": "quality-base", + "component": "/index/index", "meta": { - "title": "我的质检任务", - "keepAlive": True, - "menuCode": "biz:myQcTask:list", + "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": "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"}, + }, + ], }, ], }, # ──────────────────────────────────────────── - # 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": "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", - "meta": {"title": "洁净室管理", "keepAlive": True, "menuCode": "operations:clean-room:list"}, + "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"}, + }, + ], }, + # 运营支撑 { - "id": "61000000000000000000000000000004", - "name": "ExhibitionAppointment", - "path": "exhibition-appointment", - "component": "/operations/exhibition-appointment/index", - "meta": {"title": "展馆预约", "keepAlive": True, "menuCode": "operations:exhibition-appointment:list"}, + "id": "OPS00000000000000000000000000001", + "name": "Operations", + "path": "operations", + "component": "/index/index", + "meta": { + "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": "123", - "name": "BizCollectionRegion", - "path": "collection-region", - "component": "/basic-info/collection-region/index", - "meta": {"title": "细胞采集基础信息维护", "keepAlive": True, "menuCode": "biz:collectionRegion: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": "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": "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": "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": "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"}, - }, - ], - }, - - # ──────────────────────────────────────────── - # 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": "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": "90000000000000000000000000000008", - "name": "ProductionProcess", - "path": "process", - "component": "/production/process/index", - "meta": {"title": "工艺库管理", "keepAlive": True, "menuCode": "production:process: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, "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", - "meta": {"title": "租户管理", "keepAlive": True, "menuCode": "system:tenant:list"}, + "id": "SYSM000000000000000000000000000001", + "name": "SystemManage", + "path": "system", + "component": "/index/index", + "meta": { + "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", - "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": "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, "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"}, + }, + ], }, ], - } - + }, ]