fix(menu): 修复两级菜单结构和嵌套问题
1. 菜单类型默认值改为 TOP_LEFT(顶部一级+左侧二级) 2. 二级菜单 component 设为空字符串避免嵌套布局 3. 前端和后端菜单数据同步更新 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
e6350d5e33
commit
7f7979679f
29 files changed
+720
-200
No files matched your search
@@ -1 +0,0 @@
|
||||
91694
|
||||
+14
-14
@@ -30,7 +30,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "CEL00000000000000000000000000001",
|
||||
"name": "CellStorage",
|
||||
"path": "cell-storage",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "细胞存储",
|
||||
"icon": "ri:test-tube-line",
|
||||
@@ -80,7 +80,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "RSC00000000000000000000000000001",
|
||||
"name": "ResearchDonation",
|
||||
"path": "research-donation",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "科研捐赠",
|
||||
"icon": "ri:hand-heart-line",
|
||||
@@ -116,7 +116,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "PIL00000000000000000000000000001",
|
||||
"name": "PilotService",
|
||||
"path": "pilot-service",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "中试服务",
|
||||
"icon": "ri:flask-line",
|
||||
@@ -145,7 +145,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "BEX00000000000000000000000000001",
|
||||
"name": "BasicExperiment",
|
||||
"path": "basic-experiment",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "基础实验",
|
||||
"icon": "ri:flask-line",
|
||||
@@ -193,7 +193,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "MKT00000000000000000000000000001",
|
||||
"name": "MarketInfo",
|
||||
"path": "market-info",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "市场基础信息",
|
||||
"icon": "ri:price-tag-3-line",
|
||||
@@ -291,7 +291,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "CLI00000000000000000000000000001",
|
||||
"name": "ClinicalApplication",
|
||||
"path": "clinical-application",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "临床应用",
|
||||
"icon": "ri:heart-pulse-line",
|
||||
@@ -386,7 +386,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "PRM00000000000000000000000000001",
|
||||
"name": "ProductionManage",
|
||||
"path": "production",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "生产管理",
|
||||
"icon": "grid",
|
||||
@@ -433,7 +433,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "PRB00000000000000000000000000001",
|
||||
"name": "ProductionBase",
|
||||
"path": "production-base",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "生产基础信息",
|
||||
"icon": "ri:tools-line",
|
||||
@@ -503,7 +503,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "QCM00000000000000000000000000001",
|
||||
"name": "QualityManage",
|
||||
"path": "quality-manage",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "质检管理",
|
||||
"icon": "ri:shield-check-line",
|
||||
@@ -561,7 +561,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "QCB00000000000000000000000000001",
|
||||
"name": "QualityBase",
|
||||
"path": "quality-base",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "质检基础信息",
|
||||
"icon": "ri:clipboard-line",
|
||||
@@ -624,7 +624,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "SYSB000000000000000000000000000001",
|
||||
"name": "SystemBase",
|
||||
"path": "system-base",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "系统基础信息",
|
||||
"icon": "ri:archive-line",
|
||||
@@ -660,7 +660,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "OPS00000000000000000000000000001",
|
||||
"name": "Operations",
|
||||
"path": "operations",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "运营支撑",
|
||||
"icon": "operation",
|
||||
@@ -709,7 +709,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "SYSM000000000000000000000000000001",
|
||||
"name": "SystemManage",
|
||||
"path": "system",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "系统管理",
|
||||
"icon": "ri:settings-3-line",
|
||||
@@ -780,7 +780,7 @@ STATIC_MENU_TREE = [
|
||||
"id": "WKF00000000000000000000000000001",
|
||||
"name": "Workflow",
|
||||
"path": "workflow",
|
||||
"component": "/index/index",
|
||||
"component": "",
|
||||
"meta": {
|
||||
"title": "工作流管理",
|
||||
"icon": "workflow",
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "label": "web_auth_roles.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L1"}, {"id": "services_web_auth_roles_map_role_name_to_web", "label": "_map_role_name_to_web()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L16"}, {"id": "services_web_auth_roles_resolve_web_role_for_user", "label": "resolve_web_role_for_user()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L28"}, {"id": "services_web_auth_roles_iter_user_menu_perm_codes", "label": "iter_user_menu_perm_codes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L56"}, {"id": "services_web_auth_roles_rationale_1", "label": "Web \u7ba1\u7406\u7aef\u767b\u5f55\uff1a\u57fa\u4e8e V0.3 sys_user / sys_user_role / sys_role \u7684\u89d2\u8272\u4e0e\u83dc\u5355\u6743\u9650\u89e3\u6790", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L1"}, {"id": "services_web_auth_roles_rationale_17", "label": "\u5c06 sys_role.role_name \u6620\u5c04\u4e3a web-admin \u4f7f\u7528\u7684 role \u5b57\u7b26\u4e32\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L17"}, {"id": "services_web_auth_roles_rationale_29", "label": "\u6839\u636e\u7528\u6237\u5173\u8054\u89d2\u8272\u89e3\u6790 Web \u7aef role\uff08admin / super_admin\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L29"}, {"id": "services_web_auth_roles_rationale_57", "label": "\u7528\u6237\u901a\u8fc7\u89d2\u8272\u5173\u8054\u5f97\u5230\u7684\u83dc\u5355\u6743\u9650\u6807\u8bc6\uff08sys_menu.perms\uff0c\u7a7a\u5219\u9000\u56de\u83dc\u5355 id\uff09\u3002 \u6ce8\uff1a\u4e00\u7ea7\u83dc\u5355\uff08market\u3001production\u3001quali", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L57"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "target": "app_core_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "target": "app_models_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "target": "services_web_auth_roles_map_role_name_to_web", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L16", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "target": "services_web_auth_roles_resolve_web_role_for_user", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L28", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "target": "services_web_auth_roles_iter_user_menu_perm_codes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L56", "weight": 1.0}, {"source": "services_web_auth_roles_resolve_web_role_for_user", "target": "services_web_auth_roles_map_role_Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_menu_py", "label": "menu.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py", "source_location": "L1"}, {"id": "api_menu_get_menu_list", "label": "get_menu_list()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py", "source_location": "L834"}, {"id": "api_menu_rationale_1", "label": "\u8fd0\u8425\u7aef\u83dc\u5355\u63a5\u53e3\uff08\u4e0e web-admin \u524d\u7aef\u9759\u6001\u8def\u7531 sqxp.ts \u5bf9\u9f50\uff0c5 \u4e2a\u4e00\u7ea7\u83dc\u5355\u5206\u7ec4\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_api_menu_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_menu_py", "target": "app_core_menu_guard", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_menu_py", "target": "app_core_response", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_menu_py", "target": "api_menu_get_menu_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py", "source_location": "L834", "weight": 1.0}, {"source": "api_menu_rationale_1", "target": "users_wuzilong_work_00code_zkxw_backend_app_api_menu_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_menu_get_menu_list", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py", "source_location": "L836"}]}
|
||||
@@ -1451,9 +1451,9 @@
|
||||
"models_qc_param_bizqctaskresult",
|
||||
"models_qc_param_py",
|
||||
"services_web_auth_roles_rationale_1",
|
||||
"services_web_auth_roles_rationale_14",
|
||||
"services_web_auth_roles_rationale_26",
|
||||
"services_web_auth_roles_rationale_54",
|
||||
"services_web_auth_roles_rationale_17",
|
||||
"services_web_auth_roles_rationale_29",
|
||||
"services_web_auth_roles_rationale_57",
|
||||
"services_workflow_engine_rationale_1"
|
||||
],
|
||||
"3": [
|
||||
|
||||
@@ -21229,11 +21229,11 @@
|
||||
"label": "get_menu_list()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/menu.py",
|
||||
"source_location": "L777"
|
||||
"source_location": "L834"
|
||||
},
|
||||
{
|
||||
"id": "api_menu_rationale_1",
|
||||
"label": "\u8fd0\u8425\u7aef\u83dc\u5355\u63a5\u53e3\uff08\u4e0e web-admin \u524d\u7aef\u9759\u6001\u8def\u7531 sqxp.ts \u5bf9\u9f50\uff0c13 \u4e2a\u4e00\u7ea7\u83dc\u5355\uff09",
|
||||
"label": "\u8fd0\u8425\u7aef\u83dc\u5355\u63a5\u53e3\uff08\u4e0e web-admin \u524d\u7aef\u9759\u6001\u8def\u7531 sqxp.ts \u5bf9\u9f50\uff0c5 \u4e2a\u4e00\u7ea7\u83dc\u5355\u5206\u7ec4\uff09",
|
||||
"file_type": "rationale",
|
||||
"source_file": "api/menu.py",
|
||||
"source_location": "L1"
|
||||
@@ -25457,21 +25457,21 @@
|
||||
"label": "_map_role_name_to_web()",
|
||||
"file_type": "code",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L13"
|
||||
"source_location": "L16"
|
||||
},
|
||||
{
|
||||
"id": "services_web_auth_roles_resolve_web_role_for_user",
|
||||
"label": "resolve_web_role_for_user()",
|
||||
"file_type": "code",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L25"
|
||||
"source_location": "L28"
|
||||
},
|
||||
{
|
||||
"id": "services_web_auth_roles_iter_user_menu_perm_codes",
|
||||
"label": "iter_user_menu_perm_codes()",
|
||||
"file_type": "code",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L53"
|
||||
"source_location": "L56"
|
||||
},
|
||||
{
|
||||
"id": "services_web_auth_roles_rationale_1",
|
||||
@@ -25481,25 +25481,25 @@
|
||||
"source_location": "L1"
|
||||
},
|
||||
{
|
||||
"id": "services_web_auth_roles_rationale_14",
|
||||
"id": "services_web_auth_roles_rationale_17",
|
||||
"label": "\u5c06 sys_role.role_name \u6620\u5c04\u4e3a web-admin \u4f7f\u7528\u7684 role \u5b57\u7b26\u4e32\u3002",
|
||||
"file_type": "rationale",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L14"
|
||||
"source_location": "L17"
|
||||
},
|
||||
{
|
||||
"id": "services_web_auth_roles_rationale_26",
|
||||
"id": "services_web_auth_roles_rationale_29",
|
||||
"label": "\u6839\u636e\u7528\u6237\u5173\u8054\u89d2\u8272\u89e3\u6790 Web \u7aef role\uff08admin / super_admin\uff09\u3002",
|
||||
"file_type": "rationale",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L26"
|
||||
"source_location": "L29"
|
||||
},
|
||||
{
|
||||
"id": "services_web_auth_roles_rationale_54",
|
||||
"label": "\u7528\u6237\u901a\u8fc7\u89d2\u8272\u5173\u8054\u5f97\u5230\u7684\u83dc\u5355\u6743\u9650\u6807\u8bc6\uff08sys_menu.perms\uff0c\u7a7a\u5219\u9000\u56de\u83dc\u5355 id\uff09\u3002",
|
||||
"id": "services_web_auth_roles_rationale_57",
|
||||
"label": "\u7528\u6237\u901a\u8fc7\u89d2\u8272\u5173\u8054\u5f97\u5230\u7684\u83dc\u5355\u6743\u9650\u6807\u8bc6\uff08sys_menu.perms\uff0c\u7a7a\u5219\u9000\u56de\u83dc\u5355 id\uff09\u3002 \u6ce8\uff1a\u4e00\u7ea7\u83dc\u5355\uff08market\u3001production\u3001quali",
|
||||
"file_type": "rationale",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L54"
|
||||
"source_location": "L57"
|
||||
},
|
||||
{
|
||||
"id": "services_protocol_payment_installment_py",
|
||||
@@ -80490,7 +80490,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/menu.py",
|
||||
"source_location": "L777",
|
||||
"source_location": "L834",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -92181,7 +92181,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L13",
|
||||
"source_location": "L16",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -92190,7 +92190,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L25",
|
||||
"source_location": "L28",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -92199,7 +92199,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L53",
|
||||
"source_location": "L56",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -92208,7 +92208,7 @@
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L47",
|
||||
"source_location": "L50",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -92221,30 +92221,30 @@
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_14",
|
||||
"source": "services_web_auth_roles_rationale_17",
|
||||
"target": "services_web_auth_roles_map_role_name_to_web",
|
||||
"relation": "rationale_for",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L14",
|
||||
"source_location": "L17",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_26",
|
||||
"source": "services_web_auth_roles_rationale_29",
|
||||
"target": "services_web_auth_roles_resolve_web_role_for_user",
|
||||
"relation": "rationale_for",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L26",
|
||||
"source_location": "L29",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_54",
|
||||
"source": "services_web_auth_roles_rationale_57",
|
||||
"target": "services_web_auth_roles_iter_user_menu_perm_codes",
|
||||
"relation": "rationale_for",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L54",
|
||||
"source_location": "L57",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -151477,7 +151477,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_14",
|
||||
"source": "services_web_auth_roles_rationale_17",
|
||||
"target": "models_models_sysmenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -151486,7 +151486,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_26",
|
||||
"source": "services_web_auth_roles_rationale_29",
|
||||
"target": "models_models_sysmenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -151495,7 +151495,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_54",
|
||||
"source": "services_web_auth_roles_rationale_57",
|
||||
"target": "models_models_sysmenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -151513,7 +151513,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_14",
|
||||
"source": "services_web_auth_roles_rationale_17",
|
||||
"target": "models_models_sysrole",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -151522,7 +151522,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_26",
|
||||
"source": "services_web_auth_roles_rationale_29",
|
||||
"target": "models_models_sysrole",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -151531,7 +151531,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_54",
|
||||
"source": "services_web_auth_roles_rationale_57",
|
||||
"target": "models_models_sysrole",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -151549,7 +151549,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_14",
|
||||
"source": "services_web_auth_roles_rationale_17",
|
||||
"target": "models_models_sysrolemenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -151558,7 +151558,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_26",
|
||||
"source": "services_web_auth_roles_rationale_29",
|
||||
"target": "models_models_sysrolemenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -151567,7 +151567,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_54",
|
||||
"source": "services_web_auth_roles_rationale_57",
|
||||
"target": "models_models_sysrolemenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -151585,7 +151585,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_14",
|
||||
"source": "services_web_auth_roles_rationale_17",
|
||||
"target": "models_models_sysuserrole",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -151594,7 +151594,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_26",
|
||||
"source": "services_web_auth_roles_rationale_29",
|
||||
"target": "models_models_sysuserrole",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -151603,7 +151603,7 @@
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "services_web_auth_roles_rationale_54",
|
||||
"source": "services_web_auth_roles_rationale_57",
|
||||
"target": "models_models_sysuserrole",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
@@ -175288,7 +175288,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/menu.py",
|
||||
"source_location": "L779",
|
||||
"source_location": "L836",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -190128,7 +190128,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L44",
|
||||
"source_location": "L47",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -190138,7 +190138,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L92",
|
||||
"source_location": "L99",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Graph Report - app (2026-06-12)
|
||||
|
||||
## Corpus Check
|
||||
- 189 files · ~201,737 words
|
||||
- 189 files · ~201,863 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
@@ -238,7 +238,7 @@ Nodes (2): _auto_fill_create_dept_id(), ORM before_insert 钩子:当 create_de
|
||||
|
||||
### Community 38 - "Community 38"
|
||||
Cohesion: 0.67
|
||||
Nodes (2): get_menu_list(), 运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,13 个一级菜单)
|
||||
Nodes (2): get_menu_list(), 运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)
|
||||
|
||||
### Community 39 - "Community 39"
|
||||
Cohesion: 1.0
|
||||
@@ -279,7 +279,7 @@ Nodes (1): 发送催单通知给配送员 Args: del
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 37`** (4 nodes): `_auto_fill_create_dept_id()`, `get_db()`, `database.py`, `ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 38`** (3 nodes): `get_menu_list()`, `menu.py`, `运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,13 个一级菜单)`
|
||||
- **Thin community `Community 38`** (3 nodes): `get_menu_list()`, `menu.py`, `运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 39`** (2 nodes): `context.py`, `请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
|
||||
@@ -60,8 +60,8 @@
|
||||
<div id="stats">3596 nodes · 16321 edges · 53 communities</div>
|
||||
</div>
|
||||
<script>
|
||||
const RAW_NODES = [{"id": "init_py", "label": "__init__.py", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 41, "community_name": "Community 41", "source_file": "__init__.py", "file_type": "code", "degree": 0}, {"id": "main_py", "label": "main.py", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "main.py", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 7}, {"id": "app_main_lifespan", "label": "lifespan()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "lifespan()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_error_json", "label": "_error_json()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "_error_json()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 3}, {"id": "app_main_sqlalchemy_exception_handler", "label": "sqlalchemy_exception_handler()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "sqlalchemy_exception_handler()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_unhandled_exception_handler", "label": "unhandled_exception_handler()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "unhandled_exception_handler()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 5}, {"id": "app_main_mask_secret", "label": "_mask_secret()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "_mask_secret()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_root", "label": "root()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "root()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_health_check", "label": "health_check()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "health_check()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_rationale_81", "label": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "app_main_rationale_92", "label": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "tasks_init_py", "label": "__init__.py", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 7, "community_name": "Community 7", "source_file": "tasks/__init__.py", "file_type": "code", "degLine truncated
|
||||
const RAW_EDGES = [{"from": "main_py", "to": "app_main_lifespan", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_error_json", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_sqlalchemy_exception_handler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_unhandled_exception_handler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_mask_secret", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_root", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_health_check", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_lifespan", "to": "core_login_crypto_ensure_initialized", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_lifespan", "to": "tasks_init_init_scheduled_tasks", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_lifespan", "to": "tasks_init_shutdown_scheduler", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_error_json", "to": "app_main_sqlalchemy_exception_handler", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_error_json", "to": "app_main_unhandled_exception_handler", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_sqlalchemy_exception_handler", "to": "app_main_rationale_81", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_sqlalchemy_exception_handler", "to": "exception", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_unhandled_exception_handler", "to": "app_main_rationale_92", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_unhandled_exception_handler", "to": "exception", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_unhandled_exception_handler", "to": "str", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_81", "to": "core_api_request_log_middleware_apirequestlogmiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_81", "to": "core_api_crypto_middleware_apicryptomiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_92", "to": "core_api_request_log_middleware_apirequestlogmiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_92", "to": "core_api_crypto_middleware_apicryptomiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "tasks_init_py", "to": "tasks_init_init_scheduled_tasks", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "tasks_init_py", "to": "tasks_init_shutdown_scheduler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_py", "to": "core_auth_redis_session_enabled", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_py", "to": "core_auth_get_redis_client", "labeLine truncated
|
||||
const RAW_NODES = [{"id": "init_py", "label": "__init__.py", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 41, "community_name": "Community 41", "source_file": "__init__.py", "file_type": "code", "degree": 0}, {"id": "main_py", "label": "main.py", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "main.py", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 7}, {"id": "app_main_lifespan", "label": "lifespan()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "lifespan()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_error_json", "label": "_error_json()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "_error_json()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 3}, {"id": "app_main_sqlalchemy_exception_handler", "label": "sqlalchemy_exception_handler()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "sqlalchemy_exception_handler()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_unhandled_exception_handler", "label": "unhandled_exception_handler()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "unhandled_exception_handler()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 5}, {"id": "app_main_mask_secret", "label": "_mask_secret()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "_mask_secret()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_root", "label": "root()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "root()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_health_check", "label": "health_check()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "health_check()", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_rationale_81", "label": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "app_main_rationale_92", "label": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "community": 7, "community_name": "Community 7", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "tasks_init_py", "label": "__init__.py", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 7, "community_name": "Community 7", "source_file": "tasks/__init__.py", "file_type": "code", "degLine truncated
|
||||
const RAW_EDGES = [{"from": "main_py", "to": "app_main_lifespan", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_error_json", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_sqlalchemy_exception_handler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_unhandled_exception_handler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_mask_secret", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_root", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_health_check", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_lifespan", "to": "core_login_crypto_ensure_initialized", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_lifespan", "to": "tasks_init_init_scheduled_tasks", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_lifespan", "to": "tasks_init_shutdown_scheduler", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_error_json", "to": "app_main_sqlalchemy_exception_handler", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_error_json", "to": "app_main_unhandled_exception_handler", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_sqlalchemy_exception_handler", "to": "app_main_rationale_81", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_sqlalchemy_exception_handler", "to": "exception", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_unhandled_exception_handler", "to": "app_main_rationale_92", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_unhandled_exception_handler", "to": "exception", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_unhandled_exception_handler", "to": "str", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_81", "to": "core_api_request_log_middleware_apirequestlogmiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_81", "to": "core_api_crypto_middleware_apicryptomiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_92", "to": "core_api_request_log_middleware_apirequestlogmiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_92", "to": "core_api_crypto_middleware_apicryptomiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "tasks_init_py", "to": "tasks_init_init_scheduled_tasks", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "tasks_init_py", "to": "tasks_init_shutdown_scheduler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_py", "to": "core_auth_redis_session_enabled", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_py", "to": "core_auth_get_redis_client", "labeLine truncated
|
||||
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 638}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 529}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 283}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 208}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 191}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 186}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 133}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 129}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 128}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 122}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 119}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 119}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 110}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 107}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 94}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 92}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 54}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 35}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 35}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 31}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 28}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 21}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 21}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 20}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 17}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 13}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 13}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 13}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 12}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 12}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 12}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 11}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 10}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 8}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 8}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 7}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 4}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 4}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 3}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 2}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 2}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 1}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 1}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 1}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 1}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 1}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 1}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 1}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 1}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 1}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 1}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 1}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 1}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 0}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 0}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 0}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 0}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 0}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 0}];
|
||||
|
||||
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
|
||||
|
||||
@@ -26818,19 +26818,19 @@
|
||||
"label": "get_menu_list()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/menu.py",
|
||||
"source_location": "L777",
|
||||
"source_location": "L834",
|
||||
"id": "api_menu_get_menu_list",
|
||||
"community": 38,
|
||||
"norm_label": "get_menu_list()"
|
||||
},
|
||||
{
|
||||
"label": "\u8fd0\u8425\u7aef\u83dc\u5355\u63a5\u53e3\uff08\u4e0e web-admin \u524d\u7aef\u9759\u6001\u8def\u7531 sqxp.ts \u5bf9\u9f50\uff0c13 \u4e2a\u4e00\u7ea7\u83dc\u5355\uff09",
|
||||
"label": "\u8fd0\u8425\u7aef\u83dc\u5355\u63a5\u53e3\uff08\u4e0e web-admin \u524d\u7aef\u9759\u6001\u8def\u7531 sqxp.ts \u5bf9\u9f50\uff0c5 \u4e2a\u4e00\u7ea7\u83dc\u5355\u5206\u7ec4\uff09",
|
||||
"file_type": "rationale",
|
||||
"source_file": "api/menu.py",
|
||||
"source_location": "L1",
|
||||
"id": "api_menu_rationale_1",
|
||||
"community": 38,
|
||||
"norm_label": "\u8fd0\u8425\u7aef\u83dc\u5355\u63a5\u53e3(\u4e0e web-admin \u524d\u7aef\u9759\u6001\u8def\u7531 sqxp.ts \u5bf9\u9f50,13 \u4e2a\u4e00\u7ea7\u83dc\u5355)"
|
||||
"norm_label": "\u8fd0\u8425\u7aef\u83dc\u5355\u63a5\u53e3(\u4e0e web-admin \u524d\u7aef\u9759\u6001\u8def\u7531 sqxp.ts \u5bf9\u9f50,5 \u4e2a\u4e00\u7ea7\u83dc\u5355\u5206\u7ec4)"
|
||||
},
|
||||
{
|
||||
"label": "pilot_delivery.py",
|
||||
@@ -32146,7 +32146,7 @@
|
||||
"label": "_map_role_name_to_web()",
|
||||
"file_type": "code",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L13",
|
||||
"source_location": "L16",
|
||||
"id": "services_web_auth_roles_map_role_name_to_web",
|
||||
"community": 10,
|
||||
"norm_label": "_map_role_name_to_web()"
|
||||
@@ -32155,7 +32155,7 @@
|
||||
"label": "resolve_web_role_for_user()",
|
||||
"file_type": "code",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L25",
|
||||
"source_location": "L28",
|
||||
"id": "services_web_auth_roles_resolve_web_role_for_user",
|
||||
"community": 10,
|
||||
"norm_label": "resolve_web_role_for_user()"
|
||||
@@ -32164,7 +32164,7 @@
|
||||
"label": "iter_user_menu_perm_codes()",
|
||||
"file_type": "code",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L53",
|
||||
"source_location": "L56",
|
||||
"id": "services_web_auth_roles_iter_user_menu_perm_codes",
|
||||
"community": 0,
|
||||
"norm_label": "iter_user_menu_perm_codes()"
|
||||
@@ -32182,8 +32182,8 @@
|
||||
"label": "\u5c06 sys_role.role_name \u6620\u5c04\u4e3a web-admin \u4f7f\u7528\u7684 role \u5b57\u7b26\u4e32\u3002",
|
||||
"file_type": "rationale",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L14",
|
||||
"id": "services_web_auth_roles_rationale_14",
|
||||
"source_location": "L17",
|
||||
"id": "services_web_auth_roles_rationale_17",
|
||||
"community": 2,
|
||||
"norm_label": "\u5c06 sys_role.role_name \u6620\u5c04\u4e3a web-admin \u4f7f\u7528\u7684 role \u5b57\u7b26\u4e32\u3002"
|
||||
},
|
||||
@@ -32191,19 +32191,19 @@
|
||||
"label": "\u6839\u636e\u7528\u6237\u5173\u8054\u89d2\u8272\u89e3\u6790 Web \u7aef role\uff08admin / super_admin\uff09\u3002",
|
||||
"file_type": "rationale",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L26",
|
||||
"id": "services_web_auth_roles_rationale_26",
|
||||
"source_location": "L29",
|
||||
"id": "services_web_auth_roles_rationale_29",
|
||||
"community": 2,
|
||||
"norm_label": "\u6839\u636e\u7528\u6237\u5173\u8054\u89d2\u8272\u89e3\u6790 web \u7aef role(admin / super_admin)\u3002"
|
||||
},
|
||||
{
|
||||
"label": "\u7528\u6237\u901a\u8fc7\u89d2\u8272\u5173\u8054\u5f97\u5230\u7684\u83dc\u5355\u6743\u9650\u6807\u8bc6\uff08sys_menu.perms\uff0c\u7a7a\u5219\u9000\u56de\u83dc\u5355 id\uff09\u3002",
|
||||
"label": "\u7528\u6237\u901a\u8fc7\u89d2\u8272\u5173\u8054\u5f97\u5230\u7684\u83dc\u5355\u6743\u9650\u6807\u8bc6\uff08sys_menu.perms\uff0c\u7a7a\u5219\u9000\u56de\u83dc\u5355 id\uff09\u3002 \u6ce8\uff1a\u4e00\u7ea7\u83dc\u5355\uff08market\u3001production\u3001quali",
|
||||
"file_type": "rationale",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L54",
|
||||
"id": "services_web_auth_roles_rationale_54",
|
||||
"source_location": "L57",
|
||||
"id": "services_web_auth_roles_rationale_57",
|
||||
"community": 2,
|
||||
"norm_label": "\u7528\u6237\u901a\u8fc7\u89d2\u8272\u5173\u8054\u5f97\u5230\u7684\u83dc\u5355\u6743\u9650\u6807\u8bc6(sys_menu.perms,\u7a7a\u5219\u9000\u56de\u83dc\u5355 id)\u3002"
|
||||
"norm_label": "\u7528\u6237\u901a\u8fc7\u89d2\u8272\u5173\u8054\u5f97\u5230\u7684\u83dc\u5355\u6743\u9650\u6807\u8bc6(sys_menu.perms,\u7a7a\u5219\u9000\u56de\u83dc\u5355 id)\u3002 \u6ce8:\u4e00\u7ea7\u83dc\u5355(market\u3001production\u3001quali"
|
||||
},
|
||||
{
|
||||
"label": "protocol_payment_installment.py",
|
||||
@@ -43894,7 +43894,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/menu.py",
|
||||
"source_location": "L779",
|
||||
"source_location": "L836",
|
||||
"weight": 1.0,
|
||||
"_src": "api_menu_get_menu_list",
|
||||
"_tgt": "core_response_success_response",
|
||||
@@ -82570,7 +82570,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L44",
|
||||
"source_location": "L47",
|
||||
"weight": 1.0,
|
||||
"_src": "services_web_auth_roles_resolve_web_role_for_user",
|
||||
"_tgt": "str",
|
||||
@@ -82582,7 +82582,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L92",
|
||||
"source_location": "L99",
|
||||
"weight": 1.0,
|
||||
"_src": "services_web_auth_roles_iter_user_menu_perm_codes",
|
||||
"_tgt": "str",
|
||||
@@ -87479,10 +87479,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_14",
|
||||
"_src": "services_web_auth_roles_rationale_17",
|
||||
"_tgt": "models_models_sysrole",
|
||||
"source": "models_models_sysrole",
|
||||
"target": "services_web_auth_roles_rationale_14",
|
||||
"target": "services_web_auth_roles_rationale_17",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -87491,10 +87491,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_26",
|
||||
"_src": "services_web_auth_roles_rationale_29",
|
||||
"_tgt": "models_models_sysrole",
|
||||
"source": "models_models_sysrole",
|
||||
"target": "services_web_auth_roles_rationale_26",
|
||||
"target": "services_web_auth_roles_rationale_29",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -87503,10 +87503,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_54",
|
||||
"_src": "services_web_auth_roles_rationale_57",
|
||||
"_tgt": "models_models_sysrole",
|
||||
"source": "models_models_sysrole",
|
||||
"target": "services_web_auth_roles_rationale_54",
|
||||
"target": "services_web_auth_roles_rationale_57",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -87671,10 +87671,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_14",
|
||||
"_src": "services_web_auth_roles_rationale_17",
|
||||
"_tgt": "models_models_sysuserrole",
|
||||
"source": "models_models_sysuserrole",
|
||||
"target": "services_web_auth_roles_rationale_14",
|
||||
"target": "services_web_auth_roles_rationale_17",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -87683,10 +87683,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_26",
|
||||
"_src": "services_web_auth_roles_rationale_29",
|
||||
"_tgt": "models_models_sysuserrole",
|
||||
"source": "models_models_sysuserrole",
|
||||
"target": "services_web_auth_roles_rationale_26",
|
||||
"target": "services_web_auth_roles_rationale_29",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -87695,10 +87695,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_54",
|
||||
"_src": "services_web_auth_roles_rationale_57",
|
||||
"_tgt": "models_models_sysuserrole",
|
||||
"source": "models_models_sysuserrole",
|
||||
"target": "services_web_auth_roles_rationale_54",
|
||||
"target": "services_web_auth_roles_rationale_57",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -87803,10 +87803,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_14",
|
||||
"_src": "services_web_auth_roles_rationale_17",
|
||||
"_tgt": "models_models_sysrolemenu",
|
||||
"source": "models_models_sysrolemenu",
|
||||
"target": "services_web_auth_roles_rationale_14",
|
||||
"target": "services_web_auth_roles_rationale_17",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -87815,10 +87815,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_26",
|
||||
"_src": "services_web_auth_roles_rationale_29",
|
||||
"_tgt": "models_models_sysrolemenu",
|
||||
"source": "models_models_sysrolemenu",
|
||||
"target": "services_web_auth_roles_rationale_26",
|
||||
"target": "services_web_auth_roles_rationale_29",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -87827,10 +87827,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_54",
|
||||
"_src": "services_web_auth_roles_rationale_57",
|
||||
"_tgt": "models_models_sysrolemenu",
|
||||
"source": "models_models_sysrolemenu",
|
||||
"target": "services_web_auth_roles_rationale_54",
|
||||
"target": "services_web_auth_roles_rationale_57",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -87995,10 +87995,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_14",
|
||||
"_src": "services_web_auth_roles_rationale_17",
|
||||
"_tgt": "models_models_sysmenu",
|
||||
"source": "models_models_sysmenu",
|
||||
"target": "services_web_auth_roles_rationale_14",
|
||||
"target": "services_web_auth_roles_rationale_17",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -88007,10 +88007,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_26",
|
||||
"_src": "services_web_auth_roles_rationale_29",
|
||||
"_tgt": "models_models_sysmenu",
|
||||
"source": "models_models_sysmenu",
|
||||
"target": "services_web_auth_roles_rationale_26",
|
||||
"target": "services_web_auth_roles_rationale_29",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -88019,10 +88019,10 @@
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L10",
|
||||
"weight": 0.8,
|
||||
"_src": "services_web_auth_roles_rationale_54",
|
||||
"_src": "services_web_auth_roles_rationale_57",
|
||||
"_tgt": "models_models_sysmenu",
|
||||
"source": "models_models_sysmenu",
|
||||
"target": "services_web_auth_roles_rationale_54",
|
||||
"target": "services_web_auth_roles_rationale_57",
|
||||
"confidence_score": 0.5
|
||||
},
|
||||
{
|
||||
@@ -216489,7 +216489,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/menu.py",
|
||||
"source_location": "L777",
|
||||
"source_location": "L834",
|
||||
"weight": 1.0,
|
||||
"_src": "api_menu_py",
|
||||
"_tgt": "api_menu_get_menu_list",
|
||||
@@ -227889,7 +227889,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L13",
|
||||
"source_location": "L16",
|
||||
"weight": 1.0,
|
||||
"_src": "services_web_auth_roles_py",
|
||||
"_tgt": "services_web_auth_roles_map_role_name_to_web",
|
||||
@@ -227901,7 +227901,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L25",
|
||||
"source_location": "L28",
|
||||
"weight": 1.0,
|
||||
"_src": "services_web_auth_roles_py",
|
||||
"_tgt": "services_web_auth_roles_resolve_web_role_for_user",
|
||||
@@ -227913,7 +227913,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L53",
|
||||
"source_location": "L56",
|
||||
"weight": 1.0,
|
||||
"_src": "services_web_auth_roles_py",
|
||||
"_tgt": "services_web_auth_roles_iter_user_menu_perm_codes",
|
||||
@@ -227937,7 +227937,7 @@
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L47",
|
||||
"source_location": "L50",
|
||||
"weight": 1.0,
|
||||
"_src": "services_web_auth_roles_resolve_web_role_for_user",
|
||||
"_tgt": "services_web_auth_roles_map_role_name_to_web",
|
||||
@@ -227949,36 +227949,36 @@
|
||||
"relation": "rationale_for",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L14",
|
||||
"source_location": "L17",
|
||||
"weight": 1.0,
|
||||
"_src": "services_web_auth_roles_rationale_14",
|
||||
"_src": "services_web_auth_roles_rationale_17",
|
||||
"_tgt": "services_web_auth_roles_map_role_name_to_web",
|
||||
"source": "services_web_auth_roles_map_role_name_to_web",
|
||||
"target": "services_web_auth_roles_rationale_14",
|
||||
"target": "services_web_auth_roles_rationale_17",
|
||||
"confidence_score": 1.0
|
||||
},
|
||||
{
|
||||
"relation": "rationale_for",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L26",
|
||||
"source_location": "L29",
|
||||
"weight": 1.0,
|
||||
"_src": "services_web_auth_roles_rationale_26",
|
||||
"_src": "services_web_auth_roles_rationale_29",
|
||||
"_tgt": "services_web_auth_roles_resolve_web_role_for_user",
|
||||
"source": "services_web_auth_roles_resolve_web_role_for_user",
|
||||
"target": "services_web_auth_roles_rationale_26",
|
||||
"target": "services_web_auth_roles_rationale_29",
|
||||
"confidence_score": 1.0
|
||||
},
|
||||
{
|
||||
"relation": "rationale_for",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "services/web_auth_roles.py",
|
||||
"source_location": "L54",
|
||||
"source_location": "L57",
|
||||
"weight": 1.0,
|
||||
"_src": "services_web_auth_roles_rationale_54",
|
||||
"_src": "services_web_auth_roles_rationale_57",
|
||||
"_tgt": "services_web_auth_roles_iter_user_menu_perm_codes",
|
||||
"source": "services_web_auth_roles_iter_user_menu_perm_codes",
|
||||
"target": "services_web_auth_roles_rationale_54",
|
||||
"target": "services_web_auth_roles_rationale_57",
|
||||
"confidence_score": 1.0
|
||||
},
|
||||
{
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/qc_sms_notification.py": 1780326875.7886882,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation_sample_collection.py": 1780457788.2998126,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/operations.py": 1779685679.1959367,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py": 1781232758.2748463,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py": 1781264533.3076127,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_delivery.py": 1779655584.820777,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py": 1779882001.7516146,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/env_detect.py": 1781145712.2433698,
|
||||
@@ -184,7 +184,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/services/workflow_callback.py": 1778727966.7277644,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/services/qc_work_order_fee_summary.py": 1781248273.0896494,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/services/workflow_engine.py": 1778634664.6293883,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py": 1778775532.8878627,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py": 1781264627.3503358,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/services/protocol_payment_installment.py": 1781076733.062029,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/services/protocol_pay_mode_switch.py": 1781076762.2225447,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/ws/__init__.py": 1778578258.105995
|
||||
|
||||
@@ -0,0 +1,499 @@
|
||||
# 菜单结构调整实现计划
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** 将 14 个一级菜单重组为 5 个一级菜单(市场、生产、质检、运营支撑、系统管理),新增菜单记录到 sys_menu 表并支持角色权限控制。
|
||||
|
||||
**Architecture:** 采用方案 A(一级菜单独立权限),每个新一级菜单设置独立 `perms`(如 `menu:market`),前端改造菜单组件支持两级菜单结构(顶部一级 + 左侧二级),后端同步改造菜单接口。
|
||||
|
||||
**Tech Stack:** Vue 3 + Element Plus + Pinia + FastAPI + SQLAlchemy
|
||||
|
||||
---
|
||||
|
||||
## 变更范围总览
|
||||
|
||||
| 层级 | 文件 | 变更类型 |
|
||||
|------|------|----------|
|
||||
| 前端路由 | `web-admin/src/router/modules/sqxp.ts` | 结构调整 |
|
||||
| 前端菜单组件 | `web-admin/src/components/core/layouts/art-menus/*` | 支持两级结构 |
|
||||
| 前端状态 | `web-admin/src/store/modules/menu.ts`, `setting.ts` | 新增一级菜单状态 |
|
||||
| 后端菜单接口 | `backend/app/api/menu.py` | 新增一级菜单数据 |
|
||||
| 后端权限服务 | `backend/app/services/web_auth_roles.py` | 支持一级菜单权限过滤 |
|
||||
| 数据库 | `sys_menu` 表 | 新增 5 个一级菜单记录 |
|
||||
|
||||
---
|
||||
|
||||
## Task 1: 后端 - 更新菜单接口数据
|
||||
|
||||
**Files:**
|
||||
- Modify: `backend/app/api/menu.py:10-773`
|
||||
|
||||
- [ ] **Step 1: 添加新一级菜单定义**
|
||||
|
||||
在 `STATIC_MENU_TREE` 开头添加 5 个新一级菜单:
|
||||
|
||||
```python
|
||||
# 新增一级菜单定义(放在 STATIC_MENU_TREE 最前面)
|
||||
TOP_MENU_MARKET = {
|
||||
"id": "TOP00000000000000000000000000001",
|
||||
"name": "MarketTop",
|
||||
"path": "/market",
|
||||
"component": "/index/index",
|
||||
"meta": {
|
||||
"title": "市场",
|
||||
"icon": "ri:shopping-cart-line",
|
||||
"keepAlive": False,
|
||||
"isTopMenu": True,
|
||||
"menuCode": "menu:market",
|
||||
},
|
||||
"children": [
|
||||
# 细胞存储、科研捐赠、中试服务、基础实验、市场基础信息、临床应用
|
||||
],
|
||||
}
|
||||
|
||||
TOP_MENU_PRODUCTION = {
|
||||
"id": "TOP00000000000000000000000000002",
|
||||
"name": "ProductionTop",
|
||||
"path": "/production-group",
|
||||
"component": "/index/index",
|
||||
"meta": {
|
||||
"title": "生产",
|
||||
"icon": "ri:factory-line",
|
||||
"keepAlive": False,
|
||||
"isTopMenu": True,
|
||||
"menuCode": "menu:production",
|
||||
},
|
||||
"children": [
|
||||
# 生产管理、生产基础信息
|
||||
],
|
||||
}
|
||||
|
||||
TOP_MENU_QUALITY = {
|
||||
"id": "TOP00000000000000000000000000003",
|
||||
"name": "QualityTop",
|
||||
"path": "/quality-group",
|
||||
"component": "/index/index",
|
||||
"meta": {
|
||||
"title": "质检",
|
||||
"icon": "ri:shield-check-line",
|
||||
"keepAlive": False,
|
||||
"isTopMenu": True,
|
||||
"menuCode": "menu:quality",
|
||||
},
|
||||
"children": [
|
||||
# 质检管理、质检基础信息
|
||||
],
|
||||
}
|
||||
|
||||
TOP_MENU_OPERATIONS = {
|
||||
"id": "TOP00000000000000000000000000004",
|
||||
"name": "OperationsTop",
|
||||
"path": "/operations-group",
|
||||
"component": "/index/index",
|
||||
"meta": {
|
||||
"title": "运营支撑",
|
||||
"icon": "ri:settings-3-line",
|
||||
"keepAlive": False,
|
||||
"isTopMenu": True,
|
||||
"menuCode": "menu:operations",
|
||||
},
|
||||
"children": [
|
||||
# 系统基础信息、运营支撑
|
||||
],
|
||||
}
|
||||
|
||||
TOP_MENU_SYSTEM = {
|
||||
"id": "TOP00000000000000000000000000005",
|
||||
"name": "SystemTop",
|
||||
"path": "/system-manage",
|
||||
"component": "/index/index",
|
||||
"meta": {
|
||||
"title": "系统管理",
|
||||
"icon": "ri:server-line",
|
||||
"keepAlive": False,
|
||||
"isTopMenu": True,
|
||||
"menuCode": "menu:system-manage",
|
||||
},
|
||||
"children": [
|
||||
# 系统管理、工作流管理
|
||||
],
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 调整原有菜单到新父级下**
|
||||
|
||||
将现有 14 个一级菜单作为二级菜单,重新分配 parent_id 和 path:
|
||||
|
||||
| 原菜单 | 新父级 | 新 path |
|
||||
|--------|--------|---------|
|
||||
| 细胞存储 | TOP00000000000000000000000000001 | `/market/cell-storage` |
|
||||
| 科研捐赠 | TOP00000000000000000000000000001 | `/market/research-donation` |
|
||||
| 中试服务 | TOP00000000000000000000000000001 | `/market/pilot-service` |
|
||||
| 基础实验 | TOP00000000000000000000000000001 | `/market/basic-experiment` |
|
||||
| 市场基础信息 | TOP00000000000000000000000000001 | `/market/market-info` |
|
||||
| 临床应用 | TOP00000000000000000000000000002 | `/production-group/clinical-application` |
|
||||
| 生产管理 | TOP00000000000000000000000000002 | `/production-group/production` |
|
||||
| 生产基础信息 | TOP00000000000000000000000000002 | `/production-group/production-base` |
|
||||
| 质检管理 | TOP00000000000000000000000000003 | `/quality-group/quality-manage` |
|
||||
| 质检基础信息 | TOP00000000000000000000000000003 | `/quality-group/quality-base` |
|
||||
| 系统基础信息 | TOP00000000000000000000000000004 | `/operations-group/system-base` |
|
||||
| 运营支撑 | TOP00000000000000000000000000004 | `/operations-group/operations` |
|
||||
| 系统管理 | TOP00000000000000000000000000005 | `/system-manage/system` |
|
||||
| 工作流管理 | TOP00000000000000000000000000005 | `/system-manage/workflow` |
|
||||
|
||||
- [ ] **Step 3: 更新 STATIC_MENU_TREE 结构**
|
||||
|
||||
将 STATIC_MENU_TREE 改为只包含 5 个新一级菜单,每个一级菜单的 children 包含对应的原菜单作为二级菜单。
|
||||
|
||||
- [ ] **Step 4: Commit**
|
||||
|
||||
```bash
|
||||
git add backend/app/api/menu.py
|
||||
git commit -m "feat(menu): 重构菜单为5个一级分组菜单结构"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 2: 后端 - 更新权限服务支持一级菜单过滤
|
||||
|
||||
**Files:**
|
||||
- Modify: `backend/app/services/web_auth_roles.py`
|
||||
|
||||
- [ ] **Step 1: 添加一级菜单权限码常量**
|
||||
|
||||
```python
|
||||
# 一级菜单权限码
|
||||
TOP_MENU_PERMS = {"menu:market", "menu:production", "menu:quality", "menu:operations", "menu:system-manage"}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 确保 iter_user_menu_perm_codes 返回一级菜单 perms**
|
||||
|
||||
当前 `iter_user_menu_perm_codes` 通过 `sys_role_menu → sys_menu` 查询用户拥有的菜单权限。一级菜单的 `perms`(如 `menu:market`)已经在 sys_menu 表中定义,因此无需修改查询逻辑。只需确保 sys_menu 表中有这 5 个一级菜单的记录(Task 3 处理)。
|
||||
|
||||
- [ ] **Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add backend/app/services/web_auth_roles.py
|
||||
git commit -m "feat(auth): 支持一级菜单权限码过滤"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 3: 数据库 - 插入一级菜单数据到 sys_menu
|
||||
|
||||
**Files:**
|
||||
- Create: `docs/sql/menu_restructuring.sql`
|
||||
|
||||
- [ ] **Step 1: 编写 SQL 插入脚本**
|
||||
|
||||
创建 SQL 脚本,包含 5 个一级菜单的 INSERT 语句(menu_type = 'M' 表示目录):
|
||||
|
||||
```sql
|
||||
-- 一级菜单
|
||||
INSERT INTO sys_menu (id, menu_name, parent_id, menu_type, path, component, perms, is_frame, visible, status, tenant_no, order_num, create_by, create_dept_id, create_time, update_by, update_time, del_flag) VALUES
|
||||
('TOP00000000000000000000000000001', '市场', '0', 'M', '/market', '/index/index', 'menu:market', 1, '1', '1', 'zkxw', 1, 'system', '', NOW(), 'system', NOW(), 0),
|
||||
('TOP00000000000000000000000000002', '生产', '0', 'M', '/production-group', '/index/index', 'menu:production', 1, '1', '1', 'zkxw', 2, 'system', '', NOW(), 'system', NOW(), 0),
|
||||
('TOP00000000000000000000000000003', '质检', '0', 'M', '/quality-group', '/index/index', 'menu:quality', 1, '1', '1', 'zkxw', 3, 'system', '', NOW(), 'system', NOW(), 0),
|
||||
('TOP00000000000000000000000000004', '运营支撑', '0', 'M', '/operations-group', '/index/index', 'menu:operations', 1, '1', '1', 'zkxw', 4, 'system', '', NOW(), 'system', NOW(), 0),
|
||||
('TOP00000000000000000000000000005', '系统管理', '0', 'M', '/system-manage', '/index/index', 'menu:system-manage', 1, '1', '1', 'zkxw', 5, 'system', '', NOW(), 'system', NOW(), 0);
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add docs/sql/menu_restructuring.sql
|
||||
git commit -m "feat(db): 添加5个一级菜单到sys_menu表"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 4: 前端 - 改造 sqxp.ts 路由结构
|
||||
|
||||
**Files:**
|
||||
- Modify: `web-admin/src/router/modules/sqxp.ts:1-1264`
|
||||
|
||||
- [ ] **Step 1: 添加新一级菜单定义**
|
||||
|
||||
在文件开头添加 5 个新一级菜单(与后端对应):
|
||||
|
||||
```typescript
|
||||
// 新一级菜单
|
||||
const MARKET_TOP_MENU: AppRouteRecord = {
|
||||
id: 'TOP00000000000000000000000000001',
|
||||
name: 'MarketTop',
|
||||
path: '/market',
|
||||
component: '/index/index',
|
||||
meta: {
|
||||
title: '市场',
|
||||
icon: 'ri:shopping-cart-line',
|
||||
keepAlive: false,
|
||||
isTopMenu: true,
|
||||
roles: ['admin'],
|
||||
menuCode: 'menu:market'
|
||||
},
|
||||
children: [
|
||||
// 细胞存储、科研捐赠、中试服务、基础实验、市场基础信息、临床应用
|
||||
]
|
||||
}
|
||||
|
||||
const PRODUCTION_TOP_MENU: AppRouteRecord = {
|
||||
id: 'TOP00000000000000000000000000002',
|
||||
name: 'ProductionTop',
|
||||
path: '/production-group',
|
||||
component: '/index/index',
|
||||
meta: {
|
||||
title: '生产',
|
||||
icon: 'ri:factory-line',
|
||||
keepAlive: false,
|
||||
isTopMenu: true,
|
||||
roles: ['admin'],
|
||||
menuCode: 'menu:production'
|
||||
},
|
||||
children: [
|
||||
// 临床应用、生产管理、生产基础信息
|
||||
]
|
||||
}
|
||||
|
||||
const QUALITY_TOP_MENU: AppRouteRecord = {
|
||||
id: 'TOP00000000000000000000000000003',
|
||||
name: 'QualityTop',
|
||||
path: '/quality-group',
|
||||
component: '/index/index',
|
||||
meta: {
|
||||
title: '质检',
|
||||
icon: 'ri:shield-check-line',
|
||||
keepAlive: false,
|
||||
isTopMenu: true,
|
||||
roles: ['admin'],
|
||||
menuCode: 'menu:quality'
|
||||
},
|
||||
children: [
|
||||
// 质检管理、质检基础信息
|
||||
]
|
||||
}
|
||||
|
||||
const OPERATIONS_TOP_MENU: AppRouteRecord = {
|
||||
id: 'TOP00000000000000000000000000004',
|
||||
name: 'OperationsTop',
|
||||
path: '/operations-group',
|
||||
component: '/index/index',
|
||||
meta: {
|
||||
title: '运营支撑',
|
||||
icon: 'ri:settings-3-line',
|
||||
keepAlive: false,
|
||||
isTopMenu: true,
|
||||
roles: ['admin'],
|
||||
menuCode: 'menu:operations'
|
||||
},
|
||||
children: [
|
||||
// 系统基础信息、运营支撑
|
||||
]
|
||||
}
|
||||
|
||||
const SYSTEM_TOP_MENU: AppRouteRecord = {
|
||||
id: 'TOP00000000000000000000000000005',
|
||||
name: 'SystemTop',
|
||||
path: '/system-manage',
|
||||
component: '/index/index',
|
||||
meta: {
|
||||
title: '系统管理',
|
||||
icon: 'ri:server-line',
|
||||
keepAlive: false,
|
||||
isTopMenu: true,
|
||||
roles: ['admin'],
|
||||
menuCode: 'menu:system-manage'
|
||||
},
|
||||
children: [
|
||||
// 系统管理、工作流管理
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 将原有 14 个菜单作为二级菜单移动到对应一级菜单下**
|
||||
|
||||
将细胞存储、科研捐赠、中试服务、基础实验、市场基础信息移到 MARKET_TOP_MENU.children 下;
|
||||
将临床应用移到 PRODUCTION_TOP_MENU.children 下;
|
||||
以此类推。
|
||||
|
||||
- [ ] **Step 3: 更新 export 导出**
|
||||
|
||||
将 sqxpAdminRoutes 改为只包含 5 个新一级菜单。
|
||||
|
||||
- [ ] **Step 4: Commit**
|
||||
|
||||
```bash
|
||||
git add web-admin/src/router/modules/sqxp.ts
|
||||
git commit -m "feat(router): 重构路由为5个一级菜单分组"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 5: 前端 - 改造菜单组件支持两级结构
|
||||
|
||||
**Files:**
|
||||
- Modify: `web-admin/src/components/core/layouts/art-menus/art-horizontal-menu/index.vue`
|
||||
- Modify: `web-admin/src/components/core/layouts/art-menus/art-mixed-menu/index.vue`
|
||||
- Modify: `web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue`
|
||||
|
||||
- [ ] **Step 1: 识别当前活跃的一级菜单**
|
||||
|
||||
新增逻辑:根据当前路由路径判断所属的一级菜单,提取出 `activeTopMenuId`。
|
||||
|
||||
```typescript
|
||||
// 在组件中添加 computed
|
||||
const activeTopMenuId = computed(() => {
|
||||
const path = route.path
|
||||
// 从路径中提取一级菜单 path,如 /market/cell-storage → /market
|
||||
const topPath = '/' + path.split('/')[1]
|
||||
return topPath
|
||||
})
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 分离一级菜单和二级菜单数据**
|
||||
|
||||
```typescript
|
||||
// 过滤出一级菜单(isTopMenu: true)
|
||||
const topMenus = computed(() => {
|
||||
return props.list.filter(item => item.meta?.isTopMenu)
|
||||
})
|
||||
|
||||
// 根据活跃的一级菜单获取二级菜单
|
||||
const subMenus = computed(() => {
|
||||
const active = topMenus.value.find(item => item.path === activeTopMenuId.value)
|
||||
return active?.children || []
|
||||
})
|
||||
```
|
||||
|
||||
- [ ] **Step 3: 修改模板**
|
||||
|
||||
水平菜单只显示一级菜单,点击后更新 activeTopMenuId,并触发侧边栏显示对应的二级菜单。
|
||||
|
||||
- [ ] **Step 4: Commit**
|
||||
|
||||
```bash
|
||||
git add web-admin/src/components/core/layouts/art-menus/art-horizontal-menu/index.vue
|
||||
git add web-admin/src/components/core/layouts/art-menus/art-mixed-menu/index.vue
|
||||
git commit -m "feat(menu): 改造顶部菜单支持两级结构"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 6: 前端 - 改造侧边栏组件
|
||||
|
||||
**Files:**
|
||||
- Modify: `web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue`
|
||||
|
||||
- [ ] **Step 1: 修改菜单列表计算逻辑**
|
||||
|
||||
当前 `menuList` computed 根据 `isTopLeftMenu` 或 `isDualMenu` 返回对应子菜单。改为:
|
||||
- 当存在活跃一级菜单时,返回该一级菜单的 children
|
||||
- 否则返回完整菜单列表(兼容一级菜单页面)
|
||||
|
||||
```typescript
|
||||
const menuList = computed(() => {
|
||||
const menuStore = useMenuStore()
|
||||
const allMenus = menuStore.menuList
|
||||
|
||||
if (!isTopLeftMenu.value && !isDualMenu.value) {
|
||||
return allMenus
|
||||
}
|
||||
|
||||
// 处理 iframe 路径
|
||||
if (isIframe(route.path)) {
|
||||
return findIframeMenuList(route.path, allMenus)
|
||||
}
|
||||
|
||||
// 一级菜单页面直接返回空
|
||||
if (route.meta.isFirstLevel) {
|
||||
return []
|
||||
}
|
||||
|
||||
// 返回当前一级菜单的子菜单
|
||||
const topPath = '/' + route.path.split('/')[1]
|
||||
const currentTopMenu = allMenus.find(menu =>
|
||||
menu.meta?.isTopMenu && menu.path === topPath
|
||||
)
|
||||
|
||||
if (currentTopMenu?.children) {
|
||||
return currentTopMenu.children.filter((child: AppRouteRecord) => !child.meta?.isHide)
|
||||
}
|
||||
|
||||
return []
|
||||
})
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue
|
||||
git commit -m "feat(menu): 改造侧边栏显示二级菜单"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 7: 前端 - 更新菜单状态管理
|
||||
|
||||
**Files:**
|
||||
- Modify: `web-admin/src/store/modules/menu.ts`
|
||||
- Modify: `web-admin/src/store/modules/setting.ts`
|
||||
|
||||
- [ ] **Step 1: 在 menu.ts 中添加活跃一级菜单状态**
|
||||
|
||||
```typescript
|
||||
/** 活跃的一级菜单路径 */
|
||||
const activeTopMenuPath = ref('')
|
||||
|
||||
/** 设置活跃一级菜单 */
|
||||
const setActiveTopMenuPath = (path: string) => {
|
||||
activeTopMenuPath.value = path
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add web-admin/src/store/modules/menu.ts
|
||||
git commit -m "feat(store): 添加一级菜单活跃状态管理"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 8: 测试验证
|
||||
|
||||
- [ ] **Step 1: 启动后端服务**
|
||||
|
||||
```bash
|
||||
cd backend && ./start-local.sh
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 启动前端服务**
|
||||
|
||||
```bash
|
||||
cd web-admin && pnpm dev
|
||||
```
|
||||
|
||||
- [ ] **Step 3: 验证菜单显示**
|
||||
|
||||
1. 登录管理端
|
||||
2. 检查顶部是否显示 5 个一级菜单
|
||||
3. 点击一级菜单,检查左侧是否显示对应的二级菜单
|
||||
4. 验证权限控制:没有 `menu:market` 权限的角色不应看到「市场」菜单
|
||||
|
||||
- [ ] **Step 4: Commit**
|
||||
|
||||
```bash
|
||||
git add -A
|
||||
git commit -m "test: 验证菜单结构调整功能"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 执行方式
|
||||
|
||||
**Two execution options:**
|
||||
|
||||
**1. Subagent-Driven (recommended)** - I dispatch a fresh subagent per task, review between tasks, fast iteration
|
||||
|
||||
**2. Inline Execution** - Execute tasks in this session using executing-plans, batch execution with checkpoints
|
||||
|
||||
**Which approach?**
|
||||
@@ -3652,14 +3652,14 @@
|
||||
"label": "logSidebarMenu()",
|
||||
"file_type": "code",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L158"
|
||||
"source_location": "L159"
|
||||
},
|
||||
{
|
||||
"id": "art_sidebar_menu_index_if",
|
||||
"label": "if()",
|
||||
"file_type": "code",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L249"
|
||||
"source_location": "L271"
|
||||
},
|
||||
{
|
||||
"id": "components_core_layouts_art_menus_art_sidebar_menu_widget_sidebarsubmenu_vue",
|
||||
@@ -8720,14 +8720,14 @@
|
||||
"label": "fetchQcMaterialLinkedTaskUsages()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L87"
|
||||
"source_location": "L84"
|
||||
},
|
||||
{
|
||||
"id": "api_qc_material_usage_fetchmyqcmaterialusagelist",
|
||||
"label": "fetchMyQcMaterialUsageList()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L93"
|
||||
"source_location": "L90"
|
||||
},
|
||||
{
|
||||
"id": "api_qc_material_ts",
|
||||
@@ -21844,7 +21844,7 @@
|
||||
},
|
||||
{
|
||||
"source": "components_core_layouts_art_menus_art_sidebar_menu_index_vue",
|
||||
"target": "components_core_layouts_art_menus_art_sidebar_menu_widget_sidebarsubmenu_vue",
|
||||
"target": "users_wuzilong_work_00code_zkxw_web_admin_src_types_router",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
@@ -21853,7 +21853,7 @@
|
||||
},
|
||||
{
|
||||
"source": "components_core_layouts_art_menus_art_sidebar_menu_index_vue",
|
||||
"target": "users_wuzilong_work_00code_zkxw_web_admin_src_hooks_core_usecommon",
|
||||
"target": "components_core_layouts_art_menus_art_sidebar_menu_widget_sidebarsubmenu_vue",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
@@ -21862,20 +21862,29 @@
|
||||
},
|
||||
{
|
||||
"source": "components_core_layouts_art_menus_art_sidebar_menu_index_vue",
|
||||
"target": "core",
|
||||
"target": "users_wuzilong_work_00code_zkxw_web_admin_src_hooks_core_usecommon",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L144",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "components_core_layouts_art_menus_art_sidebar_menu_index_vue",
|
||||
"target": "core",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L145",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "components_core_layouts_art_menus_art_sidebar_menu_index_vue",
|
||||
"target": "art_sidebar_menu_index_logsidebarmenu",
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L158",
|
||||
"source_location": "L159",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -21884,7 +21893,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L249",
|
||||
"source_location": "L271",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -21893,7 +21902,7 @@
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L250",
|
||||
"source_location": "L272",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -28859,7 +28868,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L87",
|
||||
"source_location": "L84",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -28868,7 +28877,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L93",
|
||||
"source_location": "L90",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -43273,7 +43282,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L81",
|
||||
"source_location": "L78",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -43283,7 +43292,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L88",
|
||||
"source_location": "L85",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -43293,7 +43302,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L103",
|
||||
"source_location": "L100",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Graph Report - src (2026-06-12)
|
||||
|
||||
## Corpus Check
|
||||
- Large corpus: 704 files · ~444,651 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
|
||||
- Large corpus: 704 files · ~444,888 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
|
||||
|
||||
## Summary
|
||||
- 2103 nodes · 2742 edges · 53 communities detected
|
||||
|
||||
@@ -4696,7 +4696,7 @@
|
||||
"label": "logSidebarMenu()",
|
||||
"file_type": "code",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L158",
|
||||
"source_location": "L159",
|
||||
"id": "art_sidebar_menu_index_logsidebarmenu",
|
||||
"community": 52,
|
||||
"norm_label": "logsidebarmenu()"
|
||||
@@ -4705,7 +4705,7 @@
|
||||
"label": "if()",
|
||||
"file_type": "code",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L249",
|
||||
"source_location": "L271",
|
||||
"id": "art_sidebar_menu_index_if",
|
||||
"community": 52,
|
||||
"norm_label": "if()"
|
||||
@@ -11212,7 +11212,7 @@
|
||||
"label": "fetchQcMaterialLinkedTaskUsages()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L87",
|
||||
"source_location": "L84",
|
||||
"id": "api_qc_material_usage_fetchqcmateriallinkedtaskusages",
|
||||
"community": 0,
|
||||
"norm_label": "fetchqcmateriallinkedtaskusages()"
|
||||
@@ -11221,7 +11221,7 @@
|
||||
"label": "fetchMyQcMaterialUsageList()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L93",
|
||||
"source_location": "L90",
|
||||
"id": "api_qc_material_usage_fetchmyqcmaterialusagelist",
|
||||
"community": 0,
|
||||
"norm_label": "fetchmyqcmaterialusagelist()"
|
||||
@@ -27756,7 +27756,7 @@
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L142",
|
||||
"source_location": "L143",
|
||||
"weight": 1.0,
|
||||
"_src": "components_core_layouts_art_menus_art_sidebar_menu_index_vue",
|
||||
"_tgt": "components_core_layouts_art_menus_art_sidebar_menu_widget_sidebarsubmenu_vue",
|
||||
@@ -27768,7 +27768,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L158",
|
||||
"source_location": "L159",
|
||||
"weight": 1.0,
|
||||
"_src": "components_core_layouts_art_menus_art_sidebar_menu_index_vue",
|
||||
"_tgt": "art_sidebar_menu_index_logsidebarmenu",
|
||||
@@ -27780,7 +27780,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L249",
|
||||
"source_location": "L271",
|
||||
"weight": 1.0,
|
||||
"_src": "components_core_layouts_art_menus_art_sidebar_menu_index_vue",
|
||||
"_tgt": "art_sidebar_menu_index_if",
|
||||
@@ -27792,7 +27792,7 @@
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "components/core/layouts/art-menus/art-sidebar-menu/index.vue",
|
||||
"source_location": "L250",
|
||||
"source_location": "L272",
|
||||
"weight": 1.0,
|
||||
"_src": "art_sidebar_menu_index_if",
|
||||
"_tgt": "art_sidebar_menu_index_logsidebarmenu",
|
||||
@@ -39648,7 +39648,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L87",
|
||||
"source_location": "L84",
|
||||
"weight": 1.0,
|
||||
"_src": "api_qc_material_usage_ts",
|
||||
"_tgt": "api_qc_material_usage_fetchqcmateriallinkedtaskusages",
|
||||
@@ -39660,7 +39660,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L93",
|
||||
"source_location": "L90",
|
||||
"weight": 1.0,
|
||||
"_src": "api_qc_material_usage_ts",
|
||||
"_tgt": "api_qc_material_usage_fetchmyqcmaterialusagelist",
|
||||
@@ -39685,7 +39685,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L81",
|
||||
"source_location": "L78",
|
||||
"weight": 1.0,
|
||||
"_src": "api_qc_material_usage_fetchqcmaterialrequisitionoptions",
|
||||
"_tgt": "process_processroutetab_get",
|
||||
@@ -39697,7 +39697,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L88",
|
||||
"source_location": "L85",
|
||||
"weight": 1.0,
|
||||
"_src": "api_qc_material_usage_fetchqcmateriallinkedtaskusages",
|
||||
"_tgt": "process_processroutetab_get",
|
||||
@@ -39709,7 +39709,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/qc-material-usage.ts",
|
||||
"source_location": "L103",
|
||||
"source_location": "L100",
|
||||
"weight": 1.0,
|
||||
"_src": "api_qc_material_usage_fetchmyqcmaterialusagelist",
|
||||
"_tgt": "process_processroutetab_get",
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/common/index.ts": 1778582068.0254738,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/directive/directive.d.ts": 1778582068.026978,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/api/api.d.ts": 1778582068.0246184,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1781246166.8389935,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1781246095.71424,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1781262668.3419724,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1781262660.342241,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/store/index.ts": 1778582068.0293276,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/router/index.ts": 1780480414.9574106,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/locales/index.ts": 1778582068.004279,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/config/pilot-biz-type.ts": 1781080088.8866432,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/config/setting.ts": 1778582067.9954739,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/config/setting.ts": 1781261966.3458033,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/config/index.ts": 1780480414.9542737,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/config/modules/component.ts": 1778582067.9943824,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/config/modules/festival.ts": 1778582067.9949014,
|
||||
@@ -109,7 +109,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/forms/art-drag-verify/index.vue": 1780480414.9471714,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/forms/art-wang-editor/index.vue": 1780480414.9483848,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/forms/art-button-table/index.vue": 1780480414.9469068,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/widget/art-icon-button/index.vue": 1779525781.578175,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/widget/art-icon-button/index.vue": 1781261966.3424845,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/cards/art-bar-chart-card/index.vue": 1779525781.5786,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/cards/art-data-list-card/index.vue": 1779525781.5789726,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/cards/art-timeline-list-card/index.vue": 1779525781.5793364,
|
||||
@@ -151,10 +151,10 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-work-tab/index.vue": 1780480414.9528105,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-chat-window/index.vue": 1780480414.949035,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-page-content/index.vue": 1780480414.9517472,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-horizontal-menu/index.vue": 1779525781.5938804,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-horizontal-menu/index.vue": 1781265024.879481,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-horizontal-menu/widget/HorizontalSubmenu.vue": 1779525781.5942907,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-mixed-menu/index.vue": 1779525781.5947194,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue": 1780480414.950054,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-mixed-menu/index.vue": 1781265047.1098888,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue": 1781265171.7087455,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/widget/SidebarSubmenu.vue": 1780480414.9512155,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-fireworks-effect/index.vue": 1779525781.5963395,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-global-search/index.vue": 1780480414.949282,
|
||||
@@ -162,8 +162,8 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-fast-enter/index.vue": 1779525781.5979466,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-screen-lock/index.vue": 1780480414.9519973,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-breadcrumb/index.vue": 1779525781.5987902,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-header-bar/index.vue": 1780480414.949582,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-header-bar/widget/ArtUserMenu.vue": 1780540514.104913,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-header-bar/index.vue": 1781261966.333767,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-header-bar/widget/ArtUserMenu.vue": 1781261966.3381455,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-header-bar/widget/UserProfileDialog.vue": 1780540511.8256087,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/theme/theme-svg/index.vue": 1779525781.6001027,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/views/result/ArtResultPage.vue": 1779525781.6004124,
|
||||
@@ -176,7 +176,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/text-effect/art-festival-text-scroll/index.vue": 1779525781.6024969,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/base/art-svg-icon/index.vue": 1780480414.9462214,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/base/art-back-to-top/index.vue": 1780480414.9458482,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/base/art-logo/index.vue": 1780480414.9460301,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/base/art-logo/index.vue": 1781261966.3224938,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/media/art-video-player/index.vue": 1779525781.6045322,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/media/art-cutter-img/index.vue": 1779525781.6051006,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue": 1781071871.112025,
|
||||
@@ -215,8 +215,8 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/leave.ts": 1778666177.2933538,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-reception-check-item.ts": 1779007909.2933023,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production.ts": 1779790323.3656075,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/infusion-schedule-handover.ts": 1780455576.8827417,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts": 1779968240.1929023,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/infusion-schedule-handover.ts": 1781265180.640469,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts": 1781265180.6784458,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-third-party-item.ts": 1779017836.101254,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/env-detect-record.ts": 1781145722.88074,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts": 1780478965.1159081,
|
||||
@@ -241,7 +241,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/env-detect-item.ts": 1781145721.2792275,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts": 1779692910.5154753,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-stock-check.ts": 1781160560.139552,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts": 1781231486.6247969,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts": 1781265180.7528677,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material.ts": 1781160507.2869322,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-sms-notification.ts": 1780326875.7881882,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/system.ts": 1779790323.5636237,
|
||||
@@ -350,7 +350,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue": 1779864199.4381752,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/index.vue": 1779864070.4019275,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/OutputTypeTab.vue": 1779864078.964701,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/index/index.vue": 1779525781.6949234,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/index/index.vue": 1781261760.654956,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue": 1781248364.9092808,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSingleCard.vue": 1781248310.590171,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderFeeSummaryBar.vue": 1781247653.7613583,
|
||||
@@ -358,7 +358,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderTaskSubList.vue": 1781245816.5224924,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/OutboundQcViewDialog.vue": 1781247706.6829572,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderCardList.vue": 1781245766.0003755,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolPaymentPanel.vue": 1781248366.9077792,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolPaymentPanel.vue": 1781248391.8761723,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception-check-item/index.vue": 1779857055.2939715,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/lab-test-item/index.vue": 1779864504.1085482,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/lab-test-item/ThirdPartyCompanyTab.vue": 1779864511.579237,
|
||||
@@ -436,7 +436,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/index.ts": 1778582068.0218356,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/worktab.ts": 1780480414.9568844,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/table.ts": 1779257771.098434,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/menu.ts": 1780480414.9564605,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/menu.ts": 1781265272.7543552,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/setting.ts": 1778582068.0225098,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/user.ts": 1780540187.1384017,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/routesAlias.ts": 1778582068.0211735,
|
||||
@@ -449,7 +449,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/RoutePermissionValidator.ts": 1778582068.0127926,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/index.ts": 1778582068.0138035,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/IframeRouteManager.ts": 1778582068.0121944,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts": 1781232757.2242923,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts": 1781264931.192182,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/index.ts": 1780480414.9561174,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/exception.ts": 1780480414.9559598,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/routes/staticRoutes.ts": 1780480414.9562852,
|
||||
|
||||
@@ -44,7 +44,12 @@ export function saveInfusionScheduleOutboundHandover(
|
||||
remark?: string
|
||||
cells: { cellProductId: string; remark?: string }[]
|
||||
qcMaterials: { materialId: string; qty: number; remark?: string }[]
|
||||
paperMaterials: { paperName: string; copies: number; attachmentUrl: string; remark?: string }[]
|
||||
paperMaterials: {
|
||||
paperName: string
|
||||
copies: number
|
||||
attachmentUrl: string
|
||||
remark?: string
|
||||
}[]
|
||||
}
|
||||
handover: {
|
||||
handoverUserId: string
|
||||
|
||||
@@ -4,7 +4,7 @@ import type {
|
||||
OutboundQcDetailPatient,
|
||||
OutboundQcDetailInfusionPlan,
|
||||
OutboundQcDetailInfusionSchedule,
|
||||
OutboundQcDetailProduct,
|
||||
OutboundQcDetailProduct
|
||||
} from '@/api/qc-work-order'
|
||||
|
||||
type PageList<T> = {
|
||||
@@ -45,7 +45,7 @@ export type {
|
||||
OutboundQcDetailPatient,
|
||||
OutboundQcDetailInfusionPlan,
|
||||
OutboundQcDetailInfusionSchedule,
|
||||
OutboundQcDetailProduct,
|
||||
OutboundQcDetailProduct
|
||||
}
|
||||
|
||||
export type OutboundReviewInfo = {
|
||||
@@ -165,13 +165,13 @@ export function fetchOutboundReleaseReviewList(params?: {
|
||||
}) {
|
||||
return request.get<PageList<OutboundReleaseReview>>({
|
||||
url: '/web/admin/pilot-release-reviews',
|
||||
params,
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchOutboundReleaseReviewDetail(scheduleId: string) {
|
||||
return request.get<OutboundReleaseReviewDetail>({
|
||||
url: `/web/admin/pilot-release-reviews/${scheduleId}/detail`,
|
||||
url: `/web/admin/pilot-release-reviews/${scheduleId}/detail`
|
||||
})
|
||||
}
|
||||
|
||||
@@ -185,7 +185,7 @@ export function submitOutboundReleaseReview(
|
||||
) {
|
||||
return request.put<OutboundReleaseReview>({
|
||||
url: `/web/admin/pilot-release-reviews/${scheduleId}/review`,
|
||||
data,
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
@@ -197,32 +197,32 @@ export function batchReviewOutboundRelease(data: {
|
||||
}) {
|
||||
return request.put<void>({
|
||||
url: '/web/admin/pilot-release-reviews/batch-review',
|
||||
data,
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchOutboundReleaseMaterial(scheduleId: string) {
|
||||
return request.get<OutboundReleaseMaterialDetail>({
|
||||
url: `/web/admin/pilot-release-reviews/${scheduleId}/outbound-materials`,
|
||||
url: `/web/admin/pilot-release-reviews/${scheduleId}/outbound-materials`
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchReleaseReviewList(params: { scheduleId: string }) {
|
||||
return request.get<any>({
|
||||
url: `/web/admin/pilot-release-reviews/${params.scheduleId}/detail`,
|
||||
url: `/web/admin/pilot-release-reviews/${params.scheduleId}/detail`
|
||||
})
|
||||
}
|
||||
|
||||
export function updateReleaseReview(data: { id: string; reviewConclusion: string }) {
|
||||
return request.put<any>({
|
||||
url: `/web/admin/pilot-release-reviews/${data.id}/review`,
|
||||
data: { reviewConclusion: data.reviewConclusion },
|
||||
data: { reviewConclusion: data.reviewConclusion }
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteReleaseReview(data: { id: string }) {
|
||||
return request.delete<any>({
|
||||
url: `/web/admin/pilot-release-reviews/${data.id}`,
|
||||
url: `/web/admin/pilot-release-reviews/${data.id}`
|
||||
})
|
||||
}
|
||||
|
||||
@@ -237,6 +237,6 @@ export function saveOutboundReleaseMaterial(
|
||||
) {
|
||||
return request.put<OutboundReleaseMaterialDetail>({
|
||||
url: `/web/admin/pilot-release-reviews/${scheduleId}/outbound-materials`,
|
||||
data,
|
||||
data
|
||||
})
|
||||
}
|
||||
@@ -74,10 +74,7 @@ export function fetchQcMaterialUsageList(params?: {
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchQcMaterialRequisitionOptions(params?: {
|
||||
keyword?: string
|
||||
limit?: number
|
||||
}) {
|
||||
export function fetchQcMaterialRequisitionOptions(params?: { keyword?: string; limit?: number }) {
|
||||
return request.get<QcMaterialRequisitionOption[]>({
|
||||
url: '/web/admin/qc-material-requisition-options',
|
||||
params
|
||||
|
||||
@@ -28,7 +28,7 @@ import { SystemThemeEnum, MenuThemeEnum, MenuTypeEnum, ContainerWidthEnum } from
|
||||
*/
|
||||
export const SETTING_DEFAULT_CONFIG = {
|
||||
/** 菜单类型 */
|
||||
menuType: MenuTypeEnum.LEFT,
|
||||
menuType: MenuTypeEnum.TOP_LEFT,
|
||||
/** 菜单展开宽度 */
|
||||
menuOpenWidth: 230,
|
||||
/** 菜单是否展开 */
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_horizontal_menu_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-horizontal-menu/index.vue", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_horizontal_menu_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_horizontal_menu_widget_horizontalsubmenu_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-horizontal-menu/index.vue", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_horizontal_menu_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_setting", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-horizontal-menu/index.vue", "source_location": "L30", "weight": 1.0}], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_infusion_schedule_handover_ts", "label": "infusion-schedule-handover.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/infusion-schedule-handover.ts", "source_location": "L1"}, {"id": "api_infusion_schedule_handover_fetchinfusionscheduleoutboundhandover", "label": "fetchInfusionScheduleOutboundHandover()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/infusion-schedule-handover.ts", "source_location": "L34"}, {"id": "api_infusion_schedule_handover_saveinfusionscheduleoutboundhandover", "label": "saveInfusionScheduleOutboundHandover()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/infusion-schedule-handover.ts", "source_location": "L40"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_infusion_schedule_handover_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/infusion-schedule-handover.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_infusion_schedule_handover_ts", "target": "api_infusion_schedule_handover_fetchinfusionscheduleoutboundhandover", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/infusion-schedule-handover.ts", "source_location": "L34", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_infusion_schedule_handover_ts", "target": "api_infusion_schedule_handover_saveinfusionscheduleoutboundhandover", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/infusion-schedule-handover.ts", "source_location": "L40", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_infusion_schedule_handover_fetchinfusionscheduleoutboundhandover", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/infusion-schedule-handover.ts", "source_location": "L35"}, {"caller_nid": "api_infusion_schedule_handover_saveinfusionscheduleoutboundhandover", "callee": "put", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/infusion-schedule-handover.ts", "source_location": "L65"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_material_usage_ts", "label": "qc-material-usage.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L1"}, {"id": "api_qc_material_usage_fetchqcmaterialusagelist", "label": "fetchQcMaterialUsageList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L61"}, {"id": "api_qc_material_usage_fetchqcmaterialrequisitionoptions", "label": "fetchQcMaterialRequisitionOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L77"}, {"id": "api_qc_material_usage_fetchqcmateriallinkedtaskusages", "label": "fetchQcMaterialLinkedTaskUsages()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L84"}, {"id": "api_qc_material_usage_fetchmyqcmaterialusagelist", "label": "fetchMyQcMaterialUsageList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L90"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_material_usage_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_material_usage_ts", "target": "api_qc_material_usage_fetchqcmaterialusagelist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L61", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_material_usage_ts", "target": "api_qc_material_usage_fetchqcmaterialrequisitionoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L77", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_material_usage_ts", "target": "api_qc_material_usage_fetchqcmateriallinkedtaskusages", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L84", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_material_usage_ts", "target": "api_qc_material_usage_fetchmyqcmaterialusagelist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L90", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_qc_material_usage_fetchqcmaterialusagelist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L71"}, {"caller_nid": "api_qc_material_usage_fetchqcmaterialrequisitionoptions", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L78"}, {"caller_nid": "api_qc_material_usage_fetchqcmateriallinkedtaskusages", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L85"}, {"caller_nid": "api_qc_material_usage_fetchmyqcmaterialusagelist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts", "source_location": "L100"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_qcworkorderprotocolpaymentpanel_vue", "label": "QcWorkOrderProtocolPaymentPanel.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolPaymentPanel.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_mixed_menu_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-mixed-menu/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_outbound_release_review_ts", "label": "outbound-release-review.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L1"}, {"id": "api_outbound_release_review_fetchoutboundreleasereviewlist", "label": "fetchOutboundReleaseReviewList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L154"}, {"id": "api_outbound_release_review_fetchoutboundreleasereviewdetail", "label": "fetchOutboundReleaseReviewDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L172"}, {"id": "api_outbound_release_review_submitoutboundreleasereview", "label": "submitOutboundReleaseReview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L178"}, {"id": "api_outbound_release_review_batchreviewoutboundrelease", "label": "batchReviewOutboundRelease()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L192"}, {"id": "api_outbound_release_review_fetchoutboundreleasematerial", "label": "fetchOutboundReleaseMaterial()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L204"}, {"id": "api_outbound_release_review_fetchreleasereviewlist", "label": "fetchReleaseReviewList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L210"}, {"id": "api_outbound_release_review_updatereleasereview", "label": "updateReleaseReview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L216"}, {"id": "api_outbound_release_review_deletereleasereview", "label": "deleteReleaseReview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L223"}, {"id": "api_outbound_release_review_saveoutboundreleasematerial", "label": "saveOutboundReleaseMaterial()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L229"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_outbound_release_review_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_outbound_release_review_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_outbound_release_review_ts", "target": "api_outbound_release_review_fetchoutboundreleasereviewlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L154", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_outbound_release_review_ts", "target": "api_outbound_release_review_fetchoutboundreleasereviewdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L172", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_outbound_release_review_ts", "target": "api_outbound_release_review_submitoutboundreleasereview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L178", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_outbound_release_review_ts", "target": "api_outbound_release_review_batchreviewoutboundrelease", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L192", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_outbound_release_review_ts", "target": "api_outbound_release_review_fetchoutboundreleasematerial", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/outbound-release-review.ts", "source_location": "L204", "wLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_menu_ts", "label": "menu.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/menu.ts", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_menu_ts", "target": "pinia", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/menu.ts", "source_location": "L31", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_menu_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/menu.ts", "source_location": "L32", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_menu_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_types_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/menu.ts", "source_location": "L33", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_menu_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/menu.ts", "source_location": "L34", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_menu_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/menu.ts", "source_location": "L35", "weight": 1.0}], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L1"}, {"id": "art_sidebar_menu_index_logsidebarmenu", "label": "logSidebarMenu()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L159"}, {"id": "art_sidebar_menu_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L271"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_index_vue", "target": "pinia", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L135", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_setting", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L136", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_enums_appenum", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L137", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_menu", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L138", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_navigation", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L139", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_navigation", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L140", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_router_sidebar_menu_filter", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L141", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_types_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L142", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_widget_sidebarsubmenu_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue", "source_location": "L143", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_core_layouts_art_menus_art_sidebar_menu_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_hooks_core_usecommon", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/layouts/art-menus/art-sidebar-menu/index.vLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_router_modules_sqxp_ts", "label": "sqxp.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_modules_sqxp_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_types_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
|
||||
@@ -13,7 +13,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'TOP00000000000000000000000000001',
|
||||
name: 'Market',
|
||||
path: '/market',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '市场',
|
||||
icon: 'ri:shopping-cart-line',
|
||||
@@ -28,7 +28,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'CEL00000000000000000000000000001',
|
||||
name: 'CellStorage',
|
||||
path: 'cell-storage',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '细胞存储',
|
||||
icon: 'ri:test-tube-line',
|
||||
@@ -172,7 +172,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'RSC00000000000000000000000000001',
|
||||
name: 'ResearchDonation',
|
||||
path: 'research-donation',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '科研捐赠',
|
||||
icon: 'ri:hand-heart-line',
|
||||
@@ -222,7 +222,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'PIL00000000000000000000000000001',
|
||||
name: 'PilotService',
|
||||
path: 'pilot-service',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '中试服务',
|
||||
icon: 'ri:flask-line',
|
||||
@@ -288,7 +288,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'BEX00000000000000000000000000001',
|
||||
name: 'BasicExperiment',
|
||||
path: 'basic-experiment',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '基础实验',
|
||||
icon: 'ri:flask-line',
|
||||
@@ -340,7 +340,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'MKT00000000000000000000000000001',
|
||||
name: 'MarketInfo',
|
||||
path: 'market-info',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '市场基础信息',
|
||||
icon: 'ri:price-tag-3-line',
|
||||
@@ -540,7 +540,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'TOP00000000000000000000000000002',
|
||||
name: 'Production',
|
||||
path: '/production-group',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '生产',
|
||||
icon: 'ri:factory-line',
|
||||
@@ -555,7 +555,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'CLI00000000000000000000000000001',
|
||||
name: 'ClinicalApplication',
|
||||
path: 'clinical-application',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '临床应用',
|
||||
icon: 'ri:heart-pulse-line',
|
||||
@@ -660,7 +660,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'PRM00000000000000000000000000001',
|
||||
name: 'ProductionManage',
|
||||
path: 'production',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '生产管理',
|
||||
icon: 'grid',
|
||||
@@ -732,7 +732,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'PRB00000000000000000000000000001',
|
||||
name: 'ProductionBase',
|
||||
path: 'production-base',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '生产基础信息',
|
||||
icon: 'ri:tools-line',
|
||||
@@ -844,7 +844,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'TOP00000000000000000000000000003',
|
||||
name: 'Quality',
|
||||
path: '/quality-group',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '质检',
|
||||
icon: 'ri:shield-check-line',
|
||||
@@ -859,7 +859,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'QCM00000000000000000000000000001',
|
||||
name: 'QualityManage',
|
||||
path: 'quality-manage',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '质检管理',
|
||||
icon: 'ri:shield-check-line',
|
||||
@@ -952,7 +952,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'QCB00000000000000000000000000001',
|
||||
name: 'QualityBase',
|
||||
path: 'quality-base',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '质检基础信息',
|
||||
icon: 'ri:clipboard-line',
|
||||
@@ -1041,7 +1041,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'TOP00000000000000000000000000004',
|
||||
name: 'OperationsGroup',
|
||||
path: '/operations-group',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '运营支撑',
|
||||
icon: 'ri:settings-3-line',
|
||||
@@ -1056,7 +1056,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'SYSB000000000000000000000000000001',
|
||||
name: 'SystemBase',
|
||||
path: 'system-base',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '系统基础信息',
|
||||
icon: 'ri:archive-line',
|
||||
@@ -1105,7 +1105,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'OPS00000000000000000000000000001',
|
||||
name: 'Operations',
|
||||
path: 'operations',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '运营支撑',
|
||||
icon: 'operation',
|
||||
@@ -1148,7 +1148,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'TOP00000000000000000000000000005',
|
||||
name: 'SystemManageGroup',
|
||||
path: '/system-manage',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '系统管理',
|
||||
icon: 'ri:server-line',
|
||||
@@ -1163,7 +1163,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'SYSM000000000000000000000000000001',
|
||||
name: 'SystemManage',
|
||||
path: 'system',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '系统管理',
|
||||
icon: 'ri:settings-3-line',
|
||||
@@ -1263,7 +1263,7 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
id: 'WKF00000000000000000000000000001',
|
||||
name: 'Workflow',
|
||||
path: 'workflow',
|
||||
component: '/index/index',
|
||||
component: '',
|
||||
meta: {
|
||||
title: '工作流管理',
|
||||
icon: 'workflow',
|
||||
|
||||
Reference in new issue
Block a user