提交
This commit is contained in:
1 parent
8aab018558
commit
1b2896c877
70 files changed
+7753
-3306
No files matched your search
@@ -88,6 +88,26 @@ def _user_menu_ids(db: Session, user_id: str) -> Set[str]:
|
||||
return {str(r[0]).strip() for r in rows if r and r[0]}
|
||||
|
||||
|
||||
def _mobile_menu_icon(path: str) -> str:
|
||||
"""按路由匹配移动端宫格图标(与 mobile-h5 van-icon 字形名对齐)。"""
|
||||
p = (path or "").lower()
|
||||
if "oa/start" in p:
|
||||
return "approve"
|
||||
if "form-sink" in p:
|
||||
return "orders-o"
|
||||
return "apps-o"
|
||||
|
||||
|
||||
def _mobile_menu_icon_colors(path: str) -> dict:
|
||||
"""宫格图标底色/图形色(可按入口自定义,不强制品牌绿)。"""
|
||||
p = (path or "").lower()
|
||||
if "oa/start" in p:
|
||||
return {"iconBg": "#ffe4e6", "iconFg": "#e11d48"}
|
||||
if "form-sink" in p:
|
||||
return {"iconBg": "#eef2f1", "iconFg": "#3d524a"}
|
||||
return {"iconBg": "#eef2f1", "iconFg": "#3d524a"}
|
||||
|
||||
|
||||
@router.get("/menus")
|
||||
async def list_my_mobile_menus(request: Request, db: Session = Depends(get_db)):
|
||||
try:
|
||||
@@ -116,12 +136,15 @@ async def list_my_mobile_menus(request: Request, db: Session = Depends(get_db)):
|
||||
continue
|
||||
if allowed_ids is not None and m.id not in allowed_ids:
|
||||
continue
|
||||
colors = _mobile_menu_icon_colors(path)
|
||||
items.append(
|
||||
{
|
||||
"id": m.id,
|
||||
"title": m.menu_name,
|
||||
"path": path if path.startswith("/") else f"/{path}",
|
||||
"icon": "edit",
|
||||
"icon": _mobile_menu_icon(path),
|
||||
"iconBg": colors["iconBg"],
|
||||
"iconFg": colors["iconFg"],
|
||||
"perms": (m.perms or "").strip() or None,
|
||||
}
|
||||
)
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -47,21 +47,21 @@
|
||||
"label": "_mask_secret()",
|
||||
"file_type": "code",
|
||||
"source_file": "main.py",
|
||||
"source_location": "L151"
|
||||
"source_location": "L152"
|
||||
},
|
||||
{
|
||||
"id": "app_main_root",
|
||||
"label": "root()",
|
||||
"file_type": "code",
|
||||
"source_file": "main.py",
|
||||
"source_location": "L173"
|
||||
"source_location": "L174"
|
||||
},
|
||||
{
|
||||
"id": "app_main_health_check",
|
||||
"label": "health_check()",
|
||||
"file_type": "code",
|
||||
"source_file": "main.py",
|
||||
"source_location": "L178"
|
||||
"source_location": "L179"
|
||||
},
|
||||
{
|
||||
"id": "app_main_rationale_93",
|
||||
@@ -25592,6 +25592,83 @@
|
||||
"source_file": "api/production_material.py",
|
||||
"source_location": "L1318"
|
||||
},
|
||||
{
|
||||
"id": "api_mini_menu_py",
|
||||
"label": "mini_menu.py",
|
||||
"file_type": "code",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L1"
|
||||
},
|
||||
{
|
||||
"id": "api_mini_menu_current_user",
|
||||
"label": "_current_user()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L19"
|
||||
},
|
||||
{
|
||||
"id": "api_mini_menu_find_mobile_root",
|
||||
"label": "_find_mobile_root()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L27"
|
||||
},
|
||||
{
|
||||
"id": "api_mini_menu_collect_descendants",
|
||||
"label": "_collect_descendants()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L45"
|
||||
},
|
||||
{
|
||||
"id": "api_mini_menu_user_menu_ids",
|
||||
"label": "_user_menu_ids()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L74"
|
||||
},
|
||||
{
|
||||
"id": "api_mini_menu_mobile_menu_icon",
|
||||
"label": "_mobile_menu_icon()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L91"
|
||||
},
|
||||
{
|
||||
"id": "api_mini_menu_mobile_menu_icon_colors",
|
||||
"label": "_mobile_menu_icon_colors()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L101"
|
||||
},
|
||||
{
|
||||
"id": "api_mini_menu_list_my_mobile_menus",
|
||||
"label": "list_my_mobile_menus()",
|
||||
"file_type": "code",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L112"
|
||||
},
|
||||
{
|
||||
"id": "api_mini_menu_rationale_1",
|
||||
"label": "\u5c0f\u7a0b\u5e8f\u83dc\u5355\uff1a\u5f53\u524d\u7528\u6237\u5728\u300c\u79fb\u52a8\u7aef\u83dc\u5355\u300d\u6811\u4e0b\u6709\u6743\u9650\u7684\u5165\u53e3\u3002",
|
||||
"file_type": "rationale",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L1"
|
||||
},
|
||||
{
|
||||
"id": "api_mini_menu_rationale_92",
|
||||
"label": "\u6309\u8def\u7531\u5339\u914d\u79fb\u52a8\u7aef\u5bab\u683c\u56fe\u6807\uff08\u4e0e mobile-h5 van-icon \u5b57\u5f62\u540d\u5bf9\u9f50\uff09\u3002",
|
||||
"file_type": "rationale",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L92"
|
||||
},
|
||||
{
|
||||
"id": "api_mini_menu_rationale_102",
|
||||
"label": "\u5bab\u683c\u56fe\u6807\u5e95\u8272/\u56fe\u5f62\u8272\uff08\u53ef\u6309\u5165\u53e3\u81ea\u5b9a\u4e49\uff0c\u4e0d\u5f3a\u5236\u54c1\u724c\u7eff\uff09\u3002",
|
||||
"file_type": "rationale",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L102"
|
||||
},
|
||||
{
|
||||
"id": "api_qc_py",
|
||||
"label": "qc.py",
|
||||
@@ -37289,7 +37366,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "main.py",
|
||||
"source_location": "L151",
|
||||
"source_location": "L152",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -37298,7 +37375,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "main.py",
|
||||
"source_location": "L173",
|
||||
"source_location": "L174",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -37307,7 +37384,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "main.py",
|
||||
"source_location": "L178",
|
||||
"source_location": "L179",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -103406,6 +103483,231 @@
|
||||
"source_location": "L1318",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "typing",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L4",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "fastapi",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L6",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "sqlalchemy_orm",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L7",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "app_core_auth",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L9",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "app_core_config",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L10",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "app_core_database",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L11",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "app_core_response",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L12",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "app_models_models",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L13",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "app_services_web_auth_roles",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L14",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "api_mini_menu_current_user",
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L19",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "api_mini_menu_find_mobile_root",
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L27",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "api_mini_menu_collect_descendants",
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L45",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "api_mini_menu_user_menu_ids",
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L74",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "api_mini_menu_mobile_menu_icon",
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L91",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "api_mini_menu_mobile_menu_icon_colors",
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L101",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_py",
|
||||
"target": "api_mini_menu_list_my_mobile_menus",
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L112",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_list_my_mobile_menus",
|
||||
"target": "api_mini_menu_current_user",
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L114",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_list_my_mobile_menus",
|
||||
"target": "api_mini_menu_find_mobile_root",
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L122",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_list_my_mobile_menus",
|
||||
"target": "api_mini_menu_collect_descendants",
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L126",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_list_my_mobile_menus",
|
||||
"target": "api_mini_menu_user_menu_ids",
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L128",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_list_my_mobile_menus",
|
||||
"target": "api_mini_menu_mobile_menu_icon_colors",
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L139",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_list_my_mobile_menus",
|
||||
"target": "api_mini_menu_mobile_menu_icon",
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L145",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_rationale_1",
|
||||
"target": "api_mini_menu_py",
|
||||
"relation": "rationale_for",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L1",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_rationale_92",
|
||||
"target": "api_mini_menu_mobile_menu_icon",
|
||||
"relation": "rationale_for",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L92",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_rationale_102",
|
||||
"target": "api_mini_menu_mobile_menu_icon_colors",
|
||||
"relation": "rationale_for",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L102",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_qc_py",
|
||||
"target": "typing",
|
||||
@@ -109211,6 +109513,15 @@
|
||||
"source_location": "L37",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_init_py",
|
||||
"target": "app_api_mini_menu",
|
||||
"relation": "imports_from",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "api/__init__.py",
|
||||
"source_location": "L38",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_init_rationale_1",
|
||||
"target": "api_init_py",
|
||||
@@ -233429,6 +233740,60 @@
|
||||
"source_location": "L20",
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_rationale_1",
|
||||
"target": "models_models_sysmenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L13",
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_rationale_92",
|
||||
"target": "models_models_sysmenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L13",
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_rationale_102",
|
||||
"target": "models_models_sysmenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L13",
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_rationale_1",
|
||||
"target": "models_models_sysrolemenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L13",
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_rationale_92",
|
||||
"target": "models_models_sysrolemenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L13",
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_rationale_102",
|
||||
"target": "models_models_sysrolemenu",
|
||||
"relation": "uses",
|
||||
"confidence": "INFERRED",
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L13",
|
||||
"weight": 0.8
|
||||
},
|
||||
{
|
||||
"source": "api_qc_thirdpartycompanybody",
|
||||
"target": "schemas_qc_work_order_qcworkordercreatebody",
|
||||
@@ -290140,6 +290505,106 @@
|
||||
"source_location": "L1335",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_current_user",
|
||||
"target": "crud_base_crudbase_get",
|
||||
"relation": "calls",
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L20",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_current_user",
|
||||
"target": "valueerror",
|
||||
"relation": "calls",
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L22",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_current_user",
|
||||
"target": "core_auth_get_current_user_by_token",
|
||||
"relation": "calls",
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L24",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_user_menu_ids",
|
||||
"target": "services_web_auth_roles_get_effective_role_ids",
|
||||
"relation": "calls",
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L75",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_user_menu_ids",
|
||||
"target": "str",
|
||||
"relation": "calls",
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L88",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_list_my_mobile_menus",
|
||||
"target": "core_response_error_response",
|
||||
"relation": "calls",
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L116",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_list_my_mobile_menus",
|
||||
"target": "str",
|
||||
"relation": "calls",
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L118",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_list_my_mobile_menus",
|
||||
"target": "crud_base_crudbase_get",
|
||||
"relation": "calls",
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L118",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_list_my_mobile_menus",
|
||||
"target": "core_response_success_response",
|
||||
"relation": "calls",
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L124",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_mini_menu_list_my_mobile_menus",
|
||||
"target": "services_web_auth_roles_resolve_web_role_for_user",
|
||||
"relation": "calls",
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "api/mini_menu.py",
|
||||
"source_location": "L127",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "api_qc_list_qc_third_party_companies",
|
||||
"target": "api_clinical_payment_get_tenant_no",
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
# Graph Report - app (2026-08-11)
|
||||
|
||||
## Corpus Check
|
||||
- Large corpus: 249 files · ~302,805 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
|
||||
- Large corpus: 250 files · ~303,240 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
|
||||
|
||||
## Summary
|
||||
- 5227 nodes · 28634 edges · 43 communities detected
|
||||
- Extraction: 32% EXTRACTED · 68% INFERRED · 0% AMBIGUOUS · INFERRED: 19594 edges (avg confidence: 0.6)
|
||||
- 5238 nodes · 28666 edges · 43 communities detected
|
||||
- Extraction: 32% EXTRACTED · 68% INFERRED · 0% AMBIGUOUS · INFERRED: 19610 edges (avg confidence: 0.6)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## Community Hubs (Navigation)
|
||||
@@ -54,8 +54,8 @@
|
||||
- [[_COMMUNITY_Community 44|Community 44]]
|
||||
|
||||
## God Nodes (most connected - your core abstractions)
|
||||
1. `success_response()` - 735 edges
|
||||
2. `error_response()` - 608 edges
|
||||
1. `success_response()` - 736 edges
|
||||
2. `error_response()` - 609 edges
|
||||
3. `SysUser` - 598 edges
|
||||
4. `BizQcTaskResult` - 346 edges
|
||||
5. `BizProductionMaterial` - 329 edges
|
||||
@@ -70,90 +70,90 @@
|
||||
core/api_request_log_middleware.py → models/models.py
|
||||
- `get_menu_list()` --calls--> `success_response()` [INFERRED]
|
||||
api/menu.py → core/response.py
|
||||
- `中试服务交付管理 API(交付信息、交付物料、交付方式)` --uses--> `SysUser` [INFERRED]
|
||||
api/pilot_delivery.py → models/models.py
|
||||
- `微信小程序登录业务:openid + 手机号一致性校验。` --uses--> `SysUser` [INFERRED]
|
||||
services/wechat_login_service.py → models/models.py
|
||||
- `根据 openid + 本次授权手机号解析可登录员工。 Returns: (user, error_message, error_co` --uses--> `SysUser` [INFERRED]
|
||||
services/wechat_login_service.py → models/models.py
|
||||
- `保留匹配节点及其全部上级,供关键词检索后仍能正确组树。` --uses--> `SysDept` [INFERRED]
|
||||
crud/dept.py → models/models.py
|
||||
|
||||
## Communities
|
||||
|
||||
### Community 0 - "Community 0"
|
||||
Cohesion: 0.01
|
||||
Nodes (991): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+983 more)
|
||||
Nodes (1001): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+993 more)
|
||||
|
||||
### Community 1 - "Community 1"
|
||||
Cohesion: 0.01
|
||||
Nodes (728): generate_uuid(), allocate_next_biz_no(), _format_biz_no(), _prefix_for(), 业务协议号自动生成:XBCC / JZCC + YYYYMMDD + 6 位序号, 原子分配下一个业务协议号。 须在 create 事务内调用;使用 MySQL LAST_INSERT_ID 保证并发安全。, _apply_cell_product_status_change(), create_cell_product() (+720 more)
|
||||
Nodes (706): generate_uuid(), allocate_next_biz_no(), _format_biz_no(), _prefix_for(), 业务协议号自动生成:XBCC / JZCC + YYYYMMDD + 6 位序号, 原子分配下一个业务协议号。 须在 create 事务内调用;使用 MySQL LAST_INSERT_ID 保证并发安全。, create_cell_product(), create_cell_sample_type() (+698 more)
|
||||
|
||||
### Community 2 - "Community 2"
|
||||
Cohesion: 0.01
|
||||
Nodes (637): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+629 more)
|
||||
Nodes (584): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+576 more)
|
||||
|
||||
### Community 3 - "Community 3"
|
||||
Cohesion: 0.06
|
||||
Nodes (457): 环境检测 — 检测项维护 + 登记管理 API, 保险公司及险种价格管理 API(保险公司 + 开票信息 + 险种价格), AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody (+449 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (410): 环境检测 — 检测项维护 + 登记管理 API, 保险公司及险种价格管理 API(保险公司 + 开票信息 + 险种价格), 小程序菜单:当前用户在「移动端菜单」树下有权限的入口。, 宫格图标底色/图形色(可按入口自定义,不强制品牌绿)。, 按路由匹配移动端宫格图标(与 mobile-h5 van-icon 字形名对齐)。, ProcessDefCreateBody, ProcessDefUpdateBody, PublishVersionBody (+402 more)
|
||||
|
||||
### Community 4 - "Community 4"
|
||||
Cohesion: 0.02
|
||||
Nodes (281): _normalize_date_bound(), _persist_protocol_sub_resources(), _body_to_payload(), _get_current_user_id(), get_production_reception_by_sample_code(), get_production_reception_detail(), _get_tenant_no(), post_production_reception() (+273 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (328): CellSampleTypeCreateBody, CellSampleTypeUpdateBody, CollectionRegionCreateBody, CollectionRegionUpdateBody, CustomerCreateBody, CustomerUpdateBody, HospitalCreateBody, HospitalUpdateBody (+320 more)
|
||||
|
||||
### Community 5 - "Community 5"
|
||||
Cohesion: 0.07
|
||||
Nodes (309): CellSampleTypeCreateBody, CellSampleTypeUpdateBody, CollectionRegionCreateBody, CollectionRegionUpdateBody, CustomerCreateBody, CustomerUpdateBody, HospitalCreateBody, HospitalUpdateBody (+301 more)
|
||||
Cohesion: 0.02
|
||||
Nodes (270): _normalize_date_bound(), _persist_protocol_sub_resources(), list_ethnics_for_select(), apply_data_scope(), _get_child_dept_ids(), get_user_dept_id(), _resolve_user_role_scopes(), format_date() (+262 more)
|
||||
|
||||
### Community 6 - "Community 6"
|
||||
Cohesion: 0.02
|
||||
Nodes (244): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时统一排序规则,避免 Illegal mix of collations。, 跨表字符串等值比较(JOIN / WHERE)时统一为 utf8mb4_unicode_ci。, 将列显式设为 utf8mb4_unicode_ci。, unicode_ci(), build_void_type_label_map(), format_protocol_status_label() (+236 more)
|
||||
Nodes (270): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时统一排序规则,避免 Illegal mix of collations。, 跨表字符串等值比较(JOIN / WHERE)时统一为 utf8mb4_unicode_ci。, 将列显式设为 utf8mb4_unicode_ci。, unicode_ci(), build_void_type_label_map(), format_protocol_status_label() (+262 more)
|
||||
|
||||
### Community 7 - "Community 7"
|
||||
Cohesion: 0.02
|
||||
Nodes (212): 截止日期:仅日期时扩到当天 23:59:59。, 发起前预览审批链(条件齐后解析最终路径与审批人)。, 兼容旧 GET:无 formData,含条件分支时多为待确定占位。, _app_to_dict(), _copied_app_name(), copy_app(), create_app(), _create_version() (+204 more)
|
||||
Nodes (234): 截止日期:仅日期时扩到当天 23:59:59。, 发起前预览审批链(条件齐后解析最终路径与审批人)。, 兼容旧 GET:无 formData,含条件分支时多为待确定占位。, _app_to_dict(), _copied_app_name(), copy_app(), create_app(), _create_version() (+226 more)
|
||||
|
||||
### Community 8 - "Community 8"
|
||||
Cohesion: 0.02
|
||||
Nodes (195): list_ethnics_for_select(), apply_data_scope(), _get_child_dept_ids(), get_user_dept_id(), _resolve_user_role_scopes(), ApiRequestLogCRUD, delete(), get_multi_with_filters() (+187 more)
|
||||
Nodes (142): get_designer_data(), _error_json(), lifespan(), 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, sqlalchemy_exception_handler(), unhandled_exception_handler(), BaseHTTPMiddleware (+134 more)
|
||||
|
||||
### Community 9 - "Community 9"
|
||||
Cohesion: 0.02
|
||||
Nodes (144): get_designer_data(), _error_json(), lifespan(), 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, sqlalchemy_exception_handler(), unhandled_exception_handler(), BaseHTTPMiddleware (+136 more)
|
||||
Cohesion: 0.03
|
||||
Nodes (129): get_next_cell_product_code(), _ancestor_link_from_cell_product_input(), _ancestor_sample_chain_link(), _apply_cell_product_status_change(), _build_ancestor_chain(), _build_descendant_chain(), _build_facility_path_label(), build_split_product_codes() (+121 more)
|
||||
|
||||
### Community 10 - "Community 10"
|
||||
Cohesion: 0.02
|
||||
Nodes (130): 小程序鉴权:微信登录 / 绑定 openid。, 微信授权登录:须授权手机号;openid 已绑定也须与账号 phone_no 一致。, 密码登录后绑定当前微信 openid(需 Bearer)。, _resolve_user_id(), wechat_bind(), wechat_login(), _build_current_user_payload(), cn_holiday_range() (+122 more)
|
||||
Cohesion: 0.03
|
||||
Nodes (110): 小程序鉴权:微信登录 / 绑定 openid。, 微信授权登录:须授权手机号;openid 已绑定也须与账号 phone_no 一致。, 密码登录后绑定当前微信 openid(需 Bearer)。, _resolve_user_id(), wechat_bind(), wechat_login(), _collect_descendants(), _current_user() (+102 more)
|
||||
|
||||
### Community 11 - "Community 11"
|
||||
Cohesion: 0.04
|
||||
Nodes (93): _fmt_dt(), get_handover_by_schedule(), get_outbound_handover(), get_outbound_handover_view(), _handover_row_to_dict(), _handover_view_dict(), _parse_handover_time(), 供输注计划 detail 聚合的交接只读信息。 (+85 more)
|
||||
Nodes (104): _body_to_payload(), _get_current_user_id(), get_production_reception_by_sample_code(), get_production_reception_detail(), _get_tenant_no(), post_production_reception(), put_production_reception(), _resolve_reception_id() (+96 more)
|
||||
|
||||
### Community 12 - "Community 12"
|
||||
Cohesion: 0.06
|
||||
Nodes (71): add_task_step(), _aggregate_production_tab_step_field(), assert_step_assignee_for_write(), assert_task_assignee(), assert_task_step_assignee_or_legacy(), _batch_load_step_sub_tables(), _clone_route_to_task(), _clone_step_consumables() (+63 more)
|
||||
Cohesion: 0.05
|
||||
Nodes (113): AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody, list_storage_slot_stats(), OccupancyCreateBody (+105 more)
|
||||
|
||||
### Community 13 - "Community 13"
|
||||
Cohesion: 0.06
|
||||
Nodes (66): aggregate_slot_stats_by_facility(), _apply_slot_select_base_filters(), _apply_slot_select_query_filters(), batch_create_facilities(), batch_create_slots(), _build_node_path_cache(), _build_slot_keyword_sql_filters(), collect_descendant_ids() (+58 more)
|
||||
Cohesion: 0.04
|
||||
Nodes (102): _filter_material_type(), _amount_for_row(), _batch_map(), _deduct_step_usage_legacy_batch(), _display_remark(), _fmt_date_val(), list_available_requisitions_for_prep(), list_linked_step_usages() (+94 more)
|
||||
|
||||
### Community 14 - "Community 14"
|
||||
Cohesion: 0.09
|
||||
Nodes (41): _ancestor_link_from_cell_product_input(), _ancestor_sample_chain_link(), _build_ancestor_chain(), _build_descendant_chain(), _build_facility_path_label(), build_split_product_codes(), create_cell_products_by_quantity(), delete_cell_product() (+33 more)
|
||||
Cohesion: 0.45
|
||||
Nodes (71): BatchStockInBody, BatchStockInItem, BatchStockOutBody, BatchStockOutItem, ConsumableCreateBody, ConsumablePackCreateBody, ConsumablePackUpdateBody, ConsumableUpdateBody (+63 more)
|
||||
|
||||
### Community 15 - "Community 15"
|
||||
Cohesion: 0.09
|
||||
Nodes (50): complete_application(), create_basic_experiment_sale_schedules(), create_infusion_plan(), create_schedule(), _create_schedule_products(), _format_yyyy_mm_dd(), _generate_application_no(), get_application() (+42 more)
|
||||
|
||||
### Community 16 - "Community 16"
|
||||
Cohesion: 0.12
|
||||
Nodes (11): get_wechat_pay_client(), get_wechat_pay_v2(), 微信支付工具模块 支持微信支付 V3 API 文档参考: https://pay.weixin.qq.com/docs/v3/apis/index.ht, 统一下单接口 (V3) Args: out_trade_no: 商户订单号 total, 申请退款 Args: out_trade_no: 商户订单号 total_amount, 小程序调起支付的二次签名参数(与公众号 JSAPI 规则一致), 统一下单 (V2 API) Args: out_trade_no: 商户订单号 tot, 生成签名 V3 (SHA256 with RSA) (+3 more)
|
||||
|
||||
### Community 16 - "Community 16"
|
||||
### Community 17 - "Community 17"
|
||||
Cohesion: 0.14
|
||||
Nodes (11): apply_formulas_and_linkages(), eval_formula(), _extract_rules(), preprocess_formula(), OA 表单公式与数据联动(禁止任意 eval), 按 schema 中字段 props.formula / props.linkage 回填 form_data。 linkage 示例: { "when, 将 {field} 转为合法标识符引用 field。, _SafeEval (+3 more)
|
||||
|
||||
### Community 17 - "Community 17"
|
||||
Cohesion: 0.19
|
||||
Nodes (21): apply_overtime_kit_hours(), _build_rest_day_segments(), _build_workday_windows(), calc_overtime_hours(), _day_at_minutes(), _day_start_ms(), _extract_rules(), _format_ymd() (+13 more)
|
||||
|
||||
### Community 18 - "Community 18"
|
||||
Cohesion: 0.17
|
||||
Nodes (19): get_by_schedule(), get_method(), _get_tenant_no(), list_by_application(), list_materials(), 中试服务交付管理 API(交付信息、交付物料、交付方式), soft_delete(), create_delivery() (+11 more)
|
||||
Nodes (19): batch_create_checkups(), create_checkup(), delete_actual_item(), delete_reserve_item(), get_checkup_by_application(), get_checkup_by_id(), list_actual_items(), list_checkups_paginated() (+11 more)
|
||||
|
||||
### Community 19 - "Community 19"
|
||||
Cohesion: 0.21
|
||||
@@ -164,12 +164,12 @@ Cohesion: 0.2
|
||||
Nodes (19): _code_exists(), create_material(), _dec(), _fmt_dt(), get_material(), get_material_entity(), get_my_usages(), _is_enabled_status() (+11 more)
|
||||
|
||||
### Community 21 - "Community 21"
|
||||
Cohesion: 0.27
|
||||
Nodes (12): create_equipment(), _dec(), equipment_code_exists(), equipment_is_referenced(), get_equipment(), list_equipments(), _norm_status(), _parse_date() (+4 more)
|
||||
Cohesion: 0.18
|
||||
Nodes (18): company_code_exists(), create_company(), get_company(), list_companies(), list_company_options(), _row_to_dict(), soft_delete_company(), update_company() (+10 more)
|
||||
|
||||
### Community 22 - "Community 22"
|
||||
Cohesion: 0.23
|
||||
Nodes (12): Config, ProductBase, ProductCategoryBase, ProductCategoryCreate, ProductCategoryResponse, ProductCreate, ProductResponse, ProductUnitBase (+4 more)
|
||||
Cohesion: 0.27
|
||||
Nodes (12): create_equipment(), _dec(), equipment_code_exists(), equipment_is_referenced(), get_equipment(), list_equipments(), _norm_status(), _parse_date() (+4 more)
|
||||
|
||||
### Community 23 - "Community 23"
|
||||
Cohesion: 0.24
|
||||
@@ -284,17 +284,17 @@ Nodes (1): 发送催单通知给配送员 Args: del
|
||||
## Suggested Questions
|
||||
_Questions this graph is uniquely positioned to answer:_
|
||||
|
||||
- **Why does `SysUser` connect `Community 2` to `Community 1`, `Community 3`, `Community 5`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 18`, `Community 23`, `Community 24`?**
|
||||
_High betweenness centrality (0.109) - this node is a cross-community bridge._
|
||||
- **Why does `generate_uuid()` connect `Community 1` to `Community 0`, `Community 4`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 19`, `Community 20`, `Community 21`, `Community 23`, `Community 24`, `Community 25`?**
|
||||
_High betweenness centrality (0.043) - this node is a cross-community bridge._
|
||||
- **Why does `success_response()` connect `Community 0` to `Community 32`, `Community 2`, `Community 4`, `Community 8`, `Community 9`, `Community 10`, `Community 18`?**
|
||||
- **Why does `SysUser` connect `Community 2` to `Community 0`, `Community 1`, `Community 3`, `Community 4`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 12`, `Community 13`, `Community 14`, `Community 23`, `Community 24`?**
|
||||
_High betweenness centrality (0.114) - this node is a cross-community bridge._
|
||||
- **Why does `generate_uuid()` connect `Community 1` to `Community 0`, `Community 4`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 19`, `Community 20`, `Community 21`, `Community 22`, `Community 23`, `Community 24`, `Community 25`?**
|
||||
_High betweenness centrality (0.042) - this node is a cross-community bridge._
|
||||
- **Are the 877 inferred relationships involving `str` (e.g. with `unhandled_exception_handler()` and `get_current_user_by_token()`) actually correct?**
|
||||
_`str` has 877 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 734 inferred relationships involving `success_response()` (e.g. with `list_storage_release_reviews()` and `get_storage_release_review_detail()`) actually correct?**
|
||||
_`success_response()` has 734 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 607 inferred relationships involving `error_response()` (e.g. with `_json_error_response()` and `list_storage_release_reviews()`) actually correct?**
|
||||
_`error_response()` has 607 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Why does `success_response()` connect `Community 0` to `Community 32`, `Community 2`, `Community 5`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`?**
|
||||
_High betweenness centrality (0.040) - this node is a cross-community bridge._
|
||||
- **Are the 879 inferred relationships involving `str` (e.g. with `unhandled_exception_handler()` and `get_current_user_by_token()`) actually correct?**
|
||||
_`str` has 879 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 735 inferred relationships involving `success_response()` (e.g. with `list_storage_release_reviews()` and `get_storage_release_review_detail()`) actually correct?**
|
||||
_`success_response()` has 735 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 608 inferred relationships involving `error_response()` (e.g. with `_json_error_response()` and `list_storage_release_reviews()`) actually correct?**
|
||||
_`error_response()` has 608 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 596 inferred relationships involving `SysUser` (e.g. with `数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3` and `从 SysUser 读取用户的 dept_id。`) actually correct?**
|
||||
_`SysUser` has 596 INFERRED edges - model-reasoned connections that need verification._
|
||||
+2283
-1800
File diff suppressed because it is too large.
Load diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/__init__.py": 1778578257.989357,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/main.py": 1786374025.1465516,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/main.py": 1786426758.368078,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/tasks/__init__.py": 1778579841.437791,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py": 1786415793.4635684,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/core/api_crypto.py": 1778578258.039314,
|
||||
@@ -184,6 +184,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py": 1786374022.5691514,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/material.py": 1782894693.6582327,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/production_material.py": 1782404982.2474263,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/mini_menu.py": 1786438411.2164767,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py": 1785207187.402777,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/market.py": 1781522283.6823432,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/sample_production_reception.py": 1782718998.90251,
|
||||
@@ -192,7 +193,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py": 1782709076.3968658,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_infusion_confirm.py": 1779657043.1389203,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_infusion_schedule_mgmt.py": 1779940938.18027,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py": 1786350194.7209065,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py": 1786426755.6367717,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/storage_entry_sms_notification.py": 1780325524.9170487,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_application.py": 1781079904.0516074,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py": 1782204426.7965167,
|
||||
|
||||
Reference in new issue
Block a user