This commit is contained in:
zlwu committed 2026-07-30 15:02:13 +08:00
1 parent f7d1004e6b
commit 310b2efe8a
91 files changed
+14420 -10840

No files matched your search

+1 -1
View File
@@ -1 +1 @@
112
65787
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_engine_py", "label": "oa_engine.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L1"}, {"id": "services_oa_engine_oaengineerror", "label": "OaEngineError", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L29"}, {"id": "valueerror", "label": "ValueError", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "services_oa_engine_loads", "label": "_loads()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L38"}, {"id": "services_oa_engine_dumps", "label": "_dumps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L49"}, {"id": "services_oa_engine_normalize_initiator_select_by_node", "label": "_normalize_initiator_select_by_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L53"}, {"id": "services_oa_engine_ids_for_initiator_select_node", "label": "_ids_for_initiator_select_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L72"}, {"id": "services_oa_engine_load_initiator_select_by_node", "label": "_load_initiator_select_by_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L82"}, {"id": "services_oa_engine_node_type", "label": "_node_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L88"}, {"id": "services_oa_engine_subtree_contains", "label": "_subtree_contains()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L92"}, {"id": "services_oa_engine_merge_after_branch_end", "label": "_merge_after_branch_end()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L107"}, {"id": "services_oa_engine_flow_root", "label": "_flow_root()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L134"}, {"id": "services_oa_engine_find_node", "label": "_find_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L142"}, {"id": "services_oa_engine_flow_node_key_order", "label": "_flow_node_key_order()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L160"}, {"id": "services_oa_engine_next_task_order_num", "label": "_next_task_order_num()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L185"}, {"id": "services_oa_engine_sort_tasks_for_detail", "label": "_sort_tasks_for_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L196"}, {"id": "services_oa_engine_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L216"}, {"id": "services_oa_engine_terminal_item", "label": "_terminal_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L224"}, {"id": "services_oa_engine_task_round", "label": "_task_round()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L239"}, {"id": "services_oa_engine_append_pending_nodes", "label": "_append_pending_nodes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L249"}, {"id": "services_oa_engine_pending_people_for_node", "label": "_pending_people_for_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L289"}, {"id": "services_oa_engine_iter_resolved_path_nodes", "label": "_iter_resolved_path_nodes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L355"}, {"id": "services_oa_engine_append_pending_nodes_on_path", "label": "_append_pending_nodes_on_path()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L393"}, {"id": "services_oa_engine_progress_person", "label": "_progress_person()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backenLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_oa_approval_py", "label": "oa_approval.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L1"}, {"id": "api_oa_approval_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L19"}, {"id": "api_oa_approval_oarolecreatebody", "label": "OaRoleCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L36"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_oa_approval_oaroleupdatebody", "label": "OaRoleUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L45"}, {"id": "api_oa_approval_oaroleusersbody", "label": "OaRoleUsersBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L53"}, {"id": "api_oa_approval_list_oa_roles", "label": "list_oa_roles()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L59"}, {"id": "api_oa_approval_ensure_oa_role_presets", "label": "ensure_oa_role_presets()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L71"}, {"id": "api_oa_approval_create_oa_role", "label": "create_oa_role()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L84"}, {"id": "api_oa_approval_update_oa_role", "label": "update_oa_role()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L107"}, {"id": "api_oa_approval_delete_oa_role", "label": "delete_oa_role()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L132"}, {"id": "api_oa_approval_list_oa_role_users", "label": "list_oa_role_users()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L146"}, {"id": "api_oa_approval_replace_oa_role_users", "label": "replace_oa_role_users()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L158"}, {"id": "api_oa_approval_oareceiveaccountbody", "label": "OaReceiveAccountBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L186"}, {"id": "api_oa_approval_oareceiveaccountbatchdeletebody", "label": "OaReceiveAccountBatchDeleteBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L199"}, {"id": "api_oa_approval_list_receive_accounts", "label": "list_receive_accounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L205"}, {"id": "api_oa_approval_list_receive_account_options", "label": "list_receive_account_options()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L226"}, {"id": "api_oa_approval_batch_delete_receive_accounts", "label": "batch_delete_receive_accounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L235"}, {"id": "api_oa_approval_create_receive_account", "label": "create_receive_account()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L248"}, {"id": "api_oa_approval_get_receive_account", "label": "get_receive_account()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L268"}, {"id": "api_oa_approval_update_receive_account", "label": "update_receive_account()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L281"}, {"id": "api_oa_approval_delete_receive_account", "label": "delete_receive_account()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L304"}, {"id": "api_oa_approval_oagroupcreatebody", "label": "OaGroupCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L322"}, {"id": "api_oa_approval_oagroupupdatebody", "label": "OaGroupUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/oa_approval.py", "source_location": "L329"}, {"id": "api_oa_apprLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_engine_py", "label": "oa_engine.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L1"}, {"id": "services_oa_engine_oaengineerror", "label": "OaEngineError", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L34"}, {"id": "valueerror", "label": "ValueError", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "services_oa_engine_loads", "label": "_loads()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L43"}, {"id": "services_oa_engine_dumps", "label": "_dumps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L54"}, {"id": "services_oa_engine_normalize_initiator_select_by_node", "label": "_normalize_initiator_select_by_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L58"}, {"id": "services_oa_engine_ids_for_initiator_select_node", "label": "_ids_for_initiator_select_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L77"}, {"id": "services_oa_engine_load_initiator_select_by_node", "label": "_load_initiator_select_by_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L87"}, {"id": "services_oa_engine_node_type", "label": "_node_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L93"}, {"id": "services_oa_engine_subtree_contains", "label": "_subtree_contains()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L97"}, {"id": "services_oa_engine_merge_after_branch_end", "label": "_merge_after_branch_end()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L112"}, {"id": "services_oa_engine_flow_root", "label": "_flow_root()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L139"}, {"id": "services_oa_engine_find_node", "label": "_find_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L147"}, {"id": "services_oa_engine_flow_node_key_order", "label": "_flow_node_key_order()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L165"}, {"id": "services_oa_engine_next_task_order_num", "label": "_next_task_order_num()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L190"}, {"id": "services_oa_engine_sort_tasks_for_detail", "label": "_sort_tasks_for_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L201"}, {"id": "services_oa_engine_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L221"}, {"id": "services_oa_engine_terminal_item", "label": "_terminal_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L229"}, {"id": "services_oa_engine_task_round", "label": "_task_round()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L244"}, {"id": "services_oa_engine_append_pending_nodes", "label": "_append_pending_nodes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L254"}, {"id": "services_oa_engine_pending_people_for_node", "label": "_pending_people_for_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L294"}, {"id": "services_oa_engine_iter_resolved_path_nodes", "label": "_iter_resolved_path_nodes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L386"}, {"id": "services_oa_engine_append_pending_nodes_on_path", "label": "_append_pending_nodes_on_path()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L424"}, {"id": "services_oa_engine_progress_person", "label": "_progress_person()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backenLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_receive_account_py", "label": "oa_receive_account.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L1"}, {"id": "services_oa_receive_account_walk_rules", "label": "_walk_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L17"}, {"id": "services_oa_receive_account_schema_rules", "label": "_schema_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L29"}, {"id": "services_oa_receive_account_rule_props", "label": "_rule_props()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L41"}, {"id": "services_oa_receive_account_field_label", "label": "_field_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L46"}, {"id": "services_oa_receive_account_is_required", "label": "_is_required()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L50"}, {"id": "services_oa_receive_account_pick", "label": "_pick()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L61"}, {"id": "services_oa_receive_account_pick_str", "label": "_pick_str()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L69"}, {"id": "services_oa_receive_account_normalize_account_fields", "label": "normalize_account_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L76"}, {"id": "services_oa_receive_account_is_non_empty_str", "label": "_is_non_empty_str()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L119"}, {"id": "services_oa_receive_account_is_valid_receive_account_item", "label": "_is_valid_receive_account_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L123"}, {"id": "services_oa_receive_account_validate_receive_account_rule", "label": "_validate_receive_account_rule()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L151"}, {"id": "services_oa_receive_account_validate_receive_account_form_values", "label": "validate_receive_account_form_values()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L178"}, {"id": "services_oa_receive_account_rationale_1", "label": "OA \u8868\u5355\u8bbe\u8ba1\u5668\uff1a\u6536\u6b3e\u8d26\u6237\u63a7\u4ef6 form_data \u6821\u9a8c + \u8d26\u6237\u5b57\u6bb5\u89c4\u8303\u5316", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L1"}, {"id": "services_oa_receive_account_rationale_77", "label": "\u89c4\u8303\u5316\u6536\u6b3e\u8d26\u6237\u5199\u5165\u5b57\u6bb5\uff0c\u8fd4\u56de (ok, error, snake_case dict)\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L77"}, {"id": "services_oa_receive_account_rationale_181", "label": "\u6821\u9a8c form_data \u4e2d\u6536\u6b3e\u8d26\u6237\u63a7\u4ef6\u7684\u503c\u683c\u5f0f\uff0c\u8fd4\u56de\u4e2d\u6587\u9519\u8bef\u5217\u8868\uff08\u7a7a\u8868\u793a\u901a\u8fc7\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L181"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_receive_account_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_receive_account_py", "target": "services_oa_receive_account_walk_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L17", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_receive_account_py", "target": "services_oa_receive_account_schema_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_engine_py", "label": "oa_engine.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L1"}, {"id": "services_oa_engine_oaengineerror", "label": "OaEngineError", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L34"}, {"id": "valueerror", "label": "ValueError", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "services_oa_engine_loads", "label": "_loads()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L43"}, {"id": "services_oa_engine_dumps", "label": "_dumps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L54"}, {"id": "services_oa_engine_normalize_initiator_select_by_node", "label": "_normalize_initiator_select_by_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L58"}, {"id": "services_oa_engine_ids_for_initiator_select_node", "label": "_ids_for_initiator_select_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L77"}, {"id": "services_oa_engine_load_initiator_select_by_node", "label": "_load_initiator_select_by_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L87"}, {"id": "services_oa_engine_node_type", "label": "_node_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L93"}, {"id": "services_oa_engine_subtree_contains", "label": "_subtree_contains()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L97"}, {"id": "services_oa_engine_merge_after_branch_end", "label": "_merge_after_branch_end()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L112"}, {"id": "services_oa_engine_flow_root", "label": "_flow_root()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L139"}, {"id": "services_oa_engine_find_node", "label": "_find_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L147"}, {"id": "services_oa_engine_flow_node_key_order", "label": "_flow_node_key_order()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L165"}, {"id": "services_oa_engine_next_task_order_num", "label": "_next_task_order_num()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L190"}, {"id": "services_oa_engine_sort_tasks_for_detail", "label": "_sort_tasks_for_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L201"}, {"id": "services_oa_engine_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L221"}, {"id": "services_oa_engine_terminal_item", "label": "_terminal_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L229"}, {"id": "services_oa_engine_task_round", "label": "_task_round()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L244"}, {"id": "services_oa_engine_append_pending_nodes", "label": "_append_pending_nodes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L254"}, {"id": "services_oa_engine_pending_people_for_node", "label": "_pending_people_for_node()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L294"}, {"id": "services_oa_engine_iter_resolved_path_nodes", "label": "_iter_resolved_path_nodes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L386"}, {"id": "services_oa_engine_append_pending_nodes_on_path", "label": "_append_pending_nodes_on_path()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py", "source_location": "L424"}, {"id": "services_oa_engine_progress_person", "label": "_progress_person()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backenLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "label": "oa_publish.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L1"}, {"id": "services_oa_publish_extract_rules", "label": "_extract_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L86"}, {"id": "services_oa_publish_walk_form_rules", "label": "_walk_form_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L101"}, {"id": "services_oa_publish_count_fillable_fields", "label": "count_fillable_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L109"}, {"id": "services_oa_publish_rule_use_in_condition", "label": "_rule_use_in_condition()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L123"}, {"id": "services_oa_publish_index_condition_fields", "label": "index_condition_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L130"}, {"id": "services_oa_publish_normalize_use_in_condition_required", "label": "normalize_use_in_condition_required()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L145"}, {"id": "services_oa_publish_node_type", "label": "_node_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L173"}, {"id": "services_oa_publish_validate_flow_tree", "label": "validate_flow_tree()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L177"}, {"id": "services_oa_publish_validate_condition_rules_against_form", "label": "validate_condition_rules_against_form()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L312"}, {"id": "services_oa_publish_validate_oa_roles_referenced", "label": "validate_oa_roles_referenced()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L359"}, {"id": "services_oa_publish_validate_control_types", "label": "validate_control_types()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L428"}, {"id": "services_oa_publish_validate_draft_for_publish", "label": "validate_draft_for_publish()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L444"}, {"id": "services_oa_publish_publish_app", "label": "publish_app()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L469"}, {"id": "services_oa_publish_rationale_131", "label": "field -> rule\uff08\u4ec5 useInCondition \u4e14 type \u5408\u683c\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L131"}, {"id": "services_oa_publish_rationale_146", "label": "\u5c31\u5730/\u6df1\u62f7\u8d1d\u7686\u53ef\uff1a\u6253\u6807\u5b57\u6bb5\u5f3a\u5236 required/$required\u3002\u53d1\u5e03\u524d\u8c03\u7528\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L146"}, {"id": "services_oa_publish_rationale_476", "label": "\u6821\u9a8c\u5e76\u53d1\u5e03\u5f53\u524d\u8349\u7a3f\u3002 \u6210\u529f\u8fd4\u56de (draft_dict_like_published_info, [])\uff1b \u5931\u8d25\u8fd4\u56de ({}, errors)\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L476"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L8"Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "label": "oa_publish.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L1"}, {"id": "services_oa_publish_extract_rules", "label": "_extract_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L93"}, {"id": "services_oa_publish_walk_form_rules", "label": "_walk_form_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L108"}, {"id": "services_oa_publish_count_fillable_fields", "label": "count_fillable_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L116"}, {"id": "services_oa_publish_rule_use_in_condition", "label": "_rule_use_in_condition()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L130"}, {"id": "services_oa_publish_index_condition_fields", "label": "index_condition_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L137"}, {"id": "services_oa_publish_normalize_use_in_condition_required", "label": "normalize_use_in_condition_required()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L152"}, {"id": "services_oa_publish_node_type", "label": "_node_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L180"}, {"id": "services_oa_publish_validate_flow_tree", "label": "validate_flow_tree()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L184"}, {"id": "services_oa_publish_validate_condition_rules_against_form", "label": "validate_condition_rules_against_form()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L299"}, {"id": "services_oa_publish_validate_oa_roles_referenced", "label": "validate_oa_roles_referenced()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L346"}, {"id": "services_oa_publish_validate_control_types", "label": "validate_control_types()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L415"}, {"id": "services_oa_publish_validate_draft_for_publish", "label": "validate_draft_for_publish()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L431"}, {"id": "services_oa_publish_publish_app", "label": "publish_app()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L456"}, {"id": "services_oa_publish_rationale_138", "label": "field -> rule\uff08\u4ec5 useInCondition \u4e14 type \u5408\u683c\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L138"}, {"id": "services_oa_publish_rationale_153", "label": "\u5c31\u5730/\u6df1\u62f7\u8d1d\u7686\u53ef\uff1a\u6253\u6807\u5b57\u6bb5\u5f3a\u5236 required/$required\u3002\u53d1\u5e03\u524d\u8c03\u7528\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L153"}, {"id": "services_oa_publish_rationale_463", "label": "\u6821\u9a8c\u5e76\u53d1\u5e03\u5f53\u524d\u8349\u7a3f\u3002 \u6210\u529f\u8fd4\u56de (draft_dict_like_published_info, [])\uff1b \u5931\u8d25\u8fd4\u56de ({}, errors)\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L463"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L8"Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "label": "oa_publish.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L1"}, {"id": "services_oa_publish_extract_rules", "label": "_extract_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L84"}, {"id": "services_oa_publish_walk_form_rules", "label": "_walk_form_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L99"}, {"id": "services_oa_publish_count_fillable_fields", "label": "count_fillable_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L107"}, {"id": "services_oa_publish_rule_use_in_condition", "label": "_rule_use_in_condition()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L121"}, {"id": "services_oa_publish_index_condition_fields", "label": "index_condition_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L128"}, {"id": "services_oa_publish_normalize_use_in_condition_required", "label": "normalize_use_in_condition_required()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L143"}, {"id": "services_oa_publish_node_type", "label": "_node_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L171"}, {"id": "services_oa_publish_validate_flow_tree", "label": "validate_flow_tree()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L175"}, {"id": "services_oa_publish_validate_condition_rules_against_form", "label": "validate_condition_rules_against_form()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L310"}, {"id": "services_oa_publish_validate_oa_roles_referenced", "label": "validate_oa_roles_referenced()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L357"}, {"id": "services_oa_publish_validate_control_types", "label": "validate_control_types()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L426"}, {"id": "services_oa_publish_validate_draft_for_publish", "label": "validate_draft_for_publish()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L442"}, {"id": "services_oa_publish_publish_app", "label": "publish_app()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L467"}, {"id": "services_oa_publish_rationale_129", "label": "field -> rule\uff08\u4ec5 useInCondition \u4e14 type \u5408\u683c\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L129"}, {"id": "services_oa_publish_rationale_144", "label": "\u5c31\u5730/\u6df1\u62f7\u8d1d\u7686\u53ef\uff1a\u6253\u6807\u5b57\u6bb5\u5f3a\u5236 required/$required\u3002\u53d1\u5e03\u524d\u8c03\u7528\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L144"}, {"id": "services_oa_publish_rationale_474", "label": "\u6821\u9a8c\u5e76\u53d1\u5e03\u5f53\u524d\u8349\u7a3f\u3002 \u6210\u529f\u8fd4\u56de (draft_dict_like_published_info, [])\uff1b \u5931\u8d25\u8fd4\u56de ({}, errors)\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L474"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_publish_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py", "source_location": "L8",Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_post_select_py", "label": "oa_post_select.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L1"}, {"id": "services_oa_post_select_walk_rules", "label": "_walk_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L7"}, {"id": "services_oa_post_select_schema_rules", "label": "_schema_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L19"}, {"id": "services_oa_post_select_rule_props", "label": "_rule_props()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L31"}, {"id": "services_oa_post_select_field_label", "label": "_field_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L36"}, {"id": "services_oa_post_select_is_required", "label": "_is_required()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L40"}, {"id": "services_oa_post_select_is_multiple", "label": "_is_multiple()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L51"}, {"id": "services_oa_post_select_max_count", "label": "_max_count()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L59"}, {"id": "services_oa_post_select_is_valid_post_item", "label": "_is_valid_post_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L72"}, {"id": "services_oa_post_select_validate_post_rule", "label": "_validate_post_rule()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L84"}, {"id": "services_oa_post_select_validate_post_form_values", "label": "validate_post_form_values()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L127"}, {"id": "services_oa_post_select_extract_post_ids", "label": "extract_post_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L138"}, {"id": "services_oa_post_select_post_contains_match", "label": "post_contains_match()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L150"}, {"id": "services_oa_post_select_rationale_1", "label": "OA \u8868\u5355\u8bbe\u8ba1\u5668\uff1a\u804c\u4f4d\u9009\u62e9\u63a7\u4ef6 form_data \u6821\u9a8c", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L1"}, {"id": "services_oa_post_select_rationale_128", "label": "\u6821\u9a8c form_data \u4e2d\u804c\u4f4d\u9009\u62e9\u63a7\u4ef6\u7684\u503c\u683c\u5f0f\uff0c\u8fd4\u56de\u4e2d\u6587\u9519\u8bef\u5217\u8868\uff08\u7a7a\u8868\u793a\u901a\u8fc7\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L128"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_post_select_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_post_select_py", "target": "services_oa_post_select_walk_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_post_select_py", "target": "services_oa_post_select_schema_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L19", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_post_select_py", "target": "services_oa_post_select_rule_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py", "source_location": "L31", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_post_select_py", "target": "services_oa_post_select_field_label", "relation": "contains", "confidence": "EXTRACTED", "sLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_assignee_py", "label": "oa_assignee.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L1"}, {"id": "services_oa_assignee_assigneeresolveerror", "label": "AssigneeResolveError", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L12"}, {"id": "valueerror", "label": "ValueError", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "services_oa_assignee_normalize_cc_assignee_types", "label": "normalize_cc_assignee_types()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L27"}, {"id": "services_oa_assignee_resolve_cc_assignees", "label": "resolve_cc_assignees()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L45"}, {"id": "services_oa_assignee_active_user_id", "label": "_active_user_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L103"}, {"id": "services_oa_assignee_resolve_dept_leader", "label": "resolve_dept_leader()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L120"}, {"id": "services_oa_assignee_resolve_direct_supervisor", "label": "resolve_direct_supervisor()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L139"}, {"id": "services_oa_assignee_resolve_assignees", "label": "resolve_assignees()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L174"}, {"id": "services_oa_assignee_rationale_1", "label": "OA \u5ba1\u6279\u4eba\u89e3\u6790\uff08\u4e0d\u8bfb sys_role\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L1"}, {"id": "services_oa_assignee_rationale_55", "label": "\u6284\u9001\u591a\u7b56\u7565\u8f6f\u5e76\u96c6\uff1a\u5355\u7b56\u7565\u5931\u8d25/\u7a7a\u5219\u8df3\u8fc7\uff1b\u5168\u90e8\u65e0\u4eba\u8fd4\u56de []\uff0c\u4e0d\u629b\u9519\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L55"}, {"id": "services_oa_assignee_rationale_184", "label": "\u6309\u8282\u70b9 approverConfig \u89e3\u6790\u5904\u7406\u4eba\u3002 assigneeType: users | oa_roles | dept_leader | dir", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L184"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_assignee_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_assignee_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_assignee_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_assignee_py", "target": "app_models_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_assignee_py", "target": "services_oa_assignee_assigneeresolveerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L12", "weight": 1.0}, {"source": "services_oa_assignee_assigneeresolveerror", "target": "valueerror", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_assignee_py", "target": "services_oa_assignee_normalize_cc_assignee_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py", "source_location": "L27", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_models_models_py", "label": "models.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L1"}, {"id": "models_models_userrole", "label": "UserRole", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L10"}, {"id": "str", "label": "str", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "models_models_sysuser", "label": "SysUser", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L22"}, {"id": "base", "label": "Base", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "models_models_sysrole", "label": "SysRole", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L49"}, {"id": "models_models_sysuserrole", "label": "SysUserRole", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L69"}, {"id": "models_models_sysrolemenu", "label": "SysRoleMenu", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L88"}, {"id": "models_models_sysroledatascopedetail", "label": "SysRoleDataScopeDetail", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L107"}, {"id": "models_models_sysmenu", "label": "SysMenu", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L127"}, {"id": "models_models_sysdept", "label": "SysDept", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L153"}, {"id": "models_models_systenant", "label": "SysTenant", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L177"}, {"id": "models_models_syssite", "label": "SysSite", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L197"}, {"id": "models_models_syspost", "label": "SysPost", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L223"}, {"id": "models_models_sysuserpost", "label": "SysUserPost", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L243"}, {"id": "models_models_bizitemunit", "label": "BizItemUnit", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L262"}, {"id": "models_models_bizexpresscompany", "label": "BizExpressCompany", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L281"}, {"id": "models_models_bizcustomer", "label": "BizCustomer", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L301"}, {"id": "models_models_bizcellsampletype", "label": "BizCellSampleType", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L324"}, {"id": "models_models_bizcollectionregion", "label": "BizCollectionRegion", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L347"}, {"id": "models_models_bizcollectionhospital", "label": "BizCollectionHospital", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L365"}, {"id": "models_models_bizcollectionprotocolno", "label": "BizCollectionProtocolNo", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L384"}, {"id": "models_models_bizbiznosequence", "label": "BizBizNoSequence", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L406"}, {"id": "models_models_bizsamplecode", "label": "BizSampleCode", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L426"}, {"id": "models_models_sysdicttype", "label": "SysDictType", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L454"}, {"id": "models_models_sysethnic", "label": "SysEthnic", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location": "L473"}, {"id": "models_models_sysdictdata", "label": "SysDictData", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/models/models.py", "source_location"Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_oa_receive_account_py", "label": "oa_receive_account.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L1"}, {"id": "crud_oa_receive_account_row_to_dict", "label": "row_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L14"}, {"id": "crud_oa_receive_account_filtered_query", "label": "_filtered_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L32"}, {"id": "crud_oa_receive_account_list_accounts", "label": "list_accounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L58"}, {"id": "crud_oa_receive_account_list_options", "label": "list_options()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L80"}, {"id": "crud_oa_receive_account_get_account", "label": "get_account()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L90"}, {"id": "crud_oa_receive_account_create_account", "label": "create_account()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L103"}, {"id": "crud_oa_receive_account_update_account", "label": "update_account()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L137"}, {"id": "crud_oa_receive_account_soft_delete_account", "label": "soft_delete_account()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L174"}, {"id": "crud_oa_receive_account_soft_delete_accounts", "label": "soft_delete_accounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L196"}, {"id": "crud_oa_receive_account_rationale_1", "label": "OA \u6536\u6b3e\u8d26\u6237 CRUD\uff08oa_receive_account\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_oa_receive_account_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_oa_receive_account_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_oa_receive_account_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_oa_receive_account_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_oa_receive_account_py", "target": "app_core_utils", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_oa_receive_account_py", "target": "app_models_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_oa_receive_account_py", "target": "crud_oa_receive_account_row_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_oa_receive_account_py", "target": "crud_oa_receive_account_filtered_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/oa_receive_account.py", "source_location": "L32", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_oa_receive_account_py", "targeLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_receive_account_py", "label": "oa_receive_account.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L1"}, {"id": "services_oa_receive_account_walk_rules", "label": "_walk_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L16"}, {"id": "services_oa_receive_account_schema_rules", "label": "_schema_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L28"}, {"id": "services_oa_receive_account_rule_props", "label": "_rule_props()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L40"}, {"id": "services_oa_receive_account_field_label", "label": "_field_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L45"}, {"id": "services_oa_receive_account_is_required", "label": "_is_required()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L49"}, {"id": "services_oa_receive_account_pick", "label": "_pick()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L60"}, {"id": "services_oa_receive_account_pick_str", "label": "_pick_str()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L68"}, {"id": "services_oa_receive_account_pick_order_num", "label": "_pick_order_num()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L75"}, {"id": "services_oa_receive_account_normalize_account_fields", "label": "normalize_account_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L89"}, {"id": "services_oa_receive_account_is_non_empty_str", "label": "_is_non_empty_str()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L132"}, {"id": "services_oa_receive_account_is_valid_receive_account_item", "label": "_is_valid_receive_account_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L136"}, {"id": "services_oa_receive_account_validate_receive_account_rule", "label": "_validate_receive_account_rule()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L164"}, {"id": "services_oa_receive_account_validate_receive_account_form_values", "label": "validate_receive_account_form_values()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L191"}, {"id": "services_oa_receive_account_rationale_1", "label": "OA \u8868\u5355\u8bbe\u8ba1\u5668\uff1a\u6536\u6b3e\u8d26\u6237\u63a7\u4ef6 form_data \u6821\u9a8c + \u8d26\u6237\u5b57\u6bb5\u89c4\u8303\u5316", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L1"}, {"id": "services_oa_receive_account_rationale_90", "label": "\u89c4\u8303\u5316\u6536\u6b3e\u8d26\u6237\u5199\u5165\u5b57\u6bb5\uff0c\u8fd4\u56de (ok, error, snake_case dict)\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L90"}, {"id": "services_oa_receive_account_rationale_194", "label": "\u6821\u9a8c form_data \u4e2d\u6536\u6b3e\u8d26\u6237\u63a7\u4ef6\u7684\u503c\u683c\u5f0f\uff0c\u8fd4\u56de\u4e2d\u6587\u9519\u8bef\u5217\u8868\uff08\u7a7a\u8868\u793a\u901a\u8fc7\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L194"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_receive_account_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_receive_account_py", "target": "services_oa_receive_account_walk_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py", "source_location": "L16", "weight": 1.0}, {"source": "uLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_related_approval_py", "label": "oa_related_approval.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L1"}, {"id": "services_oa_related_approval_walk_rules", "label": "_walk_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L16"}, {"id": "services_oa_related_approval_schema_rules", "label": "_schema_rules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L28"}, {"id": "services_oa_related_approval_extract_upload_urls", "label": "_extract_upload_urls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L40"}, {"id": "services_oa_related_approval_normalize_related_ids", "label": "_normalize_related_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L72"}, {"id": "services_oa_related_approval_format_value", "label": "_format_value()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L91"}, {"id": "services_oa_related_approval_flatten_form_fields_for_summary", "label": "flatten_form_fields_for_summary()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L140"}, {"id": "services_oa_related_approval_extract_related_approval_links", "label": "extract_related_approval_links()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L169"}, {"id": "services_oa_related_approval_merge_relation_targets", "label": "merge_relation_targets()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L202"}, {"id": "services_oa_related_approval_assert_linkable_instance", "label": "assert_linkable_instance()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L220"}, {"id": "services_oa_related_approval_list_related_candidates", "label": "list_related_candidates()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L229"}, {"id": "services_oa_related_approval_build_related_summaries", "label": "build_related_summaries()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L290"}, {"id": "services_oa_related_approval_rationale_1", "label": "\u5173\u8054\u5ba1\u6279\u5355\uff1a\u5b57\u6bb5\u6241\u5e73\u5316\u4e0e form_data \u62bd\u94fe", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L1"}, {"id": "services_oa_related_approval_rationale_41", "label": "Normalize FormCreate upload / \u4e1a\u52a1\u9644\u4ef6\u503c\u4e3a URL \u5217\u8868\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L41"}, {"id": "services_oa_related_approval_rationale_73", "label": "Order-preserving dedupe of related approval instance ids.", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L73"}, {"id": "services_oa_related_approval_rationale_92", "label": "returns (text, fullWidth)", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L92"}, {"id": "services_oa_related_approval_rationale_172", "label": "Ordered unique (field_key, to_instance_id).", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L172"}, {"id": "services_oa_related_approval_rationale_207", "label": "Returns (field_key|None, to_id) \u2014 form fields first, then legacy without key.", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L207"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_related_approval_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_oa_related_approval_py", "target":Line truncated
+9 -2
View File
@@ -1507,8 +1507,9 @@ def _eval_condition_rules(
*,
initiator_user_id: Optional[str] = None,
) -> bool:
"""AND 多条 {field, op, value};contains 走人员集合交集,其余走公式。"""
"""AND 多条 {field, op, value};contains 走人员/职位集合交集,其余走公式。"""
from app.services.oa_person_select import person_contains_match
from app.services.oa_post_select import post_contains_match
for r in rules:
if not isinstance(r, dict):
@@ -1530,7 +1531,8 @@ def _eval_condition_rules(
if not uid or uid not in allowed:
return False
continue
if not person_contains_match(form_data.get(field), val):
form_val = form_data.get(field)
if not (person_contains_match(form_val, val) or post_contains_match(form_val, val)):
return False
continue
if isinstance(val, str):
@@ -1704,6 +1706,7 @@ def start_instance(
from app.services.oa_dept_select import validate_dept_form_values
from app.services.oa_money_field import validate_money_form_values
from app.services.oa_person_select import validate_person_form_values
from app.services.oa_post_select import validate_post_form_values
from app.services.oa_receive_account import validate_receive_account_form_values
dept_errs = validate_dept_form_values(schema, data)
@@ -1718,6 +1721,10 @@ def start_instance(
if person_errs:
raise OaEngineError(person_errs[0])
post_errs = validate_post_form_values(schema, data)
if post_errs:
raise OaEngineError(post_errs[0])
recv_errs = validate_receive_account_form_values(schema, data)
if recv_errs:
raise OaEngineError(recv_errs[0])
+158
View File
@@ -0,0 +1,158 @@
"""OA 表单设计器:职位选择控件 form_data 校验"""
from __future__ import annotations
from typing import Any, Dict, List, Optional, Set
def _walk_rules(rules: Any, out: List[dict]) -> None:
if not isinstance(rules, list):
return
for r in rules:
if not isinstance(r, dict):
continue
out.append(r)
children = r.get("children") or (r.get("props") or {}).get("rule") or []
if isinstance(children, list):
_walk_rules(children, out)
def _schema_rules(schema: Any) -> List[dict]:
if isinstance(schema, list):
out: List[dict] = []
_walk_rules(schema, out)
return out
if not isinstance(schema, dict):
return []
out: List[dict] = []
_walk_rules(schema.get("rule") or schema.get("rules") or [], out)
return out
def _rule_props(rule: dict) -> dict:
props = rule.get("props")
return props if isinstance(props, dict) else {}
def _field_label(rule: dict) -> str:
return str(rule.get("title") or rule.get("label") or rule.get("field") or "职位")
def _is_required(rule: dict) -> bool:
props = _rule_props(rule)
if rule.get("$required") is True:
return True
if rule.get("required") is True:
return True
if props.get("required") is True:
return True
return False
def _is_multiple(rule: dict) -> bool:
props = _rule_props(rule)
multiple = props.get("multiple")
if multiple is None:
return True
return multiple is True
def _max_count(rule: dict) -> Optional[int]:
raw = _rule_props(rule).get("max")
if raw is None or raw == "":
return None
try:
value = int(raw)
except (TypeError, ValueError):
return None
if value <= 0:
return None
return value
def _is_valid_post_item(item: Any) -> bool:
if not isinstance(item, dict):
return False
post_id = item.get("id")
name = item.get("name")
if not isinstance(post_id, str) or not post_id.strip():
return False
if not isinstance(name, str) or not name.strip():
return False
return True
def _validate_post_rule(rule: dict, data: Dict[str, Any]) -> List[str]:
field = str(rule.get("field") or "").strip()
if not field:
return []
label = _field_label(rule)
required = _is_required(rule)
multiple = _is_multiple(rule)
max_count = _max_count(rule)
value = data.get(field)
errors: List[str] = []
if multiple:
if value is None:
if required:
errors.append(f"「{label}」为必填职位字段")
return errors
if not isinstance(value, list):
errors.append(f"「{label}」职位字段格式不正确,应为职位列表")
return errors
if required and len(value) == 0:
errors.append(f"「{label}」为必填职位字段")
return errors
for item in value:
if not _is_valid_post_item(item):
errors.append(f"「{label}」职位项格式不正确,需包含有效的 id 与 name")
break
if max_count is not None and len(value) > max_count:
errors.append(f"「{label}」选择职位数量超过最大上限 {max_count} 个")
return errors
if value is None or value == "":
if required:
errors.append(f"「{label}」为必填职位字段")
return errors
if isinstance(value, list):
errors.append(f"「{label}」职位字段格式不正确,应为单个职位对象")
return errors
if not _is_valid_post_item(value):
errors.append(f"「{label}」职位字段格式不正确,需包含有效的 id 与 name")
return errors
def validate_post_form_values(schema: Any, form_data: Optional[Dict[str, Any]]) -> List[str]:
"""校验 form_data 中职位选择控件的值格式,返回中文错误列表(空表示通过)。"""
data = form_data or {}
errors: List[str] = []
for rule in _schema_rules(schema):
if str(rule.get("type") or "") != "post":
continue
errors.extend(_validate_post_rule(rule, data))
return errors
def extract_post_ids(raw: Any) -> Set[str]:
ids: Set[str] = set()
items = raw if isinstance(raw, list) else ([raw] if isinstance(raw, dict) else [])
for item in items:
if not isinstance(item, dict):
continue
pid = str(item.get("id") or "").strip()
if pid:
ids.add(pid)
return ids
def post_contains_match(form_value: Any, cond_ids: Any) -> bool:
form_ids = extract_post_ids(form_value)
if isinstance(cond_ids, str):
want = {cond_ids.strip()} if cond_ids.strip() else set()
elif isinstance(cond_ids, list):
want = {str(x).strip() for x in cond_ids if str(x).strip()}
else:
want = set()
return bool(form_ids & want)
+2
View File
@@ -31,6 +31,7 @@ FILLABLE_TYPES = frozenset(
"money",
"dept",
"person",
"post",
"receiveAccount",
"region",
"formula",
@@ -77,6 +78,7 @@ CONDITION_ELIGIBLE_TYPES = frozenset(
"datePicker",
"date",
"person",
"post",
}
)
+1 -1
View File
@@ -104,7 +104,7 @@ def _format_value(typ: str, raw: Any) -> Tuple[str, bool]:
else:
n = 0
return f"已关联 {n} 条", False
if (typ == "dept" or typ == "person"):
if (typ == "dept" or typ == "person" or typ == "post"):
if isinstance(raw, list):
names = []
for x in raw:
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+101 -81
View File
@@ -1,11 +1,11 @@
# Graph Report - app (2026-07-30)
## Corpus Check
- Large corpus: 234 files · ~289,718 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
- Large corpus: 235 files · ~290,692 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
## Summary
- 4971 nodes · 27421 edges · 38 communities detected
- Extraction: 31% EXTRACTED · 69% INFERRED · 0% AMBIGUOUS · INFERRED: 18816 edges (avg confidence: 0.6)
- 4990 nodes · 27487 edges · 42 communities detected
- Extraction: 31% EXTRACTED · 69% INFERRED · 0% AMBIGUOUS · INFERRED: 18848 edges (avg confidence: 0.6)
- Token cost: 0 input · 0 output
## Community Hubs (Navigation)
@@ -41,17 +41,21 @@
- [[_COMMUNITY_Community 29|Community 29]]
- [[_COMMUNITY_Community 30|Community 30]]
- [[_COMMUNITY_Community 31|Community 31]]
- [[_COMMUNITY_Community 32|Community 32]]
- [[_COMMUNITY_Community 33|Community 33]]
- [[_COMMUNITY_Community 34|Community 34]]
- [[_COMMUNITY_Community 35|Community 35]]
- [[_COMMUNITY_Community 36|Community 36]]
- [[_COMMUNITY_Community 37|Community 37]]
- [[_COMMUNITY_Community 38|Community 38]]
- [[_COMMUNITY_Community 39|Community 39]]
- [[_COMMUNITY_Community 40|Community 40]]
- [[_COMMUNITY_Community 41|Community 41]]
- [[_COMMUNITY_Community 42|Community 42]]
- [[_COMMUNITY_Community 43|Community 43]]
## God Nodes (most connected - your core abstractions)
1. `success_response()` - 724 edges
2. `error_response()` - 597 edges
3. `SysUser` - 575 edges
3. `SysUser` - 576 edges
4. `BizQcTaskResult` - 344 edges
5. `BizProductionMaterial` - 328 edges
6. `BizProductionMaterialUsage` - 322 edges
@@ -65,102 +69,102 @@
core/api_request_log_middleware.py → models/models.py
- `get_menu_list()` --calls--> `success_response()` [INFERRED]
api/menu.py → core/response.py
- `sync_lab_storage_seq_after_use()` --calls--> `generate_uuid()` [INFERRED]
crud/sample_reception_lab_code.py → core/utils.py
- `保留匹配节点及其全部上级,供关键词检索后仍能正确组树。` --uses--> `SysDept` [INFERRED]
crud/dept.py → models/models.py
- `物品单位 CRUD(biz_item_unit)` --uses--> `BizItemUnit` [INFERRED]
crud/item_unit.py → models/models.py
- `快递公司 CRUD(biz_express_company)` --uses--> `BizExpressCompany` [INFERRED]
crud/express_company.py → models/models.py
## Communities
### Community 0 - "Community 0"
Cohesion: 0.01
Nodes (1000): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+992 more)
Nodes (928): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+920 more)
### Community 1 - "Community 1"
Cohesion: 0.01
Nodes (583): generate_uuid(), create_cell_sample_type(), get_cell_sample_type(), list_cell_sample_types(), 细胞样本类型 CRUD(biz_cell_sample_type), _row_to_dict(), soft_delete_cell_sample_type(), type_code_exists() (+575 more)
Nodes (682): _ensure_customer_for_mother(), generate_uuid(), ApiRequestLogCRUD, delete(), get_multi_with_filters(), allocate_next_biz_no(), _format_biz_no(), _prefix_for() (+674 more)
### Community 2 - "Community 2"
Cohesion: 0.01
Nodes (596): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+588 more)
Nodes (630): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+622 more)
### Community 3 - "Community 3"
Cohesion: 0.05
Nodes (615): CellSampleTypeCreateBody, CellSampleTypeUpdateBody, CollectionRegionCreateBody, CollectionRegionUpdateBody, CustomerCreateBody, CustomerUpdateBody, HospitalCreateBody, HospitalUpdateBody (+607 more)
Cohesion: 0.06
Nodes (588): 细胞存储 — 采集协议单 / 审核 / 财务确认 / 分期预警 API, 持久化协议子资源。 缴费(含明细校验)须在样本之前:明细校验失败时不得已占用样本编码。 各子表 CRUD 内部仍可能分段 commit,创建接, 与列表接口一致:按租户 + 角色数据权限判断是否可访问该协议单。, If mother info exists but no customerId, create a customer record and link it., Base, 细胞产品 CRUD(biz_cell_product), 解析任务样本投入物,返回祖先链单段(样本终止节点)。, 将 get_product_chain 结果展平为上游→下游节点列表(含 current,不含 descendants)。 (+580 more)
### Community 4 - "Community 4"
Cohesion: 0.01
Nodes (340): _normalize_date_bound(), list_ethnics_for_select(), get_designer_data(), apply_data_scope(), _get_child_dept_ids(), get_user_dept_id(), _resolve_user_role_scopes(), format_date() (+332 more)
Nodes (295): _normalize_date_bound(), complete_protocol_invoice_request(), create_collection_protocol(), delete_collection_protocol(), _draft_fields_from_body(), get_collection_protocol_detail(), _get_current_user_id(), get_invoice_eligible_payments() (+287 more)
### Community 5 - "Community 5"
Cohesion: 0.01
Nodes (343): 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() (+335 more)
Cohesion: 0.02
Nodes (189): get_schedule_detail(), _allocate_batch_name(), _apply_assignees_to_batch_tasks(), _assignee_names(), _batch_assignee_user_ids(), _batch_has_blocking_tasks(), _batch_item_ids(), _batch_to_dict() (+181 more)
### Community 6 - "Community 6"
Cohesion: 0.02
Nodes (122): _jwt_user_payload(), logout(), Web 端登录用 RSA 公钥(PKCS#1 v1.5,与 JSEncrypt 一致), Web 端登录:账号为 sys_user.user_no,密码为 sys_user.password(bcrypt)。, 登出:吊销 Redis 会话(若已配置 REDIS_HOST)。, refresh_token(), web_login(), web_login_rsa_public_key() (+114 more)
Nodes (117): get_designer_data(), _error_json(), 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, sqlalchemy_exception_handler(), unhandled_exception_handler(), BaseHTTPMiddleware, ApiCryptoError (+109 more)
### Community 7 - "Community 7"
Cohesion: 0.03
Nodes (165): batch_discard(), batch_options(), _batch_row_to_dict(), batch_stock_in(), batch_stock_out(), _create_batch_and_usage(), delete_batch(), _discard_batch() (+157 more)
Cohesion: 0.02
Nodes (172): 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() (+164 more)
### Community 8 - "Community 8"
Cohesion: 0.04
Nodes (122): 发起前预览审批链(条件齐后解析最终路径与审批人)。, 兼容旧 GET:无 formData,含条件分支时多为待确定占位。, _app_to_dict(), create_app(), create_group(), create_role(), _create_version(), delete_app() (+114 more)
Cohesion: 0.03
Nodes (166): _batch_line_to_dict(), _check_header_to_dict(), get_check_detail(), _line_counts(), list_checks(), _resolve_unused_item_fields(), _status_label(), _unused_amount() (+158 more)
### Community 9 - "Community 9"
Cohesion: 0.03
Nodes (116): api_save_application(), get_protocol_nos_used_in_protocols(), create_dict_type(), dict_type_code_exists(), get_dict_type(), list_dict_types(), 字典类型 CRUD(sys_dict_type), _row_to_dict() (+108 more)
Nodes (138): api_save_application(), get_protocol_nos_used_in_protocols(), _dec(), _fmt_dt(), list_stock_logs(), _row_to_dict(), _user_nick_name_map(), _fmt_dt() (+130 more)
### Community 10 - "Community 10"
Cohesion: 0.05
Nodes (110): AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody, list_storage_slot_stats(), OccupancyCreateBody (+102 more)
Cohesion: 0.04
Nodes (134): 发起前预览审批链(条件齐后解析最终路径与审批人)。, 兼容旧 GET:无 formData,含条件分支时多为待确定占位。, _app_to_dict(), create_app(), _create_version(), delete_app(), delete_group(), _dumps() (+126 more)
### Community 11 - "Community 11"
Cohesion: 0.04
Nodes (96): _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() (+88 more)
Cohesion: 0.05
Nodes (115): AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody, list_storage_slot_stats(), OccupancyCreateBody (+107 more)
### Community 12 - "Community 12"
Cohesion: 0.05
Nodes (74): 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() (+66 more)
Nodes (94): _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() (+86 more)
### Community 13 - "Community 13"
Cohesion: 0.45
Nodes (71): BatchStockInBody, BatchStockInItem, BatchStockOutBody, BatchStockOutItem, ConsumableCreateBody, ConsumablePackCreateBody, ConsumablePackUpdateBody, ConsumableUpdateBody (+63 more)
### Community 14 - "Community 14"
Cohesion: 0.07
Nodes (61): allocate_next_biz_no(), _format_biz_no(), _prefix_for(), 业务协议号自动生成:XBCC / JZCC + YYYYMMDD + 6 位序号, 原子分配下一个业务协议号。 须在 create 事务内调用;使用 MySQL LAST_INSERT_ID 保证并发安全。, create_collection_protocol(), 入库样本(采集协议 / 科研捐赠)· 特殊标记维护。, update_inbound_sample_special_mark() (+53 more)
Cohesion: 0.05
Nodes (55): _jwt_user_payload(), Web 端登录用 RSA 公钥(PKCS#1 v1.5,与 JSEncrypt 一致), Web 端登录:账号为 sys_user.user_no,密码为 sys_user.password(bcrypt)。, refresh_token(), web_login(), web_login_rsa_public_key(), lifespan(), create_access_token() (+47 more)
### Community 15 - "Community 15"
Cohesion: 0.1
Nodes (39): _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(), _donation_sample_chain_node() (+31 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 18 - "Community 18"
Cohesion: 0.16
Nodes (22): _code_exists(), create_material(), _dec(), _fmt_dt(), get_material(), get_material_entity(), get_my_usages(), _is_enabled_status() (+14 more)
### Community 19 - "Community 19"
Cohesion: 0.21
Nodes (19): _consumable_row_to_dict(), create_process(), _create_sub_consumable(), _create_sub_data_collection(), _create_sub_output(), _create_sub_reagent(), _data_collection_row_to_dict(), get_process() (+11 more)
### Community 17 - "Community 17"
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 18 - "Community 18"
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 19 - "Community 19"
Cohesion: 0.2
Nodes (14): add_days_yyyymmdd(), add_interval_months_yyyymmdd(), add_months_yyyymmdd(), calc_fq_installment_due_date(), calc_installment_due_amounts_by_ratios(), _calc_installment_due_amounts_inline(), calc_unpaid_amounts_by_ratios(), is_legacy_installment_ratios() (+6 more)
### Community 20 - "Community 20"
Cohesion: 0.24
Nodes (9): 微信消息通知服务 支持微信小程序模板消息推送 使用方式: from app.core.wechat_message import Wech, 发送模板消息 Args: openid: 用户openid templ, send_delivery_notice(), send_delivery_warning(), send_order_status(), send_payment_success(), send_refund_result(), send_urge_notification() (+1 more)
Cohesion: 0.21
Nodes (16): _field_label(), _is_non_empty_str(), _is_required(), _is_valid_receive_account_item(), normalize_account_fields(), _pick(), _pick_order_num(), _pick_str() (+8 more)
### Community 21 - "Community 21"
Cohesion: 0.29
Nodes (12): _field_label(), _is_multiple(), _is_required(), _is_valid_dept_item(), _max_count(), OA 表单设计器:部门选择控件 form_data 校验, 校验 form_data 中部门选择控件的值格式,返回中文错误列表(空表示通过)。, _rule_props() (+4 more)
Cohesion: 0.24
Nodes (9): 微信消息通知服务 支持微信小程序模板消息推送 使用方式: from app.core.wechat_message import Wech, 发送模板消息 Args: openid: 用户openid templ, send_delivery_notice(), send_delivery_warning(), send_order_status(), send_payment_success(), send_refund_result(), send_urge_notification() (+1 more)
### Community 22 - "Community 22"
Cohesion: 0.24
@@ -171,103 +175,119 @@ Cohesion: 0.24
Nodes (11): deduct_for_step(), _display_remark(), list_stock_logs(), _parse_receiver_purpose_from_remark(), 耗材变动记录 CRUD(biz_consumable_stock_log), 撤销步骤此前 step_save 扣减,便于重新填报。, 扣减耗材库存并生成变动记录。调用方控制事务,本函数不 commit。, _resolve_receiver_purpose() (+3 more)
### Community 24 - "Community 24"
Cohesion: 0.31
Nodes (10): create_account(), _filtered_query(), get_account(), list_accounts(), list_options(), OA 收款账户 CRUD(oa_receive_account), row_to_dict(), soft_delete_account() (+2 more)
### Community 25 - "Community 25"
Cohesion: 0.31
Nodes (10): _build_tree(), _cascade_soft_delete(), _collect_with_ancestors(), get_dept(), list_depts(), list_depts_tree(), 保留匹配节点及其全部上级,供关键词检索后仍能正确组树。, _row_to_dict() (+2 more)
### Community 26 - "Community 26"
Cohesion: 0.33
Nodes (8): _build_tree(), _cascade_soft_delete(), get_menu(), list_menus(), list_menus_tree(), _row_to_dict(), soft_delete_menu(), update_menu()
### Community 27 - "Community 27"
Cohesion: 0.29
Nodes (2): BaseModel, SoftDeleteModel
### Community 25 - "Community 25"
### Community 28 - "Community 28"
Cohesion: 0.32
Nodes (5): create_leave(), get_leave(), list_leaves(), _row_to_dict(), soft_delete_leave()
### Community 29 - "Community 29"
Cohesion: 0.38
Nodes (6): derive_legacy_status_from_three(), derive_three_status_from_legacy(), 阶段A兼容:从旧 status 推导三字段。 约束:旧 status 本身混合了支付/配送/订单生命周期,因此只能尽力推断; 若业务侧已有更精确, 阶段A兼容:从三字段反推旧 status(用于旧前端/旧筛选参数兼容)。, ThreeStatus, _to_decimal()
### Community 26 - "Community 26"
### Community 30 - "Community 30"
Cohesion: 0.5
Nodes (3): BaseSettings, Config, Settings
### Community 27 - "Community 27"
### Community 31 - "Community 31"
Cohesion: 0.5
Nodes (2): _auto_fill_create_dept_id(), ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID
### Community 28 - "Community 28"
### Community 32 - "Community 32"
Cohesion: 0.67
Nodes (2): get_menu_list(), 运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)
### Community 29 - "Community 29"
### Community 33 - "Community 33"
Cohesion: 1.0
Nodes (1): 质检物料金额查看授权:专用角色与菜单权限常量。
### Community 30 - "Community 30"
### Community 34 - "Community 34"
Cohesion: 1.0
Nodes (1): 请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传
### Community 31 - "Community 31"
### Community 35 - "Community 35"
Cohesion: 1.0
Nodes (1): API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)
### Community 34 - "Community 34"
### Community 38 - "Community 38"
Cohesion: 1.0
Nodes (1): 发送订单状态通知 Args: openid: 用户openid ord
### Community 35 - "Community 35"
### Community 39 - "Community 39"
Cohesion: 1.0
Nodes (1): 发送支付成功通知 Args: openid: 用户openid ord
### Community 36 - "Community 36"
### Community 40 - "Community 40"
Cohesion: 1.0
Nodes (1): 发送配送通知 Args: openid: 配送员openid task
### Community 37 - "Community 37"
### Community 41 - "Community 41"
Cohesion: 1.0
Nodes (1): 发送配送时效预警 Args: openid: 配送员openid ta
### Community 38 - "Community 38"
### Community 42 - "Community 42"
Cohesion: 1.0
Nodes (1): 发送退款结果通知 Args: openid: 用户openid ord
### Community 39 - "Community 39"
### Community 43 - "Community 43"
Cohesion: 1.0
Nodes (1): 发送催单通知给配送员 Args: deliver_openid: 配送员openid
## Knowledge Gaps
- **149 isolated node(s):** `刷新会话 TTL(refreshToken 续期;已登录用户每次 API 校验通过后滑动续期)`, `写入 refreshToken(用于 one-time 使用/吊销)`, `根据 token 获取当前用户(包含 Redis 会话校验;会话滑动续期)`, `登录凭据 RSA 解密(与前端 JSEncrypt PKCS#1 v1.5 兼容)。`, `加载 RSA 密钥对:优先环境变量,否则使用内置固定默认密钥。` (+144 more)
- **151 isolated node(s):** `刷新会话 TTL(refreshToken 续期;已登录用户每次 API 校验通过后滑动续期)`, `写入 refreshToken(用于 one-time 使用/吊销)`, `根据 token 获取当前用户(包含 Redis 会话校验;会话滑动续期)`, `登录凭据 RSA 解密(与前端 JSEncrypt PKCS#1 v1.5 兼容)。`, `加载 RSA 密钥对:优先环境变量,否则使用内置固定默认密钥。` (+146 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **Thin community `Community 24`** (8 nodes): `BaseModel`, `.to_dict()`, `get_active()`, `base.py`, `SoftDeleteModel`, `.restore()`, `.soft_delete()`, `__tablename__()`
- **Thin community `Community 27`** (8 nodes): `BaseModel`, `.to_dict()`, `get_active()`, `base.py`, `SoftDeleteModel`, `.restore()`, `.soft_delete()`, `__tablename__()`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 27`** (4 nodes): `_auto_fill_create_dept_id()`, `get_db()`, `database.py`, `ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID`
- **Thin community `Community 31`** (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 28`** (3 nodes): `get_menu_list()`, `menu.py`, `运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)`
- **Thin community `Community 32`** (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 29`** (2 nodes): `qc_material_amount_auth_constants.py`, `质检物料金额查看授权:专用角色与菜单权限常量。`
- **Thin community `Community 33`** (2 nodes): `qc_material_amount_auth_constants.py`, `质检物料金额查看授权:专用角色与菜单权限常量。`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 30`** (2 nodes): `context.py`, `请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传`
- **Thin community `Community 34`** (2 nodes): `context.py`, `请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 31`** (2 nodes): `__init__.py`, `API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)`
- **Thin community `Community 35`** (2 nodes): `__init__.py`, `API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 34`** (1 nodes): `发送订单状态通知 Args: openid: 用户openid ord`
- **Thin community `Community 38`** (1 nodes): `发送订单状态通知 Args: openid: 用户openid ord`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 35`** (1 nodes): `发送支付成功通知 Args: openid: 用户openid ord`
- **Thin community `Community 39`** (1 nodes): `发送支付成功通知 Args: openid: 用户openid ord`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 36`** (1 nodes): `发送配送通知 Args: openid: 配送员openid task`
- **Thin community `Community 40`** (1 nodes): `发送配送通知 Args: openid: 配送员openid task`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 37`** (1 nodes): `发送配送时效预警 Args: openid: 配送员openid ta`
- **Thin community `Community 41`** (1 nodes): `发送配送时效预警 Args: openid: 配送员openid ta`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 38`** (1 nodes): `发送退款结果通知 Args: openid: 用户openid ord`
- **Thin community `Community 42`** (1 nodes): `发送退款结果通知 Args: openid: 用户openid ord`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 39`** (1 nodes): `发送催单通知给配送员 Args: deliver_openid: 配送员openid`
- **Thin community `Community 43`** (1 nodes): `发送催单通知给配送员 Args: deliver_openid: 配送员openid`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `SysUser` connect `Community 2` to `Community 1`, `Community 3`, `Community 4`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 13`, `Community 22`, `Community 23`?**
_High betweenness centrality (0.119) - this node is a cross-community bridge._
- **Why does `success_response()` connect `Community 0` to `Community 2`, `Community 4`, `Community 6`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 28`?**
- **Why does `SysUser` connect `Community 2` to `Community 0`, `Community 1`, `Community 3`, `Community 4`, `Community 5`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 13`, `Community 14`, `Community 18`, `Community 22`, `Community 23`?**
_High betweenness centrality (0.122) - this node is a cross-community bridge._
- **Why does `success_response()` connect `Community 0` to `Community 32`, `Community 2`, `Community 4`, `Community 6`, `Community 9`, `Community 11`, `Community 12`, `Community 14`?**
_High betweenness centrality (0.051) - this node is a cross-community bridge._
- **Why does `generate_uuid()` connect `Community 1` to `Community 0`, `Community 3`, `Community 4`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 14`, `Community 16`, `Community 17`, `Community 18`, `Community 22`, `Community 23`?**
_High betweenness centrality (0.036) - this node is a cross-community bridge._
- **Are the 814 inferred relationships involving `str` (e.g. with `unhandled_exception_handler()` and `get_current_user_by_token()`) actually correct?**
_`str` has 814 INFERRED edges - model-reasoned connections that need verification._
- **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 14`, `Community 18`, `Community 19`, `Community 22`, `Community 23`, `Community 24`, `Community 28`?**
_High betweenness centrality (0.035) - this node is a cross-community bridge._
- **Are the 822 inferred relationships involving `str` (e.g. with `unhandled_exception_handler()` and `get_current_user_by_token()`) actually correct?**
_`str` has 822 INFERRED edges - model-reasoned connections that need verification._
- **Are the 723 inferred relationships involving `success_response()` (e.g. with `list_storage_release_reviews()` and `get_storage_release_review_detail()`) actually correct?**
_`success_response()` has 723 INFERRED edges - model-reasoned connections that need verification._
- **Are the 596 inferred relationships involving `error_response()` (e.g. with `_json_error_response()` and `list_storage_release_reviews()`) actually correct?**
_`error_response()` has 596 INFERRED edges - model-reasoned connections that need verification._
- **Are the 573 inferred relationships involving `SysUser` (e.g. with `数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3` and `从 SysUser 读取用户的 dept_id。`) actually correct?**
_`SysUser` has 573 INFERRED edges - model-reasoned connections that need verification._
- **Are the 574 inferred relationships involving `SysUser` (e.g. with `数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3` and `从 SysUser 读取用户的 dept_id。`) actually correct?**
_`SysUser` has 574 INFERRED edges - model-reasoned connections that need verification._
+4 -4
View File
@@ -57,12 +57,12 @@
</div>
<div id="legend"></div>
</div>
<div id="stats">4971 nodes &middot; 27421 edges &middot; 44 communities</div>
<div id="stats">4990 nodes &middot; 27487 edges &middot; 48 communities</div>
</div>
<script>
const RAW_NODES = [{"id": "init_py", "label": "__init__.py", "color": {"background": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 32, "community_name": "Community 32", "source_file": "__init__.py", "file_type": "code", "degree": 0}, {"id": "main_py", "label": "main.py", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "main.py", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 7}, {"id": "app_main_lifespan", "label": "lifespan()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "lifespan()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_error_json", "label": "_error_json()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "_error_json()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 3}, {"id": "app_main_sqlalchemy_exception_handler", "label": "sqlalchemy_exception_handler()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "sqlalchemy_exception_handler()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_unhandled_exception_handler", "label": "unhandled_exception_handler()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "unhandled_exception_handler()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 5}, {"id": "app_main_mask_secret", "label": "_mask_secret()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "_mask_secret()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_root", "label": "root()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "root()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_health_check", "label": "health_check()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "health_check()", "community": 6, "community_name": "Community 6", "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": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "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": 6, "community_name": "Community 6", "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": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "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": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "tasks_init_py", "label": "__init__.py", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 6, "community_name": "Community 6", "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": 1043}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 647}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 631}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 621}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 391}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 364}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 192}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 175}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 143}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 125}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 113}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 106}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 78}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 74}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 67}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 31}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 21}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 20}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 20}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 15}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 13}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 13}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 12}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 12}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 8}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 7}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 4}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 4}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 3}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 2}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 2}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 2}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 1}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 1}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 1}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 1}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 1}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 1}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 1}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 1}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 1}, {"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": 0}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 0}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 0}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 0}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 0}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 0}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 0}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 0}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 0}, {"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}];
const RAW_NODES = [{"id": "init_py", "label": "__init__.py", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 36, "community_name": "Community 36", "source_file": "__init__.py", "file_type": "code", "degree": 0}, {"id": "main_py", "label": "main.py", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "main.py", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 7}, {"id": "app_main_lifespan", "label": "lifespan()", "color": {"background": "#59A14F", "border": "#59A14F", "highlight": {"background": "#ffffff", "border": "#59A14F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "lifespan()", "community": 14, "community_name": "Community 14", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_error_json", "label": "_error_json()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "_error_json()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 3}, {"id": "app_main_sqlalchemy_exception_handler", "label": "sqlalchemy_exception_handler()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "sqlalchemy_exception_handler()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_unhandled_exception_handler", "label": "unhandled_exception_handler()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "unhandled_exception_handler()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 5}, {"id": "app_main_mask_secret", "label": "_mask_secret()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "_mask_secret()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_root", "label": "root()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "root()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_health_check", "label": "health_check()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "health_check()", "community": 6, "community_name": "Community 6", "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": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "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": 6, "community_name": "Community 6", "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": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "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": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "tasks_init_py", "label": "__init__.py", "color": {"background": "#59A14F", "border": "#59A14F", "highlight": {"background": "#ffffff", "border": "#59A14F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 14, "community_name": "Community 14", "source_file": "tasks/__init__.py", "file_type": "code", Line 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": 965}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 761}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 665}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 594}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 325}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 198}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 186}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 182}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 176}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 148}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 141}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 118}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 106}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 74}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 70}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 41}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 31}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 27}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 23}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 21}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 17}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 13}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 12}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 12}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 11}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 11}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 10}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 8}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 8}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 7}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 4}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 4}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 3}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 2}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 2}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 2}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 1}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 1}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 1}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 1}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 1}, {"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": 0}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 0}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 0}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 0}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 0}, {"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
function esc(s) {
File diff suppressed because it is too large. Load diff
+5 -4
View File
@@ -214,23 +214,24 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/api/protocol_sample_collection.py": 1780457788.2093296,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/leave.py": 1779266168.8693042,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/clinical_payment.py": 1781750841.074568,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py": 1785390293.5630224,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_engine.py": 1785394470.6870415,
"/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": 1783329884.6125586,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/storage_facility_code.py": 1785213139.8646047,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_person_select.py": 1785384742.9734983,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/qc_work_order_conclusion.py": 1785206750.2532814,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_dept_select.py": 1785148503.137782,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py": 1785390293.378005,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_publish.py": 1785394435.941982,
"/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": 1782122624.7941194,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/protocol_payment_installment.py": 1781432208.0765035,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/protocol_sample_list_summary.py": 1785207474.9871266,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py": 1785385055.58612,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py": 1785145511.510936,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_related_approval.py": 1785394470.842782,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_assignee.py": 1785392572.7098165,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_receive_account.py": 1785390254.4121296,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_money_field.py": 1785380625.3526123,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/protocol_pay_mode_switch.py": 1785145536.322005,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_post_select.py": 1785394392.5716882,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/oa_formula.py": 1785145511.513383,
"/Users/wuzilong/work/00code/zkxw/backend/app/ws/__init__.py": 1778578258.105995
}
+74
View File
@@ -0,0 +1,74 @@
import unittest
from app.services.oa_post_select import (
extract_post_ids,
post_contains_match,
validate_post_form_values,
)
class TestOaPostSelect(unittest.TestCase):
def test_validate_multi_ok(self):
schema = {
"rule": [
{
"type": "post",
"field": "F1",
"title": "职位",
"props": {"multiple": True},
}
]
}
data = {"F1": [{"id": "p1", "name": "工程师"}, {"id": "p2", "name": "经理"}]}
self.assertEqual(validate_post_form_values(schema, data), [])
def test_validate_required_empty(self):
schema = {
"rule": [
{
"type": "post",
"field": "F1",
"title": "职位",
"$required": True,
"props": {"multiple": True},
}
]
}
errs = validate_post_form_values(schema, {"F1": []})
self.assertTrue(any("必填" in e for e in errs))
def test_validate_max(self):
schema = {
"rule": [
{
"type": "post",
"field": "F1",
"title": "职位",
"props": {"multiple": True, "max": 1},
}
]
}
errs = validate_post_form_values(
schema,
{"F1": [{"id": "p1", "name": "A"}, {"id": "p2", "name": "B"}]},
)
self.assertTrue(any("上限" in e for e in errs))
def test_extract_and_contains(self):
self.assertEqual(extract_post_ids({"id": "p1", "name": "A"}), {"p1"})
self.assertTrue(
post_contains_match(
[{"id": "p1", "name": "A"}],
["p1", "p2"],
)
)
self.assertFalse(
post_contains_match(
[{"id": "p3", "name": "C"}],
["p1", "p2"],
)
)
if __name__ == "__main__":
unittest.main()
@@ -1,6 +0,0 @@
-- 工艺路线增加路线级默认设备(派发任务时带入任务设备面板)
-- 执行:在目标库运行本脚本。
ALTER TABLE `biz_process_route`
ADD COLUMN `equipment_ids` varchar(1000) DEFAULT NULL COMMENT '默认设备ID(biz_equipment.id,逗号分隔)' AFTER `is_current`,
ADD COLUMN `equipment_name` varchar(1000) DEFAULT NULL COMMENT '默认设备名称快照(逗号分隔)' AFTER `equipment_ids`;
@@ -1,6 +0,0 @@
-- 质检工单增加质检结论(合格/不合格),可编辑落库;列表无值时仍可由任务结论派生。
-- 执行:在目标库运行本脚本。
ALTER TABLE `biz_qc_work_order`
ADD COLUMN `conclusion` varchar(16) DEFAULT NULL COMMENT '质检结论 tg合格 btg不合格'
AFTER `work_order_status`;
@@ -0,0 +1,592 @@
# 抄送人多选选人方式 Implementation Plan
> **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:** 抄送人节点支持同时勾选多种选人方式,运行时软并集去重;失败/空策略跳过,最终 0 人不报错不建任务;发布至少勾一种且 users/roles 配置要齐;审批人保持单选。
**Architecture:** 抄送配置优先读 `approverConfig.assigneeTypes[]`,无则回退旧 `assigneeType`。新增 `resolve_cc_assignees` 按类型循环调用现有 `resolve_assignees` 并吞掉 `AssigneeResolveError`。引擎抄送建任务/预览/未达进度改走该函数。设计器抄送分段改为多选并双写首项 `assigneeType`。
**Tech Stack:** FastAPI · unittest.mock · Vue 3 · Element Plus · TypeScript
**Spec:** `docs/superpowers/specs/2026-07-30-oa-cc-multi-assignee-design.md`
---
## File map
| Path | Responsibility |
|------|----------------|
| Modify: `backend/app/services/oa_assignee.py` | `normalize_cc_assignee_types` + `resolve_cc_assignees` |
| Modify: `backend/tests/test_oa_assignee.py` | 并集 / 软跳过 / 空列表 / 旧字段兼容 |
| Modify: `backend/app/services/oa_publish.py` | 抄送按类型列表校验;审批仍单字段 |
| Modify: `backend/tests/test_oa_publish.py` | 抄送多类型发布用例 |
| Modify: `backend/app/services/oa_engine.py` | 抄送路径改用 `resolve_cc_assignees`;预览返回 `assigneeTypes` |
| Modify: `backend/tests/test_oa_initiator_select_by_node.py` | patch 目标兼容(若 import 变) |
| Modify: `web-admin/src/components/oa-approval/flow-tree/types.ts` | `assigneeTypes`;`normalizeCcAssigneeTypes` / `summarizeApprover` |
| Modify: `web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue` | 抄送多选 UI;读写;确定校验 |
| Modify: `web-admin/src/api/oaApproval.ts` | `OaFlowPreviewStep.assigneeTypes?` |
| Modify: `web-admin/src/components/oa-approval/OaFlowPreview.vue` | `includes('initiator_select')`;抄送 people 并集展示 |
| Modify: `web-admin/src/components/oa-approval/OaProgressChain.vue` | `multi` 文案 |
| Modify: `web-admin/src/views/oa-approval/start/index.vue` | 提交校验读类型列表 |
**Locked rules (from spec):**
- 仅抄送多选;审批忽略 `assigneeTypes`。
- 运行时软跳过 + 允许 0 人。
- 发布:≥1 种;勾了 users/oa_roles 必须有值。
- 双写 `assigneeType = assigneeTypes[0]`。
- 无需 SQL。
---
### Task 1: `normalize_cc_assignee_types` + `resolve_cc_assignees`(TDD)
**Files:**
- Modify: `backend/app/services/oa_assignee.py`
- Modify: `backend/tests/test_oa_assignee.py`
- [ ] **Step 1: 写失败测例(追加到 `TestOaAssignee`)**
```python
from app.services.oa_assignee import (
AssigneeResolveError,
normalize_cc_assignee_types,
resolve_assignees,
resolve_cc_assignees,
)
def test_normalize_prefers_assignee_types(self):
self.assertEqual(
normalize_cc_assignee_types(
{"assigneeTypes": ["users", "dept_leader", "users", "bad"], "assigneeType": "oa_roles"}
),
["users", "dept_leader"],
)
def test_normalize_fallback_single(self):
self.assertEqual(
normalize_cc_assignee_types({"assigneeType": "initiator_select"}),
["initiator_select"],
)
self.assertEqual(normalize_cc_assignee_types({}), [])
def test_resolve_cc_union_dedupe(self):
db = MagicMock()
with patch(
"app.services.oa_assignee.resolve_assignees",
side_effect=[
(["u1", "u2"], {"resolve_source": "users"}),
(["u2", "u3"], {"resolve_source": "dept_leader"}),
],
) as mock_resolve:
users, meta = resolve_cc_assignees(
db,
tenant_no="zkxw",
assignee_config={
"assigneeTypes": ["users", "dept_leader"],
"userIds": ["u1", "u2"],
},
initiator_user_id="zhang",
initiator_dept_id="d1",
)
self.assertEqual(users, ["u1", "u2", "u3"])
self.assertEqual(meta.get("resolve_source"), "multi")
self.assertEqual(meta.get("sources"), ["users", "dept_leader"])
self.assertEqual(mock_resolve.call_count, 2)
def test_resolve_cc_skips_failed_strategy(self):
db = MagicMock()
with patch(
"app.services.oa_assignee.resolve_assignees",
side_effect=[
AssigneeResolveError("部门负责人未配置"),
(["u1"], {"resolve_source": "users"}),
],
):
users, meta = resolve_cc_assignees(
db,
tenant_no="zkxw",
assignee_config={
"assigneeTypes": ["dept_leader", "users"],
"userIds": ["u1"],
},
initiator_user_id="zhang",
initiator_dept_id="d1",
)
self.assertEqual(users, ["u1"])
self.assertEqual(meta.get("resolve_source"), "users")
self.assertEqual(len(meta.get("skipped") or []), 1)
def test_resolve_cc_all_fail_returns_empty(self):
db = MagicMock()
with patch(
"app.services.oa_assignee.resolve_assignees",
side_effect=AssigneeResolveError("fail"),
):
users, meta = resolve_cc_assignees(
db,
tenant_no="zkxw",
assignee_config={"assigneeTypes": ["dept_leader"]},
initiator_user_id="zhang",
initiator_dept_id="d1",
)
self.assertEqual(users, [])
self.assertTrue(meta.get("skipped"))
def test_resolve_cc_legacy_single_type(self):
db = MagicMock()
with patch(
"app.services.oa_assignee.resolve_assignees",
return_value=(["u1"], {"resolve_source": "users"}),
) as mock_resolve:
users, meta = resolve_cc_assignees(
db,
tenant_no="zkxw",
assignee_config={"assigneeType": "users", "userIds": ["u1"]},
initiator_user_id="zhang",
)
self.assertEqual(users, ["u1"])
self.assertEqual(meta.get("resolve_source"), "users")
single_cfg = mock_resolve.call_args.kwargs["assignee_config"]
self.assertEqual(single_cfg.get("assigneeType"), "users")
```
- [ ] **Step 2: 跑测确认失败**
```bash
cd backend && source venv/bin/activate && pytest tests/test_oa_assignee.py::TestOaAssignee::test_normalize_prefers_assignee_types tests/test_oa_assignee.py::TestOaAssignee::test_resolve_cc_union_dedupe -v
```
Expected: FAIL(函数未定义)
- [ ] **Step 3: 实现 helper + `resolve_cc_assignees`**
在 `oa_assignee.py` 增加:
```python
VALID_ASSIGNEE_TYPES = frozenset(
{
"users",
"oa_roles",
"dept_leader",
"direct_supervisor",
"initiator_select",
}
)
def normalize_cc_assignee_types(assignee_config: Optional[Dict[str, Any]]) -> List[str]:
cfg = assignee_config or {}
raw = cfg.get("assigneeTypes") or cfg.get("assignee_types")
out: List[str] = []
seen = set()
if isinstance(raw, list) and raw:
for item in raw:
t = str(item or "").strip()
if t in VALID_ASSIGNEE_TYPES and t not in seen:
seen.add(t)
out.append(t)
return out
single = (cfg.get("assigneeType") or cfg.get("assignee_type") or "").strip()
if single in VALID_ASSIGNEE_TYPES:
return [single]
return []
def resolve_cc_assignees(
db: Session,
*,
tenant_no: str,
assignee_config: Dict[str, Any],
initiator_user_id: str,
initiator_dept_id: Optional[str] = None,
advanced: Optional[Dict[str, Any]] = None,
initiator_select_user_ids: Optional[List[str]] = None,
) -> Tuple[List[str], Dict[str, Any]]:
"""抄送多策略软并集:单策略失败/空则跳过;全部无人返回 [],不抛错。"""
cfg = assignee_config or {}
types = normalize_cc_assignee_types(cfg)
merged: List[str] = []
seen = set()
sources: List[str] = []
skipped: List[Dict[str, str]] = []
for t in types:
single_cfg = {**cfg, "assigneeType": t}
try:
users, meta = resolve_assignees(
db,
tenant_no=tenant_no,
assignee_config=single_cfg,
initiator_user_id=initiator_user_id,
initiator_dept_id=initiator_dept_id,
advanced=advanced,
initiator_select_user_ids=initiator_select_user_ids,
)
except AssigneeResolveError as e:
skipped.append({"type": t, "reason": str(e)})
continue
if not users:
skipped.append({"type": t, "reason": "empty"})
continue
src = str((meta or {}).get("resolve_source") or t)
sources.append(src)
for uid in users:
if uid and uid not in seen:
seen.add(uid)
merged.append(uid)
if len(sources) == 1:
resolve_source = sources[0]
elif len(sources) > 1:
resolve_source = "multi"
else:
resolve_source = ""
return merged, {
"resolve_source": resolve_source,
"sources": sources,
"skipped": skipped,
"assigneeTypes": types,
}
```
- [ ] **Step 4: 跑全文件测例**
```bash
cd backend && source venv/bin/activate && pytest tests/test_oa_assignee.py -v
```
Expected: PASS
- [ ] **Step 5: Commit**(仅当用户明确要求提交时执行;否则跳过)
```bash
git add backend/app/services/oa_assignee.py backend/tests/test_oa_assignee.py
git commit -m "$(cat <<'EOF'
feat(oa): add resolve_cc_assignees for multi-strategy CC soft union
EOF
)"
```
---
### Task 2: 发布校验支持抄送 `assigneeTypes`
**Files:**
- Modify: `backend/app/services/oa_publish.py`(`validate_flow_tree` 内 approval/cc 分支)
- Modify: `backend/tests/test_oa_publish.py`
- [ ] **Step 1: 写失败测例**
以 `test_oa_publish.py` 现有 `validate_flow_tree` 调用签名为准。示例:
```python
def test_cc_multi_types_ok(self):
flow = {
"type": "start",
"child": {
"type": "cc",
"name": "抄送",
"approverConfig": {
"assigneeTypes": ["users", "dept_leader"],
"userIds": ["u1"],
},
"child": {"type": "end"},
},
}
errs = validate_flow_tree(flow, form_fields=set())
self.assertEqual(errs, [])
def test_cc_multi_users_empty_fails(self):
flow = {
"type": "start",
"child": {
"type": "cc",
"name": "抄送",
"approverConfig": {
"assigneeTypes": ["users", "initiator_select"],
"userIds": [],
},
"child": {"type": "end"},
},
}
errs = validate_flow_tree(flow, form_fields=set())
self.assertTrue(any("指定成员" in e for e in errs))
def test_cc_no_types_fails(self):
flow = {
"type": "start",
"child": {
"type": "cc",
"name": "抄送",
"approverConfig": {},
"child": {"type": "end"},
},
}
errs = validate_flow_tree(flow, form_fields=set())
self.assertTrue(len(errs) >= 1)
def test_approval_ignores_assignee_types_array(self):
flow = {
"type": "start",
"child": {
"type": "approval",
"name": "审批",
"approverConfig": {"assigneeTypes": ["dept_leader"]},
"child": {"type": "end"},
},
}
errs = validate_flow_tree(flow, form_fields=set())
self.assertTrue(len(errs) >= 1)
```
- [ ] **Step 2: 跑测确认失败**
```bash
cd backend && source venv/bin/activate && pytest tests/test_oa_publish.py -k "cc_multi or cc_no_types or approval_ignores" -v
```
Expected: FAIL 或断言不符
- [ ] **Step 3: 改 `validate_flow_tree`**
从 `oa_assignee` 导入 `VALID_ASSIGNEE_TYPES`、`normalize_cc_assignee_types`(删除 publish 内重复集合,避免漂移)。
将原 `if ntype in ("approval", "cc"):` 拆成:
- **approval**:只认单字段 `assigneeType`(逻辑与现网一致)。
- **cc**:`types = normalize_cc_assignee_types(cfg)`;空则报错;对每个类型校验 users/oa_roles 非空。
- [ ] **Step 4: 跑发布测例**
```bash
cd backend && source venv/bin/activate && pytest tests/test_oa_publish.py -v
```
Expected: PASS
- [ ] **Step 5: Commit**(用户要求时)
```bash
git add backend/app/services/oa_publish.py backend/tests/test_oa_publish.py
git commit -m "$(cat <<'EOF'
feat(oa): validate CC assigneeTypes on publish
EOF
)"
```
---
### Task 3: 引擎抄送路径改用 `resolve_cc_assignees`
**Files:**
- Modify: `backend/app/services/oa_engine.py`
- Modify: 相关 tests 中 `patch("app.services.oa_engine.resolve_assignees")`(抄送路径需改 patch `resolve_cc_assignees` 或双 patch)
- [ ] **Step 1: 更新 import**
```python
from app.services.oa_assignee import (
AssigneeResolveError,
normalize_cc_assignee_types,
resolve_assignees,
resolve_cc_assignees,
)
```
- [ ] **Step 2: 改 `_create_tasks_for_node`**
- `cc`:调用 `resolve_cc_assignees`;`assignees` 空则 `return created`;删除「仅 initiator_select 且空 early return」旧特判。
- `approval`:保持 `resolve_assignees` + 自选空抛错。
- [ ] **Step 3: 改 `_pending_people_for_node`**
- `cc`:走 `resolve_cc_assignees`,第三返回值用 `meta.resolve_source`(或 types 推导的 `multi`/单类型)。
- `approval`:逻辑不变。
- [ ] **Step 4: 改 `_walk_preview_nodes` 抄送块**
锁定展示约定:
- 增加 `assigneeTypes: types`。
- `assigneeType`:若含 `initiator_select` → `"initiator_select"`(旧前端仍出 ➕);否则单类型用该类型,多类型用 `"multi"`。
- `people`:`resolve_cc_assignees` 并集结果。
- `meta`:多类型时用 `" + ".join(中文标签)`(可抽 `_assignee_meta_for_cc`)。
- [ ] **Step 5: 跑相关测例并修 patch**
```bash
cd backend && source venv/bin/activate && pytest tests/test_oa_assignee.py tests/test_oa_publish.py tests/test_oa_initiator_select_by_node.py tests/test_oa_flow_preview.py tests/test_oa_engine.py tests/test_oa_auto_pass_initiator.py -v
```
Expected: PASS
- [ ] **Step 6: Commit**(用户要求时)
```bash
git add backend/app/services/oa_engine.py backend/tests/
git commit -m "$(cat <<'EOF'
feat(oa): resolve CC tasks with multi-strategy soft union
EOF
)"
```
---
### Task 4: 前端类型 + 设计器多选 UI
**Files:**
- Modify: `web-admin/src/components/oa-approval/flow-tree/types.ts`
- Modify: `web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue`
- [ ] **Step 1: `types.ts`**
- `ApproverConfig` 增加可选 `assigneeTypes?: AssigneeType[]`;`assigneeType` 改为可选(兼容)。
- 新增 `normalizeCcAssigneeTypes(cfg)`。
- `summarizeApprover(cfg, nodeType?)`:抄送按类型拼接 `A + B`,过长截断;审批保持原逻辑。
- `createNode('cc')` 默认:`{ assigneeTypes: ['initiator_select'], assigneeType: 'initiator_select' }`。
- 所有 `summarizeApprover(` 调用传入 `node.type`。
- [ ] **Step 2: `FlowDesigner.vue` UI**
- 抄送:分段按钮多选 toggle;`users`/`oa_roles` 区按 `assigneeTypes.includes` 同时可显。
- 审批:仍单选 `setAssigneeType`。
- 副标题抄送:`可同时选择多种方式,抄送时合并去重`。
- [ ] **Step 3: `openEdit` / `applyEdit`**
- 打开抄送:`cfg.assigneeTypes = normalizeCcAssigneeTypes(ac)`,空则默认 `['initiator_select']`。
- 保存抄送:校验 ≥1 种;勾了 users/roles 必须有值;写入 `assigneeTypes` + 双写 `assigneeType = types[0]`;保留 `userIds`/`oaRoleIds`。
- 保存审批:不写 `assigneeTypes`。
- [ ] **Step 4: 目视设计器**
多选、双区同显、0 种确定拦截。
- [ ] **Step 5: Commit**(用户要求时)
```bash
git add web-admin/src/components/oa-approval/flow-tree/types.ts web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue
git commit -m "$(cat <<'EOF'
feat(oa): allow multi assignee strategies on CC node designer
EOF
)"
```
---
### Task 5: 发起预览 / 进度文案适配
**Files:**
- Modify: `web-admin/src/api/oaApproval.ts`
- Modify: `web-admin/src/components/oa-approval/OaFlowPreview.vue`
- Modify: `web-admin/src/components/oa-approval/OaProgressChain.vue`
- Modify: `web-admin/src/views/oa-approval/start/index.vue`
- [ ] **Step 1: `OaFlowPreviewStep` 增加 `assigneeTypes?: string[]`**
- [ ] **Step 2: `isInitiatorSelect`**
```ts
function stepAssigneeTypes(s: OaFlowPreviewStep): string[] {
if (Array.isArray(s.assigneeTypes) && s.assigneeTypes.length) return s.assigneeTypes
return s.assigneeType ? [s.assigneeType] : []
}
function isInitiatorSelect(s: OaFlowPreviewStep) {
if (!(s.type === 'approval' || s.type === 'cc')) return false
return stepAssigneeTypes(s).includes('initiator_select')
}
```
- [ ] **Step 3: 抄送自选 + 固定人并集展示**
```ts
function displayPeople(s: OaFlowPreviewStep) {
if (!isInitiatorSelect(s)) return s.people || []
const fromLocal = localPeople(s)
if (s.type !== 'cc') return fromLocal
const map = new Map<string, { id: string; nickName: string }>()
for (const p of s.people || []) {
if (p?.id) map.set(p.id, { id: p.id, nickName: p.nickName || p.id })
}
for (const p of fromLocal) map.set(p.id, p)
return [...map.values()]
}
```
模板自选节点人员区改用 `displayPeople(s)`。
- [ ] **Step 4: `OaProgressChain.resolveSourceText` 增加 `multi: '多种选人方式'`**
- [ ] **Step 5: `start/index.vue` 审批自选校验改为 `types.includes('initiator_select')`**
- [ ] **Step 6: 手测**
1. 旧单 `assigneeType` 抄送正常。
2. users + dept_leader 两人抄送。
3. users + initiator_select:固定人可见且可 ➕。
4. 仅自选不选人可发起。
5. 审批仍单选。
- [ ] **Step 7: Commit**(用户要求时)
```bash
git add web-admin/src/api/oaApproval.ts web-admin/src/components/oa-approval/OaFlowPreview.vue web-admin/src/components/oa-approval/OaProgressChain.vue web-admin/src/views/oa-approval/start/index.vue
git commit -m "$(cat <<'EOF'
feat(oa): preview and progress support CC multi assigneeTypes
EOF
)"
```
---
### Task 6: 回归与图谱
- [ ] **Step 1: 后端相关测全绿**
```bash
cd backend && source venv/bin/activate && pytest tests/test_oa_assignee.py tests/test_oa_publish.py tests/test_oa_initiator_select_by_node.py tests/test_oa_flow_preview.py tests/test_oa_engine.py tests/test_oa_auto_pass_initiator.py -v
```
- [ ] **Step 2: 更新知识图谱**
```bash
./scripts/update-graph.sh all
```
- [ ] **Step 3: 对照 spec §9 勾选手测 8 条**
---
## Spec coverage checklist
| Spec 项 | Task |
|---------|------|
| `assigneeTypes` + 旧字段回退 | Task 1, 4 |
| `resolve_cc_assignees` 软并集 / 0 人 | Task 1, 3 |
| 发布校验 | Task 2 |
| 引擎建任务 / 预览 / 未达 | Task 3 |
| 设计器多选 UI | Task 4 |
| 发起 ➕ / people 并集展示 | Task 5 |
| 审批不变 | Task 2/3/4 显式隔离 |
| 无 SQL | — |
## Placeholder scan
无 TBD;关键实现与测例已写出。Commit 步骤默认跳过,除非用户要求提交。
@@ -0,0 +1,227 @@
# 抄送人节点 · 多种选人方式并集(钉钉式)
**日期:** 2026-07-30
**范围:**
- `web-admin` 审批设计器「3 流程设计」· 抄送人节点配置(`FlowDesigner.vue` / `flow-tree/types.ts`)
- `backend` 发布校验(`oa_publish.py`)、审批人解析(`oa_assignee.py`)、引擎建任务 / 预览 / 进度(`oa_engine.py`)
- 发起预览中「发起人自选」判定与人员并集(`OaFlowPreview` 等相关前端)
**关联:**
- `docs/superpowers/specs/2026-07-14-oa-approval-dingtalk-design.md` §5.3(选人策略)
- `docs/superpowers/specs/2026-07-23-oa-initiator-select-in-flow-design.md`(抄送自选可空)
- 产品对照:钉钉审批 · 抄送人可同时启用多种选人方式,结果取并集
---
## 1. 背景与目标
### 现状
- 审批人 / 抄送人节点共用 `approverConfig.assigneeType`(单值),设计器为分段**单选**。
- 五种方式:`users` | `oa_roles` | `dept_leader` | `direct_supervisor` | `initiator_select`。
- 引擎 `resolve_assignees` 按单一类型硬分支;失败则抛 `AssigneeResolveError`。
- 抄送特例:仅当 `assigneeType === initiator_select` 且发起人未选人时,跳过建任务且不报错。
### 目标
1. **仅抄送人**节点支持同时勾选多种选人方式,运行时对各方式解析结果**并集去重**后建抄送任务。
2. 运行时:**软跳过**失败/空策略;最终 0 人时**不报错、不建任务**(对齐现有「发起人自选抄送可空」)。
3. 发布时:至少勾选 1 种;勾了 `users` / `oa_roles` 则必须已配置成员/角色。
4. **兼容**已发布/草稿中仅含旧字段 `assigneeType` 的抄送配置,行为与现网一致。
### 非目标
- 不改**审批人**节点(仍单选一种 + 或签/会签)。
- 不新增数据库表或列(流程定义仍为 JSON)。
- 不改变抄送任务「建即 done / 不阻断流程」语义。
- 不做历史实例数据回填迁移脚本(只读兼容即可)。
---
## 2. 产品约定(已确认)
| 项 | 结论 |
|----|------|
| 范围 | **仅抄送人**;审批人保持单选 |
| 运行时合并 | 各勾选方式独立解析 → 人 ID **并集去重**(保序:按 `assigneeTypes` 顺序,同策略内保持原序) |
| 单策略失败/空 | **软跳过**该策略,继续其它策略 |
| 最终 0 人 | **不报错**,不创建抄送任务,流程继续 |
| 发布校验 | 必须勾选 ≥1 种;`users` / `oa_roles` 若勾选则配置不可空;`dept_leader` / `direct_supervisor` / `initiator_select` 勾选即可 |
| 取消勾选 | UI 可不清空已填 `userIds` / `oaRoleIds`;发布只校验**当前勾选**的策略 |
| 发起人自选并存 | 仍按节点 ➕ 选人;自选列表可空;与固定策略结果并集 |
---
## 3. 配置模型
### 3.1 类型(前端 `ApproverConfig`)
```ts
export interface ApproverConfig {
/** 审批人:单选(必填)。抄送人:兼容旧数据 / 可选双写首项 */
assigneeType?: AssigneeType
/** 抄送人:多选选人方式(优先)。审批人:不使用 */
assigneeTypes?: AssigneeType[]
userIds?: string[]
oaRoleIds?: string[]
oaRoleCodes?: string[]
signMode?: 'or' | 'and' // 仅审批有意义;抄送引擎侧仍固定 cc
}
```
### 3.2 写入约定(设计器保存抄送节点)
- 写入非空 `assigneeTypes`(去重、仅含合法枚举、保持勾选顺序)。
- **双写** `assigneeType = assigneeTypes[0]`,便于未改完的只读展示兜底。
- `userIds` / `oaRoleIds` 始终可随表单保留;解析时仅当对应类型在 `assigneeTypes` 中才使用。
### 3.3 读取约定(后端 / 前端统一 helper)
对节点 `approverConfig`:
1. 若 `assigneeTypes` 为非空数组 → 过滤非法项后作为类型列表(抄送多选)。
2. 否则若存在非空 `assigneeType` → `[assigneeType]`。
3. 否则 → `[]`(发布校验会拦;运行时抄送视为 0 人)。
审批节点:**忽略** `assigneeTypes`(即使误写入),只认 `assigneeType`。
---
## 4. 解析与引擎
### 4.1 `oa_assignee.py`
保留现有 `resolve_assignees`(单策略、失败抛错)供审批使用。
新增(名称可微调,语义如下):
```text
resolve_cc_assignees(...) -> (user_ids: List[str], meta: Dict)
```
行为:
1. 用 §3.3 得到 `types`。
2. 对每个 `t in types`:构造单策略临时 config,调用现有单策略逻辑(或内联相同分支)。
3. `try/except AssigneeResolveError`:捕获则跳过该策略,并在 `meta.skipped` 记录 `{ type, reason }`。
4. 单策略返回空列表:视为跳过(不抛错)。
5. 合并去重;`meta.resolve_source` 建议:
- 仅一种成功:该策略名(兼容旧展示)
- 多种成功:`"multi"`,并带 `sources: [...]`
6. **永不因「全部失败」抛错**;返回 `([], meta)` 合法。
`initiator_select`:仍使用调用方传入的 `initiator_select_user_ids`;空则该策略跳过。
### 4.2 `oa_engine.py` · `_create_tasks_for_node`(及预览同类路径)
对 `ntype == "cc"`:
- 调用 `resolve_cc_assignees`(不再先特判「仅 initiator_select 且空则 return」——该语义被多策略软跳过覆盖)。
- 若 `assignees` 为空 → `return created`(不抛错)。
- 非空 → 按现逻辑为每人建 `task_type=cc`、`status=done` 任务。
对 `ntype == "approval"`:行为不变(`resolve_assignees` + 硬失败;自选空仍抛错)。
预览 / 进度未达节点解析抄送人员:同样走 `resolve_cc_assignees`,空列表展示为无人抄送(不阻断预览)。
### 4.3 发起预览前端
判断节点是否可 ➕ 自选:
- 旧:`assigneeType === 'initiator_select'`
- 新:类型列表(§3.3)**包含** `initiator_select`
固定策略解析出的人只读展示;自选人仍写入按节点 map,提交后与固定人并集由引擎完成。
---
## 5. 发布校验(`oa_publish.py`)
对 `type === "cc"`:
| 条件 | 结果 |
|------|------|
| 类型列表为空 | 错误:未配置抄送人策略 |
| 含非法类型 | 错误 |
| 含 `users` 且 `userIds` 为空 | 错误:指定成员不能为空 |
| 含 `oa_roles` 且角色 id/code 皆空 | 错误:工作流角色不能为空 |
| 仅含 dept_leader / direct_supervisor / initiator_select | 通过 |
对 `type === "approval"`:保持现有单 `assigneeType` 校验,**不**启用 `assigneeTypes`。
---
## 6. 设计器 UI
### 6.1 抄送人抽屉
- 「选人方式」分段控件改为**多选**:再次点击已选可取消(取消后若变为 0 种,确定保存前前端提示至少一种;发布后端再拦一道)。
- 勾选 `users` 时展示指定成员区;勾选 `oa_roles` 时展示角色区;**可同时展开**。
- 副标题可改为:「可同时选择多种方式,抄送时合并去重」。
### 6.2 审批人抽屉
- 保持单选;逻辑与现网一致。
### 6.3 画布摘要
- 抄送:多种时拼接标签,如 `指定成员 + 部门负责人`;过长可截断。
- 审批:不变。
---
## 7. 兼容与迁移
| 场景 | 行为 |
|------|------|
| 旧抄送仅有 `assigneeType` | 读作单元素列表;运行/发布与现网一致 |
| 新抄送有 `assigneeTypes` | 按多选;双写首项 `assigneeType` |
| 旧运行中实例 | 已落库任务不受影响;未达节点若重解析则走新逻辑(旧 JSON 无 `assigneeTypes` 时仍单策略) |
| 审批节点误带 `assigneeTypes` | 引擎/发布忽略,只认 `assigneeType` |
无需 SQL patch。
---
## 8. 主要改动文件
| 路径 | 变更 |
|------|------|
| `web-admin/.../flow-tree/types.ts` | `assigneeTypes`;摘要文案;默认抄送配置 |
| `web-admin/.../flow-tree/FlowDesigner.vue` | 抄送多选 UI;读写;校验提示 |
| `web-admin/.../OaFlowPreview.vue`(及同类) | `includes('initiator_select')` |
| `web-admin/.../OaProgressChain.vue`(若展示策略名) | 支持 `multi` / 多标签 |
| `backend/app/services/oa_assignee.py` | `resolve_cc_assignees` |
| `backend/app/services/oa_publish.py` | 抄送多类型校验 |
| `backend/app/services/oa_engine.py` | 抄送建任务/预览走新解析 |
| `backend/tests/`(若有 OA 测例) | 并集、软跳过、0 人、发布校验、旧字段兼容 |
---
## 9. 测试要点
1. **兼容**:旧单 `assigneeType=users` 抄送,指定成员仍抄送成功。
2. **并集**:勾选指定成员 A + 部门负责人 B(且 B 有效)→ 两人收到抄送。
3. **软跳过**:勾选部门负责人(未配置)+ 有效指定成员 → 仅抄送指定成员,发起/推进不报错。
4. **0 人**:仅勾发起人自选且发起不选人 → 不建抄送任务,流程可发起/可推进。
5. **全失败**:仅勾部门负责人且未配置 → 不建任务、不报错。
6. **发布**:勾选指定成员但未选人 → 发布失败;至少勾一种通过。
7. **审批回归**:审批人仍单选;多人会签/或签/自选必填行为不变。
8. **发起 ➕**:抄送 `assigneeTypes` 含 `initiator_select` 时节点仍可点选加人。
---
## 10. 开放细节(实现时可定,不阻规格)
- `meta.resolve_source === "multi"` 时进度文案具体用「多种选人方式」还是拼接中文标签——实现时与现有 `OaProgressChain` 文案表对齐即可。
- 设计器取消最后一种选人方式时:禁止取消 vs 允许取消但确定时 ElMessage 拦截——推荐后者与发布校验一致。
---
## 修订记录
| 日期 | 说明 |
|------|------|
| 2026-07-30 | 初稿:仅抄送多选;软跳过+允许 0 人;发布至少一种且 users/roles 配置要齐;`assigneeTypes` + 旧字段兼容 + 双写首项 |
@@ -0,0 +1,16 @@
# OA 表单控件 · 职位(post)
**日期:** 2026-07-30
**范围:** 审批设计「2 表单设计」左侧组件「职位」;发起/详情运行时;条件分支「包含」;发布与发起校验。
**已确认:**
| 项 | 结论 |
|----|------|
| 数据源 | 职位管理 `sys_post` / `fetchPostList`,展示 `postName` |
| 选择模式 | 默认多选(与人员/部门一致) |
| Tag 展示 | 完整换行,不用 collapse-tags / +1/+2 |
| 条件分支 | 参与;运算符仅「包含」(与人员一致) |
| 值结构 | `{ id, name }` 或数组;`name` = `postName` |
**非目标:** 不改职位管理 CRUD;不新建独立 options 接口。
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+116 -114
View File
@@ -1,11 +1,11 @@
# Graph Report - src (2026-07-30)
## Corpus Check
- Large corpus: 915 files · ~609,888 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
- Large corpus: 919 files · ~612,783 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
## Summary
- 3205 nodes · 4499 edges · 63 communities detected
- Extraction: 78% EXTRACTED · 22% INFERRED · 0% AMBIGUOUS · INFERRED: 998 edges (avg confidence: 0.8)
- 3202 nodes · 4492 edges · 63 communities detected
- Extraction: 78% EXTRACTED · 22% INFERRED · 0% AMBIGUOUS · INFERRED: 997 edges (avg confidence: 0.8)
- Token cost: 0 input · 0 output
## Community Hubs (Navigation)
@@ -52,9 +52,9 @@
- [[_COMMUNITY_Community 41|Community 41]]
- [[_COMMUNITY_Community 42|Community 42]]
- [[_COMMUNITY_Community 43|Community 43]]
- [[_COMMUNITY_Community 44|Community 44]]
- [[_COMMUNITY_Community 47|Community 47]]
- [[_COMMUNITY_Community 48|Community 48]]
- [[_COMMUNITY_Community 49|Community 49]]
- [[_COMMUNITY_Community 50|Community 50]]
- [[_COMMUNITY_Community 51|Community 51]]
- [[_COMMUNITY_Community 52|Community 52]]
- [[_COMMUNITY_Community 53|Community 53]]
@@ -63,8 +63,8 @@
- [[_COMMUNITY_Community 56|Community 56]]
- [[_COMMUNITY_Community 57|Community 57]]
- [[_COMMUNITY_Community 59|Community 59]]
- [[_COMMUNITY_Community 60|Community 60]]
- [[_COMMUNITY_Community 64|Community 64]]
- [[_COMMUNITY_Community 63|Community 63]]
- [[_COMMUNITY_Community 65|Community 65]]
- [[_COMMUNITY_Community 66|Community 66]]
- [[_COMMUNITY_Community 71|Community 71]]
- [[_COMMUNITY_Community 74|Community 74]]
@@ -76,7 +76,7 @@
## God Nodes (most connected - your core abstractions)
1. `get()` - 300 edges
2. `push()` - 97 edges
3. `emit()` - 29 edges
3. `emit()` - 28 edges
4. `WebSocketClient` - 26 edges
5. `set()` - 21 edges
6. `handleDynamicRoutes()` - 18 edges
@@ -86,54 +86,54 @@
10. `TableCache` - 14 edges
## Surprising Connections (you probably didn't know these)
- `formatReceiveAccountLine()` --calls--> `push()` [INFERRED]
utils/oa-receive-account-value.ts → views/operations/storage-facility/index.vue
- `dash()` --calls--> `formatDisplayOrDash()` [INFERRED]
components/business/infusion-schedule-outbound-chain-view/index.vue → utils/datetime-display.ts
- `dash()` --calls--> `formatDisplayOrDash()` [INFERRED]
components/business/clinical-schedule-payment-detail/index.vue → utils/datetime-display.ts
- `fmtMoney()` --calls--> `formatMoneyDisplay()` [INFERRED]
components/business/clinical-schedule-payment-detail/index.vue → utils/money-format.ts
- `defaultInstallmentRatios()` --calls--> `push()` [INFERRED]
utils/protocol-payment-installment.ts → views/operations/storage-facility/index.vue
- `calcUnpaidAmountsByRatios()` --calls--> `push()` [INFERRED]
utils/protocol-payment-installment.ts → views/operations/storage-facility/index.vue
- `handleAttachmentDownload()` --calls--> `downloadAttachmentFile()` [INFERRED]
components/business/infusion-schedule-outbound-chain-view/index.vue → utils/download-attachment.ts
## Communities
### Community 0 - "Community 0"
Cohesion: 0.01
Nodes (179): fetchAccessLogList(), fetchActiveRegions(), fetchCategoryList(), fetchCategoryParameters(), fetchCellProductPriceList(), fetchCellProductSpecList(), fetchCellProductTypeList(), fetchChannelAccount() (+171 more)
Nodes (178): fetchAccessLogList(), fetchActiveRegions(), fetchCategoryList(), fetchCategoryParameters(), fetchCellProductPriceList(), fetchCellProductSpecList(), fetchCellProductTypeList(), fetchChannelAccount() (+170 more)
### Community 1 - "Community 1"
Cohesion: 0.02
Nodes (75): fetchUploadAttachment(), fetchOaInstanceDetail(), fetchOaTasks(), FireworkSystem, currentPrinterName(), load(), openDetail(), printRow() (+67 more)
Cohesion: 0.03
Nodes (90): batchSavePilotCheckup(), deletePilotCheckupActualItem(), fetchCheckupInstitutionList(), fetchCheckupInstitutionPackageDetail(), fetchCheckupInstitutionPackages(), fetchPilotCheckupActualItems(), fetchPilotCheckupDetail(), fetchPilotCheckupList() (+82 more)
### Community 2 - "Community 2"
Cohesion: 0.03
Nodes (83): batchSavePilotCheckup(), deletePilotCheckupActualItem(), fetchCheckupInstitutionList(), fetchCheckupInstitutionPackageDetail(), fetchCheckupInstitutionPackages(), fetchPilotCheckupDetail(), fetchPilotCheckupList(), markPilotCheckupChecked() (+75 more)
Nodes (81): fetchUploadAttachment(), fetchOaInstanceDetail(), fetchOaRelatedSummaries(), fetchOaTasks(), FireworkSystem, currentPrinterName(), load(), openDetail() (+73 more)
### Community 3 - "Community 3"
Cohesion: 0.03
Nodes (61): fetchChinaRegionTree(), fetchBatchDeleteOaReceiveAccounts(), fetchCreateOaReceiveAccount(), fetchCreateOaRole(), fetchDeleteOaReceiveAccount(), fetchDeleteOaRole(), fetchOaAppDraft(), fetchOaAppList() (+53 more)
Nodes (64): fetchCheckupInstitutionInvoices(), fetchCheckupInstitutionProjects(), fetchCreateCheckupInstitution(), fetchCreateCheckupInstitutionInvoice(), fetchCreateCheckupInstitutionProject(), fetchUpdateCheckupInstitution(), fetchUpdateCheckupInstitutionInvoice(), fetchUpdateCheckupInstitutionProject() (+56 more)
### Community 4 - "Community 4"
Cohesion: 0.03
Nodes (37): handleBlur(), handleFocus(), handleInput(), fetchQcMaterialBatchDetail(), fetchQcMaterialBatchList(), fetchQcMaterialBatchOptions(), fetchQcMaterialList(), fetchQcMaterialOptions() (+29 more)
Nodes (57): useSettingsHandlers(), useSettingsPanel(), useSettingsState(), RoutePermissionValidator, useCeremony(), useTheme(), if(), branchTitle() (+49 more)
### Community 5 - "Community 5"
Cohesion: 0.03
Nodes (49): useSettingsHandlers(), useSettingsPanel(), useSettingsState(), RoutePermissionValidator, useCeremony(), useTheme(), if(), chipTitle() (+41 more)
Cohesion: 0.02
Nodes (29): fetchAllConsumablePacks(), fetchAllConsumables(), fetchAllConsumableStockLogs(), fetchAllEquipments(), fetchAllOutputTypes(), fetchAllProcessCategories(), fetchAllProcesses(), fetchAllReagents() (+21 more)
### Community 6 - "Community 6"
Cohesion: 0.03
Nodes (33): fetchGetMenuList(), ComponentLoader, IframeRouteManager, MenuProcessor, RouteRegistry, RouteTransformer, useAppMode(), useAuth() (+25 more)
### Community 7 - "Community 7"
Cohesion: 0.04
Nodes (69): formatNowDatetime(), formatTodayDate(), addPaymentDetail(), applyFqPaymentDefaults(), applyPaymentPresetForMode(), createEmptyTransport(), datetimeToYmd(), defaultInstallmentStartDateYmd() (+61 more)
### Community 7 - "Community 7"
Cohesion: 0.03
Nodes (53): fetchBatchDeleteOaReceiveAccounts(), fetchCreateOaReceiveAccount(), fetchCreateOaRole(), fetchDeleteOaReceiveAccount(), fetchDeleteOaRole(), fetchOaAppDraft(), fetchOaAppList(), fetchOaGroupList() (+45 more)
### Community 8 - "Community 8"
Cohesion: 0.03
Nodes (59): fetchFullmoonTodoList(), fetchUpdateFullmoonTodoInsurance(), fetchCollectionProtocolAuditList(), fetchCollectionProtocolDetail(), fetchCollectionProtocolList(), fetchCreateProtocolInvoiceRequest(), fetchInvoiceEligiblePayments(), fetchPaymentDetailList() (+51 more)
Nodes (55): buildInboundBasicSection(), buildInboundCellStorageViewSections(), buildInboundResearchDonationViewSections(), buildReceptionSection(), buildTemporaryViewSections(), buildTransportSection(), resolveInboundProtocolStatus(), buildInsertedSiblingCard() (+47 more)
### Community 9 - "Community 9"
Cohesion: 0.03
@@ -141,160 +141,160 @@ Nodes (56): fetchMyProductionTasks(), fetchMyQcTaskList(), fetchQcTaskDetail(),
### Community 10 - "Community 10"
Cohesion: 0.03
Nodes (51): fetchCheckupInstitutionInvoices(), fetchCheckupInstitutionProjects(), fetchCreateCheckupInstitution(), fetchCreateCheckupInstitutionInvoice(), fetchCreateCheckupInstitutionProject(), fetchUpdateCheckupInstitution(), fetchUpdateCheckupInstitutionInvoice(), fetchUpdateCheckupInstitutionProject() (+43 more)
Nodes (58): fetchFullmoonTodoList(), fetchUpdateFullmoonTodoInsurance(), fetchCollectionProtocolAuditList(), fetchCollectionProtocolDetail(), fetchCollectionProtocolList(), fetchCreateProtocolInvoiceRequest(), fetchInvoiceEligiblePayments(), fetchPaymentDetailList() (+50 more)
### Community 11 - "Community 11"
Cohesion: 0.04
Nodes (49): buildTemporaryViewSections(), buildInsertedSiblingCard(), resolveShowProtocolPaymentAtGroup(), appendTaskResultSections(), batchTasksForPanelSlot(), buildConfiguredOnlySection(), for(), for() (+41 more)
Nodes (41): fetchGetMenuList(), fetchGetMenuCodes(), fetchGetUserInfo(), fetchLogin(), fetchUpdateProfile(), fetchUploadProfileAvatar(), MenuProcessor, RouteRegistry (+33 more)
### Community 12 - "Community 12"
Cohesion: 0.04
Nodes (49): fetchAddTaskStep(), fetchCopyTaskStep(), fetchDeleteTaskStep(), fetchDispatchProductionTaskSteps(), fetchForwardProductionTask(), fetchProductionTaskDetail(), fetchProductionTaskEditorInit(), fetchProductionTaskList() (+41 more)
Nodes (42): buildBaseFields(), buildFeeSection(), buildInboundBasicSection(), buildInboundCellStorageProductionViewSections(), buildInboundResearchDonationProductionViewSections(), buildOutboundBasicExperimentProductionViewSections(), buildOutboundClinicalProductionViewSections(), buildOutboundDetail() (+34 more)
### Community 13 - "Community 13"
Cohesion: 0.05
Nodes (52): fetchGetMenuCodes(), fetchGetUserInfo(), fetchLogin(), fetchRefreshToken(), fetchUpdateProfile(), fetchUploadProfileAvatar(), fetchUserInfo(), base64ToBytes() (+44 more)
Cohesion: 0.04
Nodes (47): fetchCreateCustomer(), fetchCustomerList(), fetchDeleteCustomer(), fetchUpdateCustomer(), updateInfusionScheduleStatus(), handleDialogClose(), handleAdd(), handleDelete() (+39 more)
### Community 14 - "Community 14"
Cohesion: 0.05
Nodes (52): fetchOaRelatedSummaries(), displayPeople(), personLines(), personTitle(), showNodeComment(), signBadge(), signBadgeText(), statusText() (+44 more)
### Community 15 - "Community 15"
Cohesion: 0.05
Nodes (48): fetchEthnicList(), applyDonationBundleToForm(), createEmptyTransport(), ensureEthnicOptionInList(), handleOpenForAdd(), if(), loadEthnicOptions(), normalizeSampleRow() (+40 more)
### Community 16 - "Community 16"
### Community 15 - "Community 15"
Cohesion: 0.04
Nodes (33): fetchMineProductionWorkOrderTabStepCounts(), fetchMineProductionWorkOrderTabStepCountsDeduped(), fetchProductionWorkOrderCellProductOptions(), fetchProductionWorkOrderDetail(), fetchProductionWorkOrderList(), fetchProductionWorkOrderQcDispatchOptions(), fetchProductionWorkOrderQcInfo(), fetchProductionWorkOrderTabStepCounts() (+25 more)
Nodes (38): fetchCellSampleTypeList(), fetchCreateCellSampleType(), fetchCreateMenu(), fetchDeleteCellSampleType(), fetchDeleteMenu(), fetchMenuTree(), fetchUpdateCellSampleType(), fetchUpdateMenu() (+30 more)
### Community 16 - "Community 16"
Cohesion: 0.06
Nodes (37): attachmentFullUrl(), dash(), handleAttachmentDownload(), handleAttachmentPreview(), buildPaymentFlowSteps(), dash(), formatAmount(), hasFinanceReceipt() (+29 more)
### Community 17 - "Community 17"
Cohesion: 0.05
Nodes (34): fetchClinicalPaymentDetail(), fetchClinicalPayments(), fetchClinicalReceiptConfirmed(), fetchClinicalReceiptPending(), fetchClinicalRefundConfirmed(), fetchClinicalRefundPending(), fetchOrderAdjusts(), fetchOrderDetail() (+26 more)
Cohesion: 0.06
Nodes (41): completePilotApplication(), deletePilotApplication(), fetchPilotApplicationList(), startPilotApplication(), voidPilotApplication(), fetchClinicalRefundConfirmed(), buildConfirmedParams(), buildPendingParams() (+33 more)
### Community 18 - "Community 18"
Cohesion: 0.05
Nodes (34): fetchCreateMenu(), fetchDeleteMenu(), fetchMenuTree(), fetchUpdateMenu(), fetchCreateEnvDetectItem(), fetchDeleteEnvDetectItem(), fetchEnvDetectItemDetail(), fetchEnvDetectItemList() (+26 more)
Nodes (23): handleBlur(), handleFocus(), handleInput(), fetchClinicalReceiptConfirmed(), buildConfirmedParams(), buildPendingParams(), formatAmount(), handleConfirmedReset() (+15 more)
### Community 19 - "Community 19"
Cohesion: 0.05
Nodes (43): completePilotApplication(), deletePilotApplication(), fetchPilotApplicationList(), startPilotApplication(), voidPilotApplication(), branchTitle(), collectConditionReferencedFields(), collectFormConditionReferencedFields() (+35 more)
Cohesion: 0.06
Nodes (38): fetchUserList(), fetchAddTaskStep(), fetchCopyTaskStep(), fetchDeleteTaskStep(), fetchDispatchProductionTaskSteps(), fetchForwardProductionTask(), fetchProductionTaskDetail(), fetchProductionTaskEditorInit() (+30 more)
### Community 20 - "Community 20"
Cohesion: 0.05
Nodes (27): fetchUserList(), fetchProductionReceptionBySampleCode(), fetchProductionReceptionSubmit(), fetchProductionReceptionUpdate(), loadUsers(), formatHandoverUserLabel(), formatNowDatetime(), fullFileUrl() (+19 more)
Cohesion: 0.06
Nodes (22): fetchQcMaterialBatchDetail(), fetchQcMaterialBatchList(), fetchQcMaterialBatchOptions(), fetchQcMaterialList(), fetchQcMaterialOptions(), fetchUpdateQcMaterialBatch(), fetchMarkQcMaterialUsageFullyUsed(), financeAttachmentsToUrlString() (+14 more)
### Community 21 - "Community 21"
Cohesion: 0.04
Nodes (21): fetchAvailableMaterialBatches(), fetchMyProductionMaterialConsumptions(), fetchMyProductionMaterialUsageList(), fetchProductionMaterialBatchList(), fetchProductionMaterialBatchOptions(), fetchProductionMaterialConsumptions(), fetchProductionMaterialFormula(), fetchProductionMaterialLinkedStepUsages() (+13 more)
### Community 22 - "Community 22"
Cohesion: 0.07
Nodes (20): maskIdCard(), buildBasicExperimentApplicationFields(), buildDefaultApplicationFields(), buildOutboundPilotContextSections(), applicationStatusLabel(), applicationStatusTagType(), cellProductStatusLabel(), cellProductStatusTagType() (+12 more)
### Community 23 - "Community 23"
Cohesion: 0.1
Nodes (2): WebSocketClient, TableCache
### Community 22 - "Community 22"
Cohesion: 0.08
Nodes (33): fetchRefreshToken(), toLogin(), base64ToBytes(), bytesToBase64(), decryptJson(), deriveKey(), encryptJson(), fromBase64Url() (+25 more)
### Community 23 - "Community 23"
Cohesion: 0.06
Nodes (11): dash(), fmtMoney(), auditorDisplay(), dash(), ensureUnitsInOptions(), expressName(), formatYm(), formatYmd() (+3 more)
### Community 24 - "Community 24"
Cohesion: 0.07
Nodes (24): fetchMineProductionWorkOrderTabStepCounts(), fetchMineProductionWorkOrderTabStepCountsDeduped(), fetchProductionWorkOrderCellProductOptions(), fetchProductionWorkOrderDetail(), fetchProductionWorkOrderList(), fetchProductionWorkOrderQcDispatchOptions(), fetchProductionWorkOrderQcInfo(), fetchProductionWorkOrderTabStepCounts() (+16 more)
### Community 25 - "Community 25"
Cohesion: 0.09
Nodes (8): getDefaultLanguage(), checkStorageCompatibility(), StorageConfig, getSystemStorage(), getSysVersion(), StorageKeyManager, StorageCompatibilityManager, validateStorageData()
### Community 25 - "Community 25"
### Community 26 - "Community 26"
Cohesion: 0.08
Nodes (12): ComponentLoader, IframeRouteManager, RouteTransformer, getFirstMenuPath(), getFirstSecondLevelMenuPath(), isIframe(), isNavigableMenuItem(), isWorkbenchMenuItem() (+4 more)
### Community 27 - "Community 27"
Cohesion: 0.08
Nodes (18): fetchProductionReceptionBySampleCode(), fetchProductionReceptionSubmit(), fetchProductionReceptionUpdate(), onUserSelectVisible(), remoteSearchUsers(), buildPayload(), ensureDefaultHandler(), initDialog() (+10 more)
### Community 28 - "Community 28"
Cohesion: 0.08
Nodes (20): createEmptySnapshots(), normalizeConfiguredReagents(), normalizeConsumables(), normalizeDataCollections(), normalizeReagents(), normalizeStepOutputs(), serializeAttachments(), serializeEquipmentIds() (+12 more)
### Community 26 - "Community 26"
Cohesion: 0.1
Nodes (28): fetchCreateCustomer(), fetchCustomerList(), fetchDeleteCustomer(), fetchUpdateCustomer(), updateInfusionScheduleStatus(), handleAdd(), handleDelete(), handleDropdownCommand() (+20 more)
### Community 27 - "Community 27"
### Community 29 - "Community 29"
Cohesion: 0.07
Nodes (19): fetchDeleteMaterialBatch(), fetchMaterialBatchList(), fetchMaterialBatchOptions(), fetchMaterialList(), fetchMaterialOptions(), fetchUpdateMaterialBatch(), fetchMaterialUsageList(), fetchMyMaterialUsageList() (+11 more)
### Community 28 - "Community 28"
### Community 30 - "Community 30"
Cohesion: 0.09
Nodes (12): fetchMineQcWorkOrderTabUnfinishedCounts(), fetchOutboundQcDetail(), fetchQcWorkOrderDetail(), fetchQcWorkOrderList(), fetchQcWorkOrdersBySample(), fetchQcWorkOrderTabUnfinishedCounts(), reload(), reloadTabCounts() (+4 more)
### Community 29 - "Community 29"
### Community 31 - "Community 31"
Cohesion: 0.1
Nodes (12): fetchOutboundReleaseMaterial(), fetchOutboundReleaseReviewDetail(), fetchOutboundReleaseReviewList(), fetchReleaseReviewList(), handleReset(), handleSearch(), handleTabChange(), handleToggleSelect() (+4 more)
### Community 30 - "Community 30"
### Community 32 - "Community 32"
Cohesion: 0.12
Nodes (15): addCopyButton(), highlightCode(), insertLineNumbers(), isBlockProcessed(), markBlockAsProcessed(), processBlock(), setupHighlightDirective(), setupRippleDirective() (+7 more)
### Community 31 - "Community 31"
Cohesion: 0.13
Nodes (18): fetchCellSampleTypeList(), fetchCreateCellSampleType(), fetchDeleteCellSampleType(), fetchUpdateCellSampleType(), handleAdd(), handleDelete(), handleDropdownCommand(), handleEdit() (+10 more)
### Community 33 - "Community 33"
Cohesion: 0.14
Nodes (12): displayPeople(), personLines(), personTitle(), showNodeComment(), signBadge(), signBadgeText(), statusText(), displayName() (+4 more)
### Community 32 - "Community 32"
### Community 34 - "Community 34"
Cohesion: 0.19
Nodes (15): fetchAttachmentDownloadUrl(), attachmentFullUrl(), ensureUniqueZipEntryName(), fetchAttachmentBlob(), getAttachmentExtension(), resolveAttachmentFileName(), sanitizeZipPathSegment(), applyInboundLabStorageCodePrefix() (+7 more)
### Community 33 - "Community 33"
Cohesion: 0.12
Nodes (5): attachmentFullUrl(), dash(), handleAttachmentDownload(), handleAttachmentPreview(), resolveUploadResponseUrl()
### Community 35 - "Community 35"
Cohesion: 0.13
Nodes (8): chipTitle(), confirmPicker(), memberOptionLabel(), removeUser(), resolveUser(), signBadge(), signBadgeText(), updateSelect()
### Community 34 - "Community 34"
### Community 36 - "Community 36"
Cohesion: 0.16
Nodes (10): useTable(), useTableImpl(), getColumnChecks(), useTableColumns(), createErrorHandler(), createSmartDebounce(), defaultResponseAdapter(), extractPagination() (+2 more)
### Community 35 - "Community 35"
### Community 37 - "Community 37"
Cohesion: 0.27
Nodes (14): useChart(), useChartComponent(), useChartOps(), colourBlend(), getCssVar(), getDarkColor(), getLightColor(), handleElementThemeColor() (+6 more)
### Community 36 - "Community 36"
Cohesion: 0.33
Nodes (13): buildProtocolPaymentFlowSteps(), dash(), financeReceiptTime(), formatAmount(), hasFinanceReceipt(), hasFinanceRefund(), hasReceiptSubmit(), hasRefundSubmit() (+5 more)
### Community 37 - "Community 37"
### Community 38 - "Community 38"
Cohesion: 0.19
Nodes (6): fetchServiceOrderTxnList(), handleReset(), handleSearch(), handleTabChange(), loadData(), switchTab()
### Community 38 - "Community 38"
### Community 40 - "Community 40"
Cohesion: 0.27
Nodes (10): nodeSummary(), createDefaultFlow(), createEndNode(), createNode(), ensureFlowRoot(), newId(), normalizeCcAssigneeTypes(), removeChildNode() (+2 more)
### Community 41 - "Community 41"
Cohesion: 0.24
Nodes (8): fullFileUrl(), handlePreviewAttachment(), isVideoFile(), normalizeDisplayValue(), resolveReviewCellType(), resolveReviewQuantity(), resolveReviewSpecText(), uniqueJoined()
### Community 40 - "Community 40"
Cohesion: 0.15
Nodes (4): fetchNextDonationSampleCode(), fetchResearchDonationAuditList(), fetchResearchDonationDetail(), fetchResearchDonationList()
### Community 41 - "Community 41"
Cohesion: 0.29
Nodes (9): nodeSummary(), createDefaultFlow(), createEndNode(), createNode(), ensureFlowRoot(), newId(), removeChildNode(), removeFromSubtree() (+1 more)
### Community 42 - "Community 42"
Cohesion: 0.42
Nodes (9): buildPaymentFlowSteps(), dash(), formatAmount(), hasFinanceReceipt(), hasFinanceRefund(), hasReceiptSubmit(), hasRefundSubmit(), receiptSubmitTime() (+1 more)
### Community 43 - "Community 43"
Cohesion: 0.31
Nodes (4): isSlotAvailable(), resolveStorageSlotRangeFill(), slotFacilityNodeId(), sortBoxSlots()
### Community 44 - "Community 44"
### Community 43 - "Community 43"
Cohesion: 0.25
Nodes (2): handleTouchEnd(), setTransition()
### Community 48 - "Community 48"
### Community 47 - "Community 47"
Cohesion: 0.39
Nodes (6): isIgnorableScriptError(), normalizeErrorMessage(), registerPromiseErrorHandler(), registerResourceErrorHandler(), scriptErrorHandler(), setupErrorHandle()
### Community 49 - "Community 49"
### Community 48 - "Community 48"
Cohesion: 0.36
Nodes (1): TableHeightCalculator
### Community 51 - "Community 51"
### Community 50 - "Community 50"
Cohesion: 0.33
Nodes (2): logApiCryptoBootInfo(), maskSecret()
### Community 52 - "Community 52"
### Community 51 - "Community 51"
Cohesion: 0.67
Nodes (6): fileNameHint(), fileUrlHint(), getOaUploadDisplayName(), isOaUploadImageFile(), isOaUploadVideoFile(), mimeHint()
### Community 53 - "Community 53"
### Community 52 - "Community 52"
Cohesion: 0.38
Nodes (4): handleFocus(), handleInput(), parseDecimalToNumber(), sanitizeDecimalInput()
### Community 53 - "Community 53"
Cohesion: 0.29
Nodes (2): fetchLeaveDetail(), fetchLeaveList()
### Community 54 - "Community 54"
Cohesion: 0.4
Nodes (2): isUnfinishedQcWorkOrder(), resolveQcWorkOrderUnfinishedBadgeCount()
@@ -315,18 +315,18 @@ Nodes (2): parseEquipmentIds(), syncEquipmentNamesFromOptions()
Cohesion: 0.5
Nodes (2): focusInput(), handleKeydown()
### Community 60 - "Community 60"
Cohesion: 0.4
Nodes (1): fetchQcMaterialAmountAuthUsers()
### Community 64 - "Community 64"
### Community 63 - "Community 63"
Cohesion: 0.67
Nodes (2): if(), logSidebarMenu()
### Community 66 - "Community 66"
### Community 65 - "Community 65"
Cohesion: 0.5
Nodes (1): fetchSampleSmsNotificationList()
### Community 66 - "Community 66"
Cohesion: 0.5
Nodes (1): fetchQcSmsList()
### Community 71 - "Community 71"
Cohesion: 1.0
Nodes (2): getSettingDefaults(), resetToDefaults()
@@ -352,13 +352,15 @@ Cohesion: 1.0
Nodes (2): emptyTabCounts(), useQcWorkOrderTabUnfinishedCounts()
## Knowledge Gaps
- **Thin community `Community 23`** (42 nodes): `WebSocketClient`, `.calculateReconnectDelay()`, `.clearAllTimers()`, `.clearConnectionTimers()`, `.clearTimer()`, `.close()`, `.closeCurrentSocketForReconnect()`, `.connect()`, `.connectionStatusText()`, `.constructor()`, `.destroyInstance()`, `.flushMessageQueue()`, `.getInstance()`, `.getReadyStateText()`, `.handleClose()`, `.handleConnectionTimeout()`, `.handleError()`, `.handleMessage()`, `.handleOpen()`, `.init()`, `.isWebSocketConnected()`, `.reconnect()`, `.resetHeartbeat()`, `.send()`, `.startHeartbeat()`, `.startPing()`, `TableCache`, `.cleanupExpired()`, `.clear()`, `.clearByTags()`, `.clearCurrentSearch()`, `.clearPagination()`, `.constructor()`, `.evictLRU()`, `.generateKey()`, `.generateTags()`, `.get()`, `.getStats()`, `.log()`, `.set()`, `index.ts`, `tableCache.ts`
- **Thin community `Community 21`** (42 nodes): `WebSocketClient`, `.calculateReconnectDelay()`, `.clearAllTimers()`, `.clearConnectionTimers()`, `.clearTimer()`, `.close()`, `.closeCurrentSocketForReconnect()`, `.connect()`, `.connectionStatusText()`, `.constructor()`, `.destroyInstance()`, `.flushMessageQueue()`, `.getInstance()`, `.getReadyStateText()`, `.handleClose()`, `.handleConnectionTimeout()`, `.handleError()`, `.handleMessage()`, `.handleOpen()`, `.init()`, `.isWebSocketConnected()`, `.reconnect()`, `.resetHeartbeat()`, `.send()`, `.startHeartbeat()`, `.startPing()`, `TableCache`, `.cleanupExpired()`, `.clear()`, `.clearByTags()`, `.clearCurrentSearch()`, `.clearPagination()`, `.constructor()`, `.evictLRU()`, `.generateKey()`, `.generateTags()`, `.get()`, `.getStats()`, `.log()`, `.set()`, `index.ts`, `tableCache.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 44`** (9 nodes): `cleanupEventListeners()`, `handleTouchEnd()`, `handleTouchMove()`, `handleTouchStart()`, `handleWheelScroll()`, `if()`, `setTransition()`, `setupEventListeners()`, `index.vue`
- **Thin community `Community 43`** (9 nodes): `cleanupEventListeners()`, `handleTouchEnd()`, `handleTouchMove()`, `handleTouchStart()`, `handleWheelScroll()`, `if()`, `setTransition()`, `setupEventListeners()`, `index.vue`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 49`** (8 nodes): `TableHeightCalculator`, `.calculate()`, `.calculateOffset()`, `.calculatePaginationOffset()`, `.constructor()`, `.getHeaderHeight()`, `useTableHeight()`, `useTableHeight.ts`
- **Thin community `Community 48`** (8 nodes): `TableHeightCalculator`, `.calculate()`, `.calculateOffset()`, `.calculatePaginationOffset()`, `.constructor()`, `.getHeaderHeight()`, `useTableHeight()`, `useTableHeight.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 51`** (7 nodes): `App.vue`, `main.ts`, `refreshButtonAutoIcons()`, `refreshPanelTitleIcons()`, `logApiCryptoBootInfo()`, `maskSecret()`, `console.ts`
- **Thin community `Community 50`** (7 nodes): `App.vue`, `main.ts`, `refreshButtonAutoIcons()`, `refreshPanelTitleIcons()`, `logApiCryptoBootInfo()`, `maskSecret()`, `console.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 53`** (7 nodes): `fetchCreateLeave()`, `fetchDeleteLeave()`, `fetchLeaveDetail()`, `fetchLeaveList()`, `fetchSubmitLeave()`, `fetchUpdateLeave()`, `leave.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 54`** (6 nodes): `formatQcWorkOrderUnfinishedBadgeCount()`, `isUnfinishedQcWorkOrder()`, `qcWorkOrderUnfinishedBadgeTitle()`, `resolveQcWorkOrderUnfinishedBadgeCount()`, `sumQcWorkOrderGroupUnfinishedBadgeCount()`, `qc-work-order-unfinished-badge.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
@@ -368,11 +370,11 @@ Nodes (2): emptyTabCounts(), useQcWorkOrderTabUnfinishedCounts()
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 59`** (5 nodes): `focusInput()`, `handleKeydown()`, `if()`, `search()`, `index.vue`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 60`** (5 nodes): `fetchBatchRevokeQcMaterialAmountAuth()`, `fetchGrantQcMaterialAmountAuth()`, `fetchQcMaterialAmountAuthUsers()`, `fetchRevokeQcMaterialAmountAuth()`, `qc-material-amount-auth.ts`
- **Thin community `Community 63`** (4 nodes): `if()`, `logSidebarMenu()`, `index.vue`, `SidebarSubmenu.vue`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 64`** (4 nodes): `if()`, `logSidebarMenu()`, `index.vue`, `SidebarSubmenu.vue`
- **Thin community `Community 65`** (4 nodes): `fetchGenerateSms()`, `fetchSampleSmsNotificationList()`, `fetchToggleSmsNotified()`, `sample-sms-notification.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 66`** (4 nodes): `fetchGenerateSms()`, `fetchSampleSmsNotificationList()`, `fetchToggleSmsNotified()`, `sample-sms-notification.ts`
- **Thin community `Community 66`** (4 nodes): `fetchGenerateQcSms()`, `fetchQcSmsList()`, `fetchToggleQcSmsNotified()`, `qc-sms-notification.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 71`** (3 nodes): `getSettingDefaults()`, `resetToDefaults()`, `setting.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
@@ -390,17 +392,17 @@ Nodes (2): emptyTabCounts(), useQcWorkOrderTabUnfinishedCounts()
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `push()` connect `Community 1` to `Community 0`, `Community 2`, `Community 3`, `Community 5`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 14`, `Community 15`, `Community 16`, `Community 19`, `Community 20`, `Community 22`, `Community 23`, `Community 25`, `Community 28`, `Community 32`?**
_High betweenness centrality (0.310) - this node is a cross-community bridge._
- **Why does `get()` connect `Community 0` to `Community 1`, `Community 2`, `Community 3`, `Community 4`, `Community 5`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 14`, `Community 15`, `Community 16`, `Community 17`, `Community 18`, `Community 19`, `Community 20`, `Community 21`, `Community 26`, `Community 27`, `Community 28`, `Community 29`, `Community 31`, `Community 37`, `Community 40`, `Community 43`, `Community 60`, `Community 66`?**
_High betweenness centrality (0.273) - this node is a cross-community bridge._
- **Why does `emit()` connect `Community 12` to `Community 0`, `Community 2`, `Community 3`, `Community 4`, `Community 5`, `Community 10`, `Community 20`, `Community 26`?**
_High betweenness centrality (0.041) - this node is a cross-community bridge._
- **Why does `push()` 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 14`, `Community 16`, `Community 17`, `Community 19`, `Community 21`, `Community 22`, `Community 23`, `Community 24`, `Community 28`, `Community 30`, `Community 33`, `Community 34`, `Community 35`, `Community 40`?**
_High betweenness centrality (0.312) - this node is a cross-community bridge._
- **Why does `get()` connect `Community 0` to `Community 1`, `Community 2`, `Community 3`, `Community 4`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 13`, `Community 14`, `Community 15`, `Community 17`, `Community 18`, `Community 19`, `Community 20`, `Community 24`, `Community 27`, `Community 29`, `Community 30`, `Community 31`, `Community 38`, `Community 42`, `Community 53`, `Community 65`, `Community 66`?**
_High betweenness centrality (0.253) - this node is a cross-community bridge._
- **Why does `emit()` connect `Community 13` to `Community 0`, `Community 1`, `Community 35`, `Community 4`, `Community 3`, `Community 18`, `Community 19`, `Community 20`, `Community 27`?**
_High betweenness centrality (0.045) - this node is a cross-community bridge._
- **Are the 299 inferred relationships involving `get()` (e.g. with `resolveStorageSlotRangeFill()` and `buildNodeCodePathFromFlat()`) actually correct?**
_`get()` has 299 INFERRED edges - model-reasoned connections that need verification._
- **Are the 96 inferred relationships involving `push()` (e.g. with `refreshQcMenuBadges()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
_`push()` has 96 INFERRED edges - model-reasoned connections that need verification._
- **Are the 28 inferred relationships involving `emit()` (e.g. with `handleSubmit()` and `handleDialogClose()`) actually correct?**
_`emit()` has 28 INFERRED edges - model-reasoned connections that need verification._
- **Are the 27 inferred relationships involving `emit()` (e.g. with `handleSubmit()` and `handleDialogClose()`) actually correct?**
_`emit()` has 27 INFERRED edges - model-reasoned connections that need verification._
- **Are the 20 inferred relationships involving `set()` (e.g. with `buildNodeCodePathFromFlat()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
_`set()` has 20 INFERRED edges - model-reasoned connections that need verification._
+4 -4
View File
@@ -57,12 +57,12 @@
</div>
<div id="legend"></div>
</div>
<div id="stats">3205 nodes &middot; 4499 edges &middot; 365 communities</div>
<div id="stats">3202 nodes &middot; 4492 edges &middot; 368 communities</div>
</div>
<script>
const RAW_NODES = [{"id": "app_vue", "label": "App.vue", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "App.vue", "community": 51, "community_name": "Community 51", "source_file": "App.vue", "file_type": "code", "degree": 3}, {"id": "src_app_refreshbuttonautoicons", "label": "refreshButtonAutoIcons()", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshButtonAutoIcons()", "community": 51, "community_name": "Community 51", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "src_app_refreshpaneltitleicons", "label": "refreshPanelTitleIcons()", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshPanelTitleIcons()", "community": 51, "community_name": "Community 51", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "main_ts", "label": "main.ts", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "main.ts", "community": 51, "community_name": "Community 51", "source_file": "main.ts", "file_type": "code", "degree": 4}, {"id": "src_main_masksecret", "label": "maskSecret()", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "maskSecret()", "community": 51, "community_name": "Community 51", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "src_main_logapicryptobootinfo", "label": "logApiCryptoBootInfo()", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "logApiCryptoBootInfo()", "community": 51, "community_name": "Community 51", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "env_d_ts", "label": "env.d.ts", "color": {"background": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "env.d.ts", "community": 132, "community_name": "Community 132", "source_file": "env.d.ts", "file_type": "code", "degree": 0}, {"id": "shims_loose_d_ts", "label": "shims-loose.d.ts", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "shims-loose.d.ts", "community": 133, "community_name": "Community 133", "source_file": "shims-loose.d.ts", "file_type": "code", "degree": 0}, {"id": "directives_index_ts", "label": "index.ts", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "index.ts", "community": 30, "community_name": "Community 30", "source_file": "directives/index.ts", "file_type": "code", "degree": 1}, {"id": "directives_index_setupglobdirectives", "label": "setupGlobDirectives()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.5, "font": {"size": 0, "color": "#ffffff"}, "title": "setupGlobDirectives()", "community": 30, "community_name": "Community 30", "source_file": "directives/index.ts", "file_type": "code", "degree": 5}, {"id": "directives_core_roles_ts", "label": "roles.ts", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "roles.ts", "community": 30, "community_name": "Community 30", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 3}, {"id": "core_roles_checkrolepermission", "label": "checkRolePermission()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "checkRolePermission()", "community": 30, "community_name": "Community 30", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_removeelement", "label": "removeElement()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "removeElement()", "community": 30, "community_name": "Community 30", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_setuprolesdirective",Line truncated
const RAW_EDGES = [{"from": "app_vue", "to": "src_app_refreshbuttonautoicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "src_app_refreshpaneltitleicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "main_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "utils_sys_console_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_masksecret", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_logapicryptobootinfo", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "src_main_masksecret", "to": "src_main_logapicryptobootinfo", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_ts", "to": "directives_index_setupglobdirectives", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_setupglobdirectives", "to": "core_auth_setupauthdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "core_roles_setuprolesdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_highlight_setuphighlightdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_ripple_setuprippledirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_core_roles_ts", "to": "core_roles_checkrolepermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_setuprolesdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_roles_checkrolepermission", "to": "core_roles_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_checkauthpermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_setupauthdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_checkauthpermission", "to": "core_auth_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_ripple_ts", "to": "business_ripple_setuprippledirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_highlightcode", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_insertlinenumbers", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_addcopybutton", "label": "contains", "title": "contains [EXTRACTED]", "dLine truncated
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 499}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 124}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 114}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 106}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 96}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 95}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 93}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 92}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 90}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 89}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 83}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 82}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 74}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 68}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 67}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 66}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 64}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 61}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 61}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 56}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 52}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 48}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 43}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 42}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 37}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 36}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 36}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 35}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 25}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 24}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 22}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 22}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 20}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 17}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 17}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 16}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 14}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 14}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 13}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 13}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 13}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 12}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 10}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 9}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 9}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 9}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 9}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 9}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 8}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 8}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 8}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 7}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 7}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 7}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 6}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 6}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 5}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 5}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 5}, {"cid": 59, "color": "#BAB0AC", "label": "Community 59", "count": 5}, {"cid": 60, "color": "#4E79A7", "label": "Community 60", "count": 5}, {"cid": 61, "color": "#F28E2B", "label": "Community 61", "count": 5}, {"cid": 62, "color": "#E15759", "label": "Community 62", "count": 4}, {"cid": 63, "color": "#76B7B2", "label": "Community 63", "count": 4}, {"cid": 64, "color": "#59A14F", "label": "Community 64", "count": 4}, {"cid": 65, "color": "#EDC948", "label": "Community 65", "count": 4}, {"cid": 66, "color": "#B07AA1", "label": "Community 66", "count": 4}, {"cid": 67, "color": "#FF9DA7", "label": "Community 67", "count": 4}, {"cid": 68, "color": "#9C755F", "label": "Community 68", "count": 4}, {"cid": 69, "color": "#BAB0AC", "label": "Community 69", "count": 4}, {"cid": 70, "color": "#4E79A7", "label": "Community 70",Line truncated
const RAW_NODES = [{"id": "app_vue", "label": "App.vue", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "App.vue", "community": 50, "community_name": "Community 50", "source_file": "App.vue", "file_type": "code", "degree": 3}, {"id": "src_app_refreshbuttonautoicons", "label": "refreshButtonAutoIcons()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshButtonAutoIcons()", "community": 50, "community_name": "Community 50", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "src_app_refreshpaneltitleicons", "label": "refreshPanelTitleIcons()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshPanelTitleIcons()", "community": 50, "community_name": "Community 50", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "main_ts", "label": "main.ts", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "main.ts", "community": 50, "community_name": "Community 50", "source_file": "main.ts", "file_type": "code", "degree": 4}, {"id": "src_main_masksecret", "label": "maskSecret()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "maskSecret()", "community": 50, "community_name": "Community 50", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "src_main_logapicryptobootinfo", "label": "logApiCryptoBootInfo()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "logApiCryptoBootInfo()", "community": 50, "community_name": "Community 50", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "env_d_ts", "label": "env.d.ts", "color": {"background": "#59A14F", "border": "#59A14F", "highlight": {"background": "#ffffff", "border": "#59A14F"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "env.d.ts", "community": 134, "community_name": "Community 134", "source_file": "env.d.ts", "file_type": "code", "degree": 0}, {"id": "shims_loose_d_ts", "label": "shims-loose.d.ts", "color": {"background": "#EDC948", "border": "#EDC948", "highlight": {"background": "#ffffff", "border": "#EDC948"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "shims-loose.d.ts", "community": 135, "community_name": "Community 135", "source_file": "shims-loose.d.ts", "file_type": "code", "degree": 0}, {"id": "directives_index_ts", "label": "index.ts", "color": {"background": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "index.ts", "community": 32, "community_name": "Community 32", "source_file": "directives/index.ts", "file_type": "code", "degree": 1}, {"id": "directives_index_setupglobdirectives", "label": "setupGlobDirectives()", "color": {"background": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.5, "font": {"size": 0, "color": "#ffffff"}, "title": "setupGlobDirectives()", "community": 32, "community_name": "Community 32", "source_file": "directives/index.ts", "file_type": "code", "degree": 5}, {"id": "directives_core_roles_ts", "label": "roles.ts", "color": {"background": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "roles.ts", "community": 32, "community_name": "Community 32", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 3}, {"id": "core_roles_checkrolepermission", "label": "checkRolePermission()", "color": {"background": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "checkRolePermission()", "community": 32, "community_name": "Community 32", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_removeelement", "label": "removeElement()", "color": {"background": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "removeElement()", "community": 32, "community_name": "Community 32", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_setuprolesdirective",Line truncated
const RAW_EDGES = [{"from": "app_vue", "to": "src_app_refreshbuttonautoicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "src_app_refreshpaneltitleicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "main_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "utils_sys_console_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_masksecret", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_logapicryptobootinfo", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "src_main_masksecret", "to": "src_main_logapicryptobootinfo", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_ts", "to": "directives_index_setupglobdirectives", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_setupglobdirectives", "to": "core_auth_setupauthdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "core_roles_setuprolesdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_highlight_setuphighlightdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_ripple_setuprippledirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_core_roles_ts", "to": "core_roles_checkrolepermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_setuprolesdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_roles_checkrolepermission", "to": "core_roles_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_checkauthpermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_setupauthdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_checkauthpermission", "to": "core_auth_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_ripple_ts", "to": "business_ripple_setuprippledirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_highlightcode", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_insertlinenumbers", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_addcopybutton", "label": "contains", "title": "contains [EXTRACTED]", "dLine truncated
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 477}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 126}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 123}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 102}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 97}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 92}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 92}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 90}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 90}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 89}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 89}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 84}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 74}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 74}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 66}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 64}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 55}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 54}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 52}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 51}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 46}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 42}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 41}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 41}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 38}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 37}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 37}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 36}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 36}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 35}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 25}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 24}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 22}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 20}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 20}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 20}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 17}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 16}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 14}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 13}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 13}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 13}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 9}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 9}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 9}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 9}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 9}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 8}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 8}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 8}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 7}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 7}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 7}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 7}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 6}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 6}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 5}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 5}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 5}, {"cid": 59, "color": "#BAB0AC", "label": "Community 59", "count": 5}, {"cid": 60, "color": "#4E79A7", "label": "Community 60", "count": 5}, {"cid": 61, "color": "#F28E2B", "label": "Community 61", "count": 4}, {"cid": 62, "color": "#E15759", "label": "Community 62", "count": 4}, {"cid": 63, "color": "#76B7B2", "label": "Community 63", "count": 4}, {"cid": 64, "color": "#59A14F", "label": "Community 64", "count": 4}, {"cid": 65, "color": "#EDC948", "label": "Community 65", "count": 4}, {"cid": 66, "color": "#B07AA1", "label": "Community 66", "count": 4}, {"cid": 67, "color": "#FF9DA7", "label": "Community 67", "count": 4}, {"cid": 68, "color": "#9C755F", "label": "Community 68", "count": 4}, {"cid": 69, "color": "#BAB0AC", "label": "Community 69", "count": 4}, {"cid": 70, "color": "#4E79A7", "label": "Community 70", Line truncated
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
function esc(s) {
File diff suppressed because it is too large. Load diff
+20 -16
View File
@@ -1,6 +1,6 @@
{
"/Users/wuzilong/work/00code/zkxw/web-admin/src/App.vue": 1782893851.4905877,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts": 1785390577.966336,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts": 1785394417.9719267,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/env.d.ts": 1781272556.3788364,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/shims-loose.d.ts": 1781272556.417826,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/directives/index.ts": 1781272556.3521712,
@@ -17,8 +17,8 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/common/index.ts": 1781272556.3597305,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/directive/directive.d.ts": 1781272556.3601494,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/api/api.d.ts": 1781272556.3606477,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1785390577.4359658,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1785388241.8101401,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1785394386.4395301,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1785393257.4811723,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/store/index.ts": 1781272556.364766,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/router/index.ts": 1782394569.8806834,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/composables/useAttachmentActions.ts": 1783921717.4015942,
@@ -52,6 +52,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/chinese-numeral-parse.ts": 1782960575.662593,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/sample-production-reception-fields.ts": 1782806741.4880455,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-upload-file-type.ts": 1785145511.867549,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-post.ts": 1785394335.3053484,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print-related.ts": 1785145511.865531,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-material-ui.ts": 1781525352.6976836,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-tabs.ts": 1783326303.9709864,
@@ -93,7 +94,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/mask-sensitive.ts": 1781272556.4029639,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/sample-reception-view-sections.ts": 1783389099.9667985,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts": 1783306730.912153,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts": 1785390579.7587204,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts": 1785394495.0739603,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/inbound-sample-special-mark.ts": 1782889894.1376855,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.test.ts": 1785390443.3642433,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-person-value.ts": 1785384573.025628,
@@ -102,6 +103,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-related-approval-rule.ts": 1785145511.8673027,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-rule.ts": 1785390573.9898922,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-menu-badge.ts": 1783307225.4832592,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts": 1785394332.7419252,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/attachment-zip.ts": 1782875325.855345,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/numeric-input-parse.ts": 1782179343.5953708,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-dept-value.ts": 1785148503.1442196,
@@ -130,6 +132,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/protocol-pay-mode-switch.ts": 1785145536.399596,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-progress-person-lines.ts": 1785145511.8667505,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-person.ts": 1785385009.8220263,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-select-rule.ts": 1785394334.9268312,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/protocol-payment-installment.ts": 1783329873.2829163,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/protocol-source-attachment.ts": 1783921716.666595,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/download-attachment.ts": 1781272556.4160507,
@@ -169,7 +172,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/socket/index.ts": 1781272556.4146817,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/router/sidebar-menu-filter.ts": 1781272556.4163456,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue": 1785382639.7856548,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts": 1785390578.4267163,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts": 1785394403.4977336,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/tables/art-table/index.vue": 1782893852.037499,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/tables/art-table-header/index.vue": 1782893852.0053234,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/forms/art-search-bar/index.vue": 1782893851.915658,
@@ -285,23 +288,24 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/common/list-datetime-column.vue": 1782893851.4989195,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/common/amount-input/index.vue": 1785381328.065322,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/common/decimal-input/index.vue": 1782893851.5090024,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue": 1785145511.6919415,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts": 1785388024.1459835,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaPostSelect.vue": 1785394386.0894492,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue": 1785392987.9755206,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts": 1785394420.3369272,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaPersonSelect.vue": 1785388355.4534001,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaApprovalPrintSheet.vue": 1785145511.6904423,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaReceiveAccountSelect.vue": 1785390577.3994374,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaReceiveAccountSelect.vue": 1785391747.3254373,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaPrintRelatedTree.vue": 1785145511.6928434,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFcRow.vue": 1785145511.6907504,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFormDesignerEmbed.vue": 1785145511.6925569,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaRelatedApproval.vue": 1785145511.6944861,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue": 1785145511.6935148,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue": 1785392987.9652064,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaDeptSelect.vue": 1785382264.265851,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaMoneyField.vue": 1785382264.3025115,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFcUpload.vue": 1785145511.6912854,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue": 1785145511.696382,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue": 1785388028.0299685,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue": 1785145511.6983094,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts": 1785385033.5327706,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue": 1785392944.1165543,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue": 1785394512.7601542,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue": 1785393373.1528535,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts": 1785392938.377587,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/hooks/index.ts": 1781272556.653748,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/hooks/core/useFastEnter.ts": 1781272556.6454022,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/hooks/core/useTableColumns.ts": 1781272556.6461287,
@@ -345,7 +349,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-lab-test-item.ts": 1781272556.666375,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/cell-product.ts": 1785290097.6330564,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts": 1781272556.666838,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts": 1785390573.9888828,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts": 1785393007.4207587,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-stock-check.ts": 1781427280.4992144,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts": 1782893816.502791,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts": 1783327864.9737554,
@@ -430,8 +434,8 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/dept/index.vue": 1785145511.8809078,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/dict/index.vue": 1783326448.9326534,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/leave/index.vue": 1783326448.934463,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue": 1785390811.314476,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue": 1785145511.8728273,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue": 1785391037.6431305,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue": 1785393840.5768137,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue": 1785145511.8723822,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/form-designer-spike/index.vue": 1785145511.870818,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/done/index.vue": 1785145511.870267,
@@ -60,6 +60,7 @@
.oa-dept-select,
.oa-money-field,
.oa-person-select,
.oa-post-select,
.oa-related-approval {
box-sizing: border-box;
width: 100%;
@@ -69,8 +69,6 @@
filterable
clearable
:multiple="multiple"
collapse-tags
collapse-tags-tooltip
placeholder="请选择人员"
@update:model-value="onSelectChange"
>
@@ -0,0 +1,371 @@
<!-- FormCreate 自定义控件:职位选择(Fresh Mint · PC 下拉完整 tag 换行;窄屏抽屉) -->
<template>
<div class="oa-post-select">
<template v-if="disabled">
<span class="oa-post-select__readonly">{{ displayText || '—' }}</span>
</template>
<template v-else-if="isNarrow">
<button type="button" class="oa-post-select__trigger" @click="openDrawer">
<span v-if="displayText" class="oa-post-select__trigger-text">{{ displayText }}</span>
<span v-else class="oa-post-select__placeholder">请选择职位</span>
<span class="oa-post-select__chev">▾</span>
</button>
<el-drawer
v-model="drawerVisible"
title="选择职位"
direction="btt"
size="75%"
append-to-body
:close-on-click-modal="false"
class="oa-post-drawer"
modal-class="protocol-dialog-mask"
>
<el-input
v-model="keyword"
clearable
placeholder="搜索职位名称或编码"
class="oa-post-select__search"
/>
<div class="oa-post-select__list">
<label v-for="p in filteredOptions" :key="p.id" class="oa-post-select__row">
<el-checkbox
v-if="multiple"
:model-value="pendingIds.includes(p.id)"
@change="(v: boolean | string | number) => onNarrowCheck(p.id, !!v)"
/>
<el-radio
v-else
:model-value="pendingIds[0] || ''"
:value="p.id"
@change="() => onNarrowPick(p.id)"
/>
<span class="oa-post-select__row-label">{{ p.label }}</span>
<span v-if="p.sub" class="oa-post-select__row-sub">{{ p.sub }}</span>
</label>
<div v-if="!filteredOptions.length" class="oa-post-select__empty">暂无职位</div>
</div>
<template #footer>
<el-button @click="drawerVisible = false">
<el-icon><Close /></el-icon>
取消
</el-button>
<el-button type="primary" @click="confirmDrawer">
<el-icon><Check /></el-icon>
确定
</el-button>
</template>
</el-drawer>
</template>
<el-select
v-else
:model-value="selectModel"
class="oa-post-select__select"
filterable
clearable
:multiple="multiple"
placeholder="请选择职位"
@update:model-value="onSelectChange"
>
<el-option v-for="p in postOptions" :key="p.id" :label="p.label" :value="p.id">
<span>{{ p.label }}</span>
<span v-if="p.sub" class="oa-post-select__opt-sub">{{ p.sub }}</span>
</el-option>
</el-select>
</div>
</template>
<script setup lang="ts">
import { computed, onBeforeUnmount, onMounted, ref } from 'vue'
import { Check, Close } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
import { fetchPostList } from '@/api/admin'
import { MAX_ADMIN_LIST_PAGE_SIZE } from '@/utils/fetch-paged-list'
import {
formatPostDisplay,
normalizePostModelValue,
type OaPostValueItem
} from '@/utils/oa-post-value'
defineOptions({ name: 'post' })
const props = withDefaults(
defineProps<{
modelValue?: unknown
disabled?: boolean
multiple?: boolean
max?: number | null
formCreateInject?: Record<string, unknown>
}>(),
{ multiple: true, max: null }
)
const emit = defineEmits<{
(e: 'update:modelValue', v: OaPostValueItem | OaPostValueItem[] | null): void
(e: 'change', v: OaPostValueItem | OaPostValueItem[] | null): void
}>()
type PostOpt = { id: string; label: string; sub: string }
const nameMap = ref(new Map<string, string>())
const postOptions = ref<PostOpt[]>([])
const isNarrow = ref(false)
const drawerVisible = ref(false)
const keyword = ref('')
const pendingIds = ref<string[]>([])
let mql: MediaQueryList | null = null
const normalized = computed(() => normalizePostModelValue(props.modelValue, !!props.multiple))
const displayText = computed(() => formatPostDisplay(normalized.value))
const selectModel = computed(() => {
const n = normalized.value
if (props.multiple) {
return Array.isArray(n) ? n.map((x) => x.id) : []
}
return n && !Array.isArray(n) ? n.id : undefined
})
const filteredOptions = computed(() => {
const q = keyword.value.trim().toLowerCase()
if (!q) return postOptions.value
return postOptions.value.filter(
(p) =>
p.label.toLowerCase().includes(q) ||
p.sub.toLowerCase().includes(q) ||
p.id.toLowerCase().includes(q)
)
})
function displayNameOf(id: string): string {
return nameMap.value.get(id) || id
}
function emitFromIds(ids: string[]) {
const items: OaPostValueItem[] = []
const seen = new Set<string>()
for (const id of ids) {
const tid = String(id || '').trim()
if (!tid || seen.has(tid)) continue
seen.add(tid)
items.push({ id: tid, name: displayNameOf(tid) })
}
if (props.multiple) {
const max = props.max != null && Number(props.max) > 0 ? Number(props.max) : null
if (max != null && items.length > max) {
ElMessage.warning(`最多可选 ${max} 个职位`)
return
}
emit('update:modelValue', items)
emit('change', items)
} else {
const one = items[0] || null
emit('update:modelValue', one)
emit('change', one)
}
}
function onSelectChange(val: string | string[] | null | undefined) {
if (props.multiple) {
emitFromIds(Array.isArray(val) ? val.map(String) : [])
} else {
emitFromIds(val ? [String(val)] : [])
}
}
function openDrawer() {
const n = normalized.value
if (props.multiple) {
pendingIds.value = Array.isArray(n) ? n.map((x) => x.id) : []
} else {
pendingIds.value = n && !Array.isArray(n) ? [n.id] : []
}
keyword.value = ''
drawerVisible.value = true
}
function onNarrowCheck(id: string, checked: boolean) {
const set = new Set(pendingIds.value)
if (checked) set.add(id)
else set.delete(id)
pendingIds.value = [...set]
}
function onNarrowPick(id: string) {
pendingIds.value = [id]
}
function confirmDrawer() {
emitFromIds(pendingIds.value)
drawerVisible.value = false
}
async function loadPosts() {
try {
const pageSize = MAX_ADMIN_LIST_PAGE_SIZE
const raw: any[] = []
let page = 1
for (;;) {
const res = await fetchPostList({ page, pageSize })
const list = res?.list || []
raw.push(...list)
if (list.length < pageSize) break
if (typeof res?.total === 'number' && raw.length >= res.total) break
page += 1
}
const map = new Map<string, string>()
const opts: PostOpt[] = []
for (const row of raw) {
if (String(row.status ?? '1') !== '1') continue
const id = String(row.id || '').trim()
if (!id) continue
const name = String(row.postName || '').trim()
const code = String(row.postCode || '').trim()
const label = name || code || id
map.set(id, label)
opts.push({ id, label, sub: name && code && name !== code ? code : '' })
}
const n = normalized.value
const kept = Array.isArray(n) ? n : n ? [n] : []
for (const x of kept) {
if (!map.has(x.id) && x.name) map.set(x.id, x.name)
}
nameMap.value = map
postOptions.value = opts
} catch {
nameMap.value = new Map()
postOptions.value = []
}
}
function syncNarrow(e?: MediaQueryList | MediaQueryListEvent) {
const matches = e && 'matches' in e ? e.matches : !!mql?.matches
isNarrow.value = matches
}
onMounted(() => {
loadPosts()
mql = window.matchMedia('(max-width: 767px)')
syncNarrow(mql)
mql.addEventListener('change', syncNarrow)
})
onBeforeUnmount(() => {
mql?.removeEventListener('change', syncNarrow)
})
</script>
<style scoped lang="scss">
.oa-post-select {
box-sizing: border-box;
width: 100%;
max-width: 100%;
min-width: 0;
}
.oa-post-select__select {
width: 100%;
max-width: 100%;
}
.oa-post-select__select :deep(.el-select),
.oa-post-select__select :deep(.el-select__wrapper),
.oa-post-select__select :deep(.el-tooltip__trigger) {
width: 100%;
max-width: 100%;
min-width: 0;
}
.oa-post-select__select :deep(.el-select__selection) {
flex-wrap: wrap;
}
.oa-post-select__select :deep(.el-select__wrapper) {
min-height: 40px;
}
.oa-post-select__trigger {
display: flex;
box-sizing: border-box;
align-items: center;
justify-content: space-between;
width: 100%;
max-width: 100%;
min-height: 40px;
padding: 4px 12px;
border: 1px solid var(--mint-border, #cbd5e1);
border-radius: 8px;
background: #fff;
text-align: left;
cursor: pointer;
}
.oa-post-select__readonly {
color: var(--mint-text, #0f172a);
font-size: 14px;
line-height: 1.5;
word-break: break-all;
}
.oa-post-select__placeholder {
color: var(--mint-text-muted, #94a3b8);
}
.oa-post-select__trigger-text {
min-width: 0;
color: var(--mint-text, #0f172a);
word-break: break-all;
}
.oa-post-select__chev {
flex-shrink: 0;
margin-left: 8px;
color: var(--mint-text-muted, #94a3b8);
font-size: 11px;
}
.oa-post-select__search {
margin-bottom: 10px;
}
.oa-post-select__list {
max-height: 50vh;
overflow: auto;
}
.oa-post-select__row {
display: flex;
gap: 8px;
align-items: center;
min-height: 44px;
padding: 6px 4px;
cursor: pointer;
}
.oa-post-select__row-label {
min-width: 0;
color: var(--mint-text, #0f172a);
}
.oa-post-select__row-sub,
.oa-post-select__opt-sub {
margin-left: 8px;
font-size: 12px;
color: var(--mint-text-muted, #94a3b8);
}
.oa-post-select__empty {
padding: 16px;
color: var(--mint-text-muted, #94a3b8);
text-align: center;
}
@media (max-width: 767px) {
.oa-post-select__select :deep(.el-select__wrapper),
.oa-post-select__trigger {
min-height: 44px;
}
}
</style>
@@ -65,6 +65,23 @@
:value="u.id"
/>
</el-select>
<el-select
v-else-if="isPostField(rule.field)"
:model-value="personValueIds(rule.value)"
multiple
filterable
placeholder="选择职位(任一命中)"
:disabled="disabled"
class="cond-rule-editor__post-select"
@update:model-value="(v) => onValueChange(idx, Array.isArray(v) ? v.map(String) : [])"
>
<el-option
v-for="p in postOptions"
:key="p.id"
:label="p.label"
:value="p.id"
/>
</el-select>
<el-select
v-else-if="optionsFor(rule.field)?.length"
:model-value="rule.value"
@@ -115,7 +132,7 @@
<script setup lang="ts">
import { computed, onMounted, ref, watch } from 'vue'
import { Delete, Plus } from '@element-plus/icons-vue'
import { fetchUserList } from '@/api/admin'
import { fetchPostList, fetchUserList } from '@/api/admin'
import { MAX_ADMIN_LIST_PAGE_SIZE } from '@/utils/fetch-paged-list'
import {
opsForFieldType,
@@ -147,6 +164,7 @@
const localRules = computed(() => props.modelValue || [])
const userOptions = ref<Array<{ id: string; label: string }>>([])
const postOptions = ref<Array<{ id: string; label: string }>>([])
function meta(field: string) {
return props.candidates.find((c) => c.field === field)
@@ -157,6 +175,10 @@
return t === 'person' || t === 'initiator'
}
function isPostField(field: string) {
return meta(field)?.type === 'post'
}
function personValueIds(v: unknown): string[] {
if (Array.isArray(v)) return v.map(String)
if (v == null || v === '') return []
@@ -164,7 +186,7 @@
}
function defaultValueForType(type: string, opts?: ConditionCandidate['options']) {
if (type === 'person' || type === 'initiator') return [] as string[]
if (type === 'person' || type === 'post' || type === 'initiator') return [] as string[]
return opts?.[0]?.value ?? ''
}
@@ -285,10 +307,40 @@
}
}
async function loadPosts() {
try {
const pageSize = MAX_ADMIN_LIST_PAGE_SIZE
const raw: any[] = []
let page = 1
for (;;) {
const res = await fetchPostList({ page, pageSize })
const list = res?.list || []
raw.push(...list)
if (list.length < pageSize) break
if (typeof res?.total === 'number' && raw.length >= res.total) break
page += 1
}
postOptions.value = raw
.filter((r) => String(r.status ?? '1') === '1')
.map((r) => {
const id = String(r.id || '')
const name = String(r.postName || '').trim()
const code = String(r.postCode || '').trim()
return { id, label: name || code || id }
})
.filter((p) => p.id)
} catch {
postOptions.value = []
}
}
onMounted(() => {
if (props.candidates.some((c) => c.type === 'person' || c.type === 'initiator')) {
loadUsers()
}
if (props.candidates.some((c) => c.type === 'post')) {
loadPosts()
}
})
watch(
@@ -297,6 +349,13 @@
if (need && !userOptions.value.length) loadUsers()
}
)
watch(
() => props.candidates.some((c) => c.type === 'post'),
(need) => {
if (need && !postOptions.value.length) loadPosts()
}
)
</script>
<style scoped lang="scss">
@@ -336,4 +395,8 @@
font-size: 11px;
text-align: center;
}
.cond-rule-editor__post-select :deep(.el-select__selection) {
flex-wrap: wrap;
}
</style>
@@ -156,34 +156,110 @@
</div>
</el-form-item>
<el-form-item v-if="showRolesPicker" label="工作流角色">
<el-select
v-model="cfg.oaRoleIds"
multiple
filterable
collapse-tags
collapse-tags-tooltip
placeholder="选择角色"
style="width: 100%"
:loading="roleLoading"
>
<el-option-group label="预置">
<el-option
v-for="r in presetRoles"
:key="r.id"
:label="`${r.roleName}(${r.roleCode})`"
:value="r.id"
/>
</el-option-group>
<el-option-group label="自定义">
<el-option
v-for="r in customRoles"
:key="r.id"
:label="`${r.roleName}(${r.roleCode})`"
:value="r.id"
/>
</el-option-group>
</el-select>
<el-form-item v-if="showRolesPicker">
<template #label>
工作流角色
<span class="form-label-tip">可多选,已选角色成员将作为本节点{{ editing.type === 'cc' ? '抄送' : '审批' }}人</span>
</template>
<div v-loading="roleLoading" class="member-picker">
<el-select
v-model="rolePickBuffer"
filterable
clearable
:loading="roleLoading"
placeholder="搜索角色名称 / 编码,点击添加"
style="width: 100%"
popper-class="oa-flow-member-select-popper"
@change="onRolePick"
>
<el-option-group v-if="presetRoles.length" label="预置">
<el-option
v-for="r in presetRoles"
:key="r.id"
:label="roleOptionLabel(r)"
:value="r.id"
:disabled="(cfg.oaRoleIds || []).includes(r.id)"
>
<div class="member-option">
<span class="member-avatar" :style="{ background: avatarColor(r.id) }">
{{ avatarInitial(r.roleName) }}
</span>
<span class="member-option__meta">
<span class="member-option__name">{{ r.roleName || '未命名' }}</span>
<span v-if="r.roleCode" class="member-option__sub">
编码 {{ r.roleCode }}
</span>
</span>
<el-tag
v-if="(cfg.oaRoleIds || []).includes(r.id)"
size="small"
type="info"
effect="plain"
class="member-option__tag"
>
已选
</el-tag>
</div>
</el-option>
</el-option-group>
<el-option-group v-if="customRoles.length" label="自定义">
<el-option
v-for="r in customRoles"
:key="r.id"
:label="roleOptionLabel(r)"
:value="r.id"
:disabled="(cfg.oaRoleIds || []).includes(r.id)"
>
<div class="member-option">
<span class="member-avatar" :style="{ background: avatarColor(r.id) }">
{{ avatarInitial(r.roleName) }}
</span>
<span class="member-option__meta">
<span class="member-option__name">{{ r.roleName || '未命名' }}</span>
<span v-if="r.roleCode" class="member-option__sub">
编码 {{ r.roleCode }}
</span>
</span>
<el-tag
v-if="(cfg.oaRoleIds || []).includes(r.id)"
size="small"
type="info"
effect="plain"
class="member-option__tag"
>
已选
</el-tag>
</div>
</el-option>
</el-option-group>
</el-select>
<div
class="member-chips"
:class="{ 'is-empty': !(cfg.oaRoleIds && cfg.oaRoleIds.length) }"
>
<template v-if="cfg.oaRoleIds && cfg.oaRoleIds.length">
<span v-for="id in cfg.oaRoleIds" :key="id" class="member-chip">
<span class="member-avatar member-avatar--sm" :style="{ background: avatarColor(id) }">
{{ avatarInitial(resolveRole(id)?.roleName) }}
</span>
<span class="member-chip__name" :title="roleChipTitle(id)">
{{ resolveRole(id)?.roleName || id }}
</span>
<button
type="button"
class="member-chip__rm"
:aria-label="`移除 ${resolveRole(id)?.roleName || id}`"
@click="removeRole(id)"
>
×
</button>
</span>
</template>
<template v-else>暂未选择角色,请从上方搜索添加</template>
</div>
<p class="member-picked-count">已选 {{ cfg.oaRoleIds?.length || 0 }} 个角色</p>
</div>
</el-form-item>
<el-form-item v-if="editing.type === 'approval'" label="多人审批方式">
@@ -364,6 +440,7 @@
const roleOptions = ref<any[]>([])
const userOptions = ref<UserOption[]>([])
const memberPickBuffer = ref('')
const rolePickBuffer = ref('')
const presetRoles = computed(() =>
roleOptions.value.filter((r) => r.roleKind === 'preset' || ['GM', 'CHAIRMAN'].includes(r.roleCode))
@@ -387,11 +464,27 @@
return userOptions.value.find((u) => u.id === id)
}
function resolveRole(id: string) {
return roleOptions.value.find((r) => r.id === id)
}
function chipTitle(id: string) {
const u = resolveUser(id)
return u ? memberOptionLabel(u) : id
}
function roleOptionLabel(r: { roleName?: string; roleCode?: string }) {
const name = (r.roleName || '').trim() || '未命名'
const code = (r.roleCode || '').trim()
if (code && code !== name) return `${name}(${code})`
return name
}
function roleChipTitle(id: string) {
const r = resolveRole(id)
return r ? roleOptionLabel(r) : id
}
function memberOptionLabel(u: UserOption) {
const name = (u.nickName || '').trim() || '未命名'
const no = (u.userNo || '').trim()
@@ -421,6 +514,20 @@
cfg.userIds = cfg.userIds.filter((x) => x !== id)
}
function onRolePick(id: string) {
if (!id) return
if (!cfg.oaRoleIds) cfg.oaRoleIds = []
if (!cfg.oaRoleIds.includes(id)) cfg.oaRoleIds.push(id)
nextTick(() => {
rolePickBuffer.value = ''
})
}
function removeRole(id: string) {
if (!cfg.oaRoleIds) return
cfg.oaRoleIds = cfg.oaRoleIds.filter((x) => x !== id)
}
async function setAssigneeType(type: AssigneeType) {
cfg.assigneeType = type
await onAssigneeTypeChange()
@@ -580,6 +687,7 @@
cfg.oaRoleIds = [...(ac.oaRoleIds || [])]
cfg.signMode = ac.signMode || 'or'
memberPickBuffer.value = ''
rolePickBuffer.value = ''
if (showUsersPicker.value) await loadUsers()
if (showRolesPicker.value) await loadRoles()
drawerVisible.value = true
@@ -5,6 +5,7 @@ export const CONDITION_ELIGIBLE_TYPES = new Set([
'number',
'money',
'person',
'post',
'radio',
'select',
'datePicker',
@@ -31,7 +32,7 @@ export interface ConditionCandidate {
}
export function opsForFieldType(type: string): Array<{ value: ConditionOp; label: string }> {
if (type === 'person' || type === 'initiator') {
if (type === 'person' || type === 'post' || type === 'initiator') {
return [{ value: 'contains', label: '包含' }]
}
// 单选/下拉为离散选项,仅等于/不等于;输入框常填数字参与区间比较,与数字/金额/日期同套运算符
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "label": "OaProgressChain.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L1"}, {"id": "oa_approval_oaprogresschain_statustext", "label": "statusText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L120"}, {"id": "oa_approval_oaprogresschain_statusbadge", "label": "statusBadge()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L138"}, {"id": "oa_approval_oaprogresschain_signbadge", "label": "signBadge()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L147"}, {"id": "oa_approval_oaprogresschain_signbadgetext", "label": "signBadgeText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L154"}, {"id": "oa_approval_oaprogresschain_displaypeople", "label": "displayPeople()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L162"}, {"id": "oa_approval_oaprogresschain_personlines", "label": "personLines()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L175"}, {"id": "oa_approval_oaprogresschain_shownodecomment", "label": "showNodeComment()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L183"}, {"id": "oa_approval_oaprogresschain_personchipclass", "label": "personChipClass()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L189"}, {"id": "oa_approval_oaprogresschain_personstatushint", "label": "personStatusHint()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L198"}, {"id": "oa_approval_oaprogresschain_persontitle", "label": "personTitle()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L210"}, {"id": "oa_approval_oaprogresschain_dotclass", "label": "dotClass()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L220"}, {"id": "oa_approval_oaprogresschain_resolvesourcetext", "label": "resolveSourceText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L228"}, {"id": "oa_approval_oaprogresschain_avatarchar", "label": "avatarChar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L241"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_statustext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L120", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_statusbadge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L138", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_signbadge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L147", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_signbadgetext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L154", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_displaypeople", "relation": "contains", "confidence": "EXLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oareceiveaccountselect_vue", "label": "OaReceiveAccountSelect.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaReceiveAccountSelect.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_receive_accounts_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L1"}, {"id": "receive_accounts_index_requirewhenbank", "label": "requireWhenBank()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L389"}, {"id": "receive_accounts_index_regiontext", "label": "regionText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L421"}, {"id": "receive_accounts_index_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L428"}, {"id": "receive_accounts_index_handlesearch", "label": "handleSearch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L444"}, {"id": "receive_accounts_index_handlereset", "label": "handleReset()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L449"}, {"id": "receive_accounts_index_clearbankfields", "label": "clearBankFields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L456"}, {"id": "receive_accounts_index_ontypechange", "label": "onTypeChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L463"}, {"id": "receive_accounts_index_resetform", "label": "resetForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L468"}, {"id": "receive_accounts_index_handleadd", "label": "handleAdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L477"}, {"id": "receive_accounts_index_handleedit", "label": "handleEdit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L485"}, {"id": "receive_accounts_index_handleview", "label": "handleView()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L502"}, {"id": "receive_accounts_index_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L507"}, {"id": "receive_accounts_index_handledelete", "label": "handleDelete()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L545"}, {"id": "receive_accounts_index_handlebatchdelete", "label": "handleBatchDelete()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L553"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_receive_accounts_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L340", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_receive_accounts_index_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L341", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_receive_accounts_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_datetime_display", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L351", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_receive_accounts_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_oaapproval", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L352", "weight": 1.0}, {"soLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_oaapproval_ts", "label": "oaApproval.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L1"}, {"id": "api_oaapproval_fetchoarolelist", "label": "fetchOaRoleList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L9"}, {"id": "api_oaapproval_fetchensureoarolepresets", "label": "fetchEnsureOaRolePresets()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L16"}, {"id": "api_oaapproval_fetchcreateoarole", "label": "fetchCreateOaRole()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L23"}, {"id": "api_oaapproval_fetchupdateoarole", "label": "fetchUpdateOaRole()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L37"}, {"id": "api_oaapproval_fetchdeleteoarole", "label": "fetchDeleteOaRole()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L53"}, {"id": "api_oaapproval_fetchoaroleusers", "label": "fetchOaRoleUsers()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L60"}, {"id": "api_oaapproval_fetchreplaceoaroleusers", "label": "fetchReplaceOaRoleUsers()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L66"}, {"id": "api_oaapproval_fetchoareceiveaccountlist", "label": "fetchOaReceiveAccountList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L78"}, {"id": "api_oaapproval_fetchoareceiveaccountoptions", "label": "fetchOaReceiveAccountOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L90"}, {"id": "api_oaapproval_fetchoareceiveaccountdetail", "label": "fetchOaReceiveAccountDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L94"}, {"id": "api_oaapproval_fetchcreateoareceiveaccount", "label": "fetchCreateOaReceiveAccount()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L98"}, {"id": "api_oaapproval_fetchupdateoareceiveaccount", "label": "fetchUpdateOaReceiveAccount()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L102"}, {"id": "api_oaapproval_fetchdeleteoareceiveaccount", "label": "fetchDeleteOaReceiveAccount()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L106"}, {"id": "api_oaapproval_fetchbatchdeleteoareceiveaccounts", "label": "fetchBatchDeleteOaReceiveAccounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L110"}, {"id": "api_oaapproval_fetchoagrouplist", "label": "fetchOaGroupList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L122"}, {"id": "api_oaapproval_fetchcreateoagroup", "label": "fetchCreateOaGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L126"}, {"id": "api_oaapproval_fetchupdateoagroup", "label": "fetchUpdateOaGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L138"}, {"id": "api_oaapproval_fetchdeleteoagroup", "label": "fetchDeleteOaGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L149"}, {"id": "api_oaapproval_fetchoaapplist", "label": "fetchOaAppList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L156"}, {"id": "api_oaapproval_fetchcreateoaapp", "label": "fetchCreateOaApp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L167"}, {"id": "api_oaapproval_fetchupdateoaapp", "label": "fetchUpdateOaApp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L175"}, {"id": "api_oaapproval_fetchdeleteoaapp", "label": "fetchDeleteOaApp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L183"}, {"id": "api_oaapproval_fetchoaappdraft", "label": "fetLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L1"}, {"id": "start_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L351"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "target": "start_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L351", "weight": 1.0}], "raw_calls": [{"caller_nid": "start_index_if", "callee": "isArray", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L353"}, {"caller_nid": "start_index_if", "callee": "includes", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L358"}, {"caller_nid": "start_index_if", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L361"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oareceiveaccountselect_vue", "label": "OaReceiveAccountSelect.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaReceiveAccountSelect.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "label": "main.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L1"}, {"id": "src_main_masksecret", "label": "maskSecret()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L38"}, {"id": "src_main_logapicryptobootinfo", "label": "logApiCryptoBootInfo()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L44"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_patch_el_select_filterable", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_app_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_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/main.ts", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_locales", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_assets_styles_core_tailwind_css", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_assets_styles_index_scss", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_sys_console_ts", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_directives", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_sys_error_handle", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L15", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "designer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L16", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "auto_import", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L17", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload", "relation": "imports_from", "confidence": "EXTRACTED", "source_filLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_post_value_ts", "label": "oa-post-value.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L1"}, {"id": "utils_oa_post_value_ispostvalueitem", "label": "isPostValueItem()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L3"}, {"id": "utils_oa_post_value_normalizepostmodelvalue", "label": "normalizePostModelValue()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L9"}, {"id": "utils_oa_post_value_formatpostdisplay", "label": "formatPostDisplay()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L34"}, {"id": "utils_oa_post_value_extractpostids", "label": "extractPostIds()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L46"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_post_value_ts", "target": "utils_oa_post_value_ispostvalueitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_post_value_ts", "target": "utils_oa_post_value_normalizepostmodelvalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_post_value_ts", "target": "utils_oa_post_value_formatpostdisplay", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L34", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_post_value_ts", "target": "utils_oa_post_value_extractpostids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L46", "weight": 1.0}, {"source": "utils_oa_post_value_normalizepostmodelvalue", "target": "utils_oa_post_value_ispostvalueitem", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L20", "weight": 1.0}, {"source": "utils_oa_post_value_formatpostdisplay", "target": "utils_oa_post_value_ispostvalueitem", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L42", "weight": 1.0}, {"source": "utils_oa_post_value_extractpostids", "target": "utils_oa_post_value_ispostvalueitem", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L49", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_oa_post_value_ispostvalueitem", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L6"}, {"caller_nid": "utils_oa_post_value_ispostvalueitem", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L6"}, {"caller_nid": "utils_oa_post_value_ispostvalueitem", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L6"}, {"caller_nid": "utils_oa_post_value_ispostvalueitem", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L6"}, {"caller_nid": "utils_oa_post_value_normalizepostmodelvalue", "callee": "isArray", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L14"}, {"caller_nid": "utils_oa_post_value_normalizepostmodelvalue", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L15"}, {"caller_nid": "utils_oa_post_value_normalizepostmodelvalue", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L15"}, {"caller_nid": "utils_oa_post_value_normalizepostmodelvalue", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L21"}, {"caller_nid": "utils_oa_post_value_normalizepostmodelvalue", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-value.ts", "source_location": "L21"}, {"caller_nid": "utils_oa_poLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_oaapproval_ts", "label": "oaApproval.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L1"}, {"id": "api_oaapproval_fetchoarolelist", "label": "fetchOaRoleList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L9"}, {"id": "api_oaapproval_fetchensureoarolepresets", "label": "fetchEnsureOaRolePresets()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L16"}, {"id": "api_oaapproval_fetchcreateoarole", "label": "fetchCreateOaRole()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L23"}, {"id": "api_oaapproval_fetchupdateoarole", "label": "fetchUpdateOaRole()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L37"}, {"id": "api_oaapproval_fetchdeleteoarole", "label": "fetchDeleteOaRole()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L53"}, {"id": "api_oaapproval_fetchoaroleusers", "label": "fetchOaRoleUsers()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L60"}, {"id": "api_oaapproval_fetchreplaceoaroleusers", "label": "fetchReplaceOaRoleUsers()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L66"}, {"id": "api_oaapproval_fetchoareceiveaccountlist", "label": "fetchOaReceiveAccountList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L78"}, {"id": "api_oaapproval_fetchoareceiveaccountoptions", "label": "fetchOaReceiveAccountOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L90"}, {"id": "api_oaapproval_fetchoareceiveaccountdetail", "label": "fetchOaReceiveAccountDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L94"}, {"id": "api_oaapproval_fetchcreateoareceiveaccount", "label": "fetchCreateOaReceiveAccount()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L98"}, {"id": "api_oaapproval_fetchupdateoareceiveaccount", "label": "fetchUpdateOaReceiveAccount()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L102"}, {"id": "api_oaapproval_fetchdeleteoareceiveaccount", "label": "fetchDeleteOaReceiveAccount()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L106"}, {"id": "api_oaapproval_fetchbatchdeleteoareceiveaccounts", "label": "fetchBatchDeleteOaReceiveAccounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L110"}, {"id": "api_oaapproval_fetchoagrouplist", "label": "fetchOaGroupList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L122"}, {"id": "api_oaapproval_fetchcreateoagroup", "label": "fetchCreateOaGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L126"}, {"id": "api_oaapproval_fetchupdateoagroup", "label": "fetchUpdateOaGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L138"}, {"id": "api_oaapproval_fetchdeleteoagroup", "label": "fetchDeleteOaGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L149"}, {"id": "api_oaapproval_fetchoaapplist", "label": "fetchOaAppList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L156"}, {"id": "api_oaapproval_fetchcreateoaapp", "label": "fetchCreateOaApp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L167"}, {"id": "api_oaapproval_fetchupdateoaapp", "label": "fetchUpdateOaApp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L175"}, {"id": "api_oaapproval_fetchdeleteoaapp", "label": "fetchDeleteOaApp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L183"}, {"id": "api_oaapproval_fetchoaappdraft", "label": "fetLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oareceiveaccountselect_vue", "label": "OaReceiveAccountSelect.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaReceiveAccountSelect.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "label": "oa-condition-fields.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L1"}, {"id": "oa_approval_oa_condition_fields_opsforfieldtype", "label": "opsForFieldType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L34"}, {"id": "oa_approval_oa_condition_fields_walkrules", "label": "walkRules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L55"}, {"id": "oa_approval_oa_condition_fields_flattenformrules", "label": "flattenFormRules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L65"}, {"id": "oa_approval_oa_condition_fields_listconditioncandidates", "label": "listConditionCandidates()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L80"}, {"id": "oa_approval_oa_condition_fields_collectconditionreferencedfields", "label": "collectConditionReferencedFields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L111"}, {"id": "oa_approval_oa_condition_fields_collectformconditionreferencedfields", "label": "collectFormConditionReferencedFields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L129"}, {"id": "oa_approval_oa_condition_fields_normalizeschemaconditionrequired", "label": "normalizeSchemaConditionRequired()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L136"}, {"id": "oa_approval_oa_condition_fields_formatconditionpreview", "label": "formatConditionPreview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L174"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_opsforfieldtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L34", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_walkrules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L55", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_flattenformrules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L65", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_listconditioncandidates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L80", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_collectconditionreferencedfields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L111", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_collectformconditionreferencedfields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L129", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_normalizeschemaconditionrequired", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/compoLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_approval_print_ts", "label": "oa-approval-print.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L1"}, {"id": "utils_oa_approval_print_resolvestamp", "label": "resolveStamp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L100"}, {"id": "utils_oa_approval_print_statustext", "label": "statusText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L117"}, {"id": "utils_oa_approval_print_formatdateonly", "label": "formatDateOnly()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L121"}, {"id": "utils_oa_approval_print_formatnow", "label": "formatNow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L127"}, {"id": "utils_oa_approval_print_ishttpurl", "label": "isHttpUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L133"}, {"id": "utils_oa_approval_print_extracturls", "label": "extractUrls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L137"}, {"id": "utils_oa_approval_print_formatscalar", "label": "formatScalar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L168"}, {"id": "utils_oa_approval_print_israngefieldrule", "label": "isRangeFieldRule()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L191"}, {"id": "utils_oa_approval_print_formatfieldvalue", "label": "formatFieldValue()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L203"}, {"id": "utils_oa_approval_print_walkrules", "label": "walkRules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L210"}, {"id": "utils_oa_approval_print_buildformrows", "label": "buildFormRows()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L306"}, {"id": "utils_oa_approval_print_peopledisplaynames", "label": "peopleDisplayNames()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L327"}, {"id": "utils_oa_approval_print_progresspersonlinesfromitem", "label": "progressPersonLinesFromItem()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L337"}, {"id": "utils_oa_approval_print_isccprogressitem", "label": "isCcProgressItem()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L343"}, {"id": "utils_oa_approval_print_buildflowitems", "label": "buildFlowItems()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L360"}, {"id": "utils_oa_approval_print_buildoaprintmodel", "label": "buildOaPrintModel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L477"}, {"id": "utils_oa_approval_print_buildoaprintfilename", "label": "buildOaPrintFilename()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L517"}, {"id": "utils_oa_approval_print_renderpagelabelcanvas", "label": "renderPageLabelCanvas()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L531"}, {"id": "utils_oa_approval_print_canvastopdf", "label": "canvasToPdf()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L559"}, {"id": "utils_oa_approval_print_exportoaapprovalpdf", "label": "exportOaApprovalPdf()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L599"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_approval_print_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L6", "weight": 1.0}, {"source": "users_wuziLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaflowpreview_vue", "label": "OaFlowPreview.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L1"}, {"id": "oa_approval_oaflowpreview_isinitiatorselect", "label": "isInitiatorSelect()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L227"}, {"id": "oa_approval_oaflowpreview_localpeople", "label": "localPeople()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L232"}, {"id": "oa_approval_oaflowpreview_islocalselected", "label": "isLocalSelected()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L253"}, {"id": "oa_approval_oaflowpreview_avatarcolor", "label": "avatarColor()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L257"}, {"id": "oa_approval_oaflowpreview_avatarinitial", "label": "avatarInitial()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L263"}, {"id": "oa_approval_oaflowpreview_resolveuser", "label": "resolveUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L268"}, {"id": "oa_approval_oaflowpreview_memberoptionlabel", "label": "memberOptionLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L272"}, {"id": "oa_approval_oaflowpreview_memberoptionsub", "label": "memberOptionSub()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L279"}, {"id": "oa_approval_oaflowpreview_chiptitle", "label": "chipTitle()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L286"}, {"id": "oa_approval_oaflowpreview_onmemberpick", "label": "onMemberPick()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L291"}, {"id": "oa_approval_oaflowpreview_removepickermember", "label": "removePickerMember()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L301"}, {"id": "oa_approval_oaflowpreview_updateselect", "label": "updateSelect()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L305"}, {"id": "oa_approval_oaflowpreview_removeuser", "label": "removeUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L320"}, {"id": "oa_approval_oaflowpreview_openpicker", "label": "openPicker()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L328"}, {"id": "oa_approval_oaflowpreview_confirmpicker", "label": "confirmPicker()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L336"}, {"id": "oa_approval_oaflowpreview_onpickerclosed", "label": "onPickerClosed()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L343"}, {"id": "oa_approval_oaflowpreview_signbadge", "label": "signBadge()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L350"}, {"id": "oa_approval_oaflowpreview_signbadgetext", "label": "signBadgeText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L357"}, {"id": "oa_approval_oaflowpreview_avatarchar", "label": "avatarChar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L365"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaflowpreview_vue", "target": "oa_approval_oaflowpreview_isinitiatorselect", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_rule_ts", "label": "oa-receive-account-rule.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-rule.ts", "source_location": "L1"}, {"id": "utils_oa_receive_account_rule_uniqueid", "label": "uniqueId()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-rule.ts", "source_location": "L3"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_rule_ts", "target": "utils_oa_receive_account_rule_uniqueid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-rule.ts", "source_location": "L3", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_oa_receive_account_rule_uniqueid", "callee": "slice", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-rule.ts", "source_location": "L7"}, {"caller_nid": "utils_oa_receive_account_rule_uniqueid", "callee": "toString", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-rule.ts", "source_location": "L7"}, {"caller_nid": "utils_oa_receive_account_rule_uniqueid", "callee": "random", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-rule.ts", "source_location": "L7"}, {"caller_nid": "utils_oa_receive_account_rule_uniqueid", "callee": "toString", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-rule.ts", "source_location": "L8"}, {"caller_nid": "utils_oa_receive_account_rule_uniqueid", "callee": "Number", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-rule.ts", "source_location": "L8"}, {"caller_nid": "utils_oa_receive_account_rule_uniqueid", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-rule.ts", "source_location": "L8"}, {"caller_nid": "utils_oa_receive_account_rule_uniqueid", "callee": "toString", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-rule.ts", "source_location": "L9"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_post_ts", "label": "oa-form-create-post.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-post.ts", "source_location": "L1"}, {"id": "utils_oa_form_create_post_setupoapostselect", "label": "setupOaPostSelect()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-post.ts", "source_location": "L7"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_post_ts", "target": "designer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-post.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_post_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oapostselect_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-post.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_post_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_post_select_rule", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-post.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_post_ts", "target": "utils_oa_form_create_post_setupoapostselect", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-post.ts", "source_location": "L7", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_oa_form_create_post_setupoapostselect", "callee": "component", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-post.ts", "source_location": "L9"}, {"caller_nid": "utils_oa_form_create_post_setupoapostselect", "callee": "component", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-post.ts", "source_location": "L11"}, {"caller_nid": "utils_oa_form_create_post_setupoapostselect", "callee": "addDragRule", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-post.ts", "source_location": "L14"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L1"}, {"id": "start_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L351"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "target": "start_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L351", "weight": 1.0}], "raw_calls": [{"caller_nid": "start_index_if", "callee": "isArray", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L353"}, {"caller_nid": "start_index_if", "callee": "includes", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L358"}, {"caller_nid": "start_index_if", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L361"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "label": "main.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "zh_cn", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "index_css", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_assets_styles_core_oa_fc_runtime_scss", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "designer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_user", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L15", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_related_approval", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L16", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_dept", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L17", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_money", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L18", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_person", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L19", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_post", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oareceiveaccountselect_vue", "label": "OaReceiveAccountSelect.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaReceiveAccountSelect.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_approval_print_ts", "label": "oa-approval-print.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L1"}, {"id": "utils_oa_approval_print_resolvestamp", "label": "resolveStamp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L101"}, {"id": "utils_oa_approval_print_statustext", "label": "statusText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L118"}, {"id": "utils_oa_approval_print_formatdateonly", "label": "formatDateOnly()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L122"}, {"id": "utils_oa_approval_print_formatnow", "label": "formatNow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L128"}, {"id": "utils_oa_approval_print_ishttpurl", "label": "isHttpUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L134"}, {"id": "utils_oa_approval_print_extracturls", "label": "extractUrls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L138"}, {"id": "utils_oa_approval_print_formatscalar", "label": "formatScalar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L169"}, {"id": "utils_oa_approval_print_israngefieldrule", "label": "isRangeFieldRule()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L192"}, {"id": "utils_oa_approval_print_formatfieldvalue", "label": "formatFieldValue()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L204"}, {"id": "utils_oa_approval_print_walkrules", "label": "walkRules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L211"}, {"id": "utils_oa_approval_print_buildformrows", "label": "buildFormRows()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L313"}, {"id": "utils_oa_approval_print_peopledisplaynames", "label": "peopleDisplayNames()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L334"}, {"id": "utils_oa_approval_print_progresspersonlinesfromitem", "label": "progressPersonLinesFromItem()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L344"}, {"id": "utils_oa_approval_print_isccprogressitem", "label": "isCcProgressItem()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L350"}, {"id": "utils_oa_approval_print_buildflowitems", "label": "buildFlowItems()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L367"}, {"id": "utils_oa_approval_print_buildoaprintmodel", "label": "buildOaPrintModel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L484"}, {"id": "utils_oa_approval_print_buildoaprintfilename", "label": "buildOaPrintFilename()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L524"}, {"id": "utils_oa_approval_print_renderpagelabelcanvas", "label": "renderPageLabelCanvas()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L538"}, {"id": "utils_oa_approval_print_canvastopdf", "label": "canvasToPdf()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L566"}, {"id": "utils_oa_approval_print_exportoaapprovalpdf", "label": "exportOaApprovalPdf()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L606"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_approval_print_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L6", "weight": 1.0}, {"source": "users_wuziLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "label": "FlowDesigner.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L1"}, {"id": "flow_tree_flowdesigner_commit", "label": "commit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L313"}, {"id": "flow_tree_flowdesigner_avatarcolor", "label": "avatarColor()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L375"}, {"id": "flow_tree_flowdesigner_avatarinitial", "label": "avatarInitial()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L381"}, {"id": "flow_tree_flowdesigner_resolveuser", "label": "resolveUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L386"}, {"id": "flow_tree_flowdesigner_chiptitle", "label": "chipTitle()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L390"}, {"id": "flow_tree_flowdesigner_memberoptionlabel", "label": "memberOptionLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L395"}, {"id": "flow_tree_flowdesigner_memberoptionsub", "label": "memberOptionSub()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L403"}, {"id": "flow_tree_flowdesigner_onmemberpick", "label": "onMemberPick()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L410"}, {"id": "flow_tree_flowdesigner_removemember", "label": "removeMember()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L419"}, {"id": "flow_tree_flowdesigner_setassigneetype", "label": "setAssigneeType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L424"}, {"id": "flow_tree_flowdesigner_onassigneeoptionclick", "label": "onAssigneeOptionClick()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L429"}, {"id": "flow_tree_flowdesigner_loadroles", "label": "loadRoles()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L444"}, {"id": "flow_tree_flowdesigner_loadusers", "label": "loadUsers()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L454"}, {"id": "flow_tree_flowdesigner_findnode", "label": "findNode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L478"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L255", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L256", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_oaapproval", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/workLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "label": "oa-receive-account-value.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L1"}, {"id": "utils_oa_receive_account_value_isreceiveaccounttype", "label": "isReceiveAccountType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L33"}, {"id": "utils_oa_receive_account_value_isreceiveaccountsnapshot", "label": "isReceiveAccountSnapshot()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L37"}, {"id": "utils_oa_receive_account_value_trimsnapshot", "label": "trimSnapshot()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L47"}, {"id": "utils_oa_receive_account_value_normalizereceiveaccountmodelvalue", "label": "normalizeReceiveAccountModelValue()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L61"}, {"id": "utils_oa_receive_account_value_formatreceiveaccountline", "label": "formatReceiveAccountLine()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L73"}, {"id": "utils_oa_receive_account_value_formatreceiveaccountdisplay", "label": "formatReceiveAccountDisplay()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L90"}, {"id": "utils_oa_receive_account_value_optionlabelfromrow", "label": "optionLabelFromRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L96"}, {"id": "utils_oa_receive_account_value_snapshotfromrow", "label": "snapshotFromRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L106"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_isreceiveaccounttype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L33", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_isreceiveaccountsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L37", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_trimsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L47", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_normalizereceiveaccountmodelvalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L61", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_formatreceiveaccountline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L73", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_formatreceiveaccountdisplay", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L90", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_optionlabelfromrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L96", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_snapshotfromrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00codLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "label": "main.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "zh_cn", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "index_css", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_assets_styles_core_oa_fc_runtime_scss", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "designer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_user", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L15", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_related_approval", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L16", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_dept", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L17", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_money", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L18", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_person", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L19", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_receive_account", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-hostLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_test_ts", "label": "oa-receive-account-value.test.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.test.ts", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_test_ts", "target": "node_test", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_test_ts", "target": "strict", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.test.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_test_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.test.ts", "source_location": "L3", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "label": "FlowBranch.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L1"}, {"id": "flow_tree_flowbranch_branchtitle", "label": "branchTitle()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L160"}, {"id": "flow_tree_flowbranch_nodesummary", "label": "nodeSummary()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L167"}, {"id": "flow_tree_flowbranch_onadd", "label": "onAdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L176"}, {"id": "flow_tree_flowbranch_onaddingroup", "label": "onAddInGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L182"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L119", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L123", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L124", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L126", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "flow_tree_flowbranch_branchtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L160", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "flow_tree_flowbranch_nodesummary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L167", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "flow_tree_flowbranch_onadd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L176", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "flow_tree_flowbranch_onaddingroup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L182", "weight": 1.0}], "raw_calls": [{"caller_nid": "flow_tree_flowbranch_branchtitle", "callee": "formatConditionPreview", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L162"}, {"caller_nid": "flow_tree_flowbranch_nodesummary", "callee": "summarizeApprover", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L173"}, {"caller_nid": "flow_tree_flowbranch_onadd", "callee": "emit", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_loLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_receive_accounts_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L1"}, {"id": "receive_accounts_index_requirewhenbank", "label": "requireWhenBank()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L409"}, {"id": "receive_accounts_index_regiontext", "label": "regionText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L450"}, {"id": "receive_accounts_index_loadregiontree", "label": "loadRegionTree()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L457"}, {"id": "receive_accounts_index_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L466"}, {"id": "receive_accounts_index_handlesearch", "label": "handleSearch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L482"}, {"id": "receive_accounts_index_handlereset", "label": "handleReset()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L487"}, {"id": "receive_accounts_index_clearbankfields", "label": "clearBankFields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L494"}, {"id": "receive_accounts_index_ontypechange", "label": "onTypeChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L501"}, {"id": "receive_accounts_index_onprovincechange", "label": "onProvinceChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L506"}, {"id": "receive_accounts_index_resetform", "label": "resetForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L510"}, {"id": "receive_accounts_index_handleadd", "label": "handleAdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L519"}, {"id": "receive_accounts_index_handleedit", "label": "handleEdit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L527"}, {"id": "receive_accounts_index_handleview", "label": "handleView()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L544"}, {"id": "receive_accounts_index_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L549"}, {"id": "receive_accounts_index_handledelete", "label": "handleDelete()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L587"}, {"id": "receive_accounts_index_handlebatchdelete", "label": "handleBatchDelete()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L595"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_receive_accounts_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L356", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_receive_accounts_index_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/receive-accounts/index.vue", "source_location": "L357", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_receive_accounts_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_datetime_display", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/viewsLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_test_ts", "label": "oa-receive-account-value.test.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.test.ts", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_test_ts", "target": "node_test", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_test_ts", "target": "strict", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.test.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_test_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.test.ts", "source_location": "L3", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "label": "FlowDesigner.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L1"}, {"id": "flow_tree_flowdesigner_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L592"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "target": "flow_tree_flowdesigner_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L592", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "target": "flow_tree_flowdesigner_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L654", "weight": 1.0}], "raw_calls": [{"caller_nid": "flow_tree_flowdesigner_if", "callee": "findNode", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L593"}, {"caller_nid": "flow_tree_flowdesigner_if", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L656"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_conditionruleeditor_vue", "label": "ConditionRuleEditor.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_conditionruleeditor_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue", "source_location": "L134", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_conditionruleeditor_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue", "source_location": "L135", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_conditionruleeditor_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_fetch_paged_list", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue", "source_location": "L136", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_conditionruleeditor_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue", "source_location": "L137", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_conditionruleeditor_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue", "source_location": "L142", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_post_select_rule_ts", "label": "oa-post-select-rule.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-select-rule.ts", "source_location": "L1"}, {"id": "utils_oa_post_select_rule_uniqueid", "label": "uniqueId()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-select-rule.ts", "source_location": "L3"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_post_select_rule_ts", "target": "utils_oa_post_select_rule_uniqueid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-select-rule.ts", "source_location": "L3", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_oa_post_select_rule_uniqueid", "callee": "slice", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-select-rule.ts", "source_location": "L7"}, {"caller_nid": "utils_oa_post_select_rule_uniqueid", "callee": "toString", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-select-rule.ts", "source_location": "L7"}, {"caller_nid": "utils_oa_post_select_rule_uniqueid", "callee": "random", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-select-rule.ts", "source_location": "L7"}, {"caller_nid": "utils_oa_post_select_rule_uniqueid", "callee": "toString", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-select-rule.ts", "source_location": "L8"}, {"caller_nid": "utils_oa_post_select_rule_uniqueid", "callee": "Number", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-select-rule.ts", "source_location": "L8"}, {"caller_nid": "utils_oa_post_select_rule_uniqueid", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-select-rule.ts", "source_location": "L8"}, {"caller_nid": "utils_oa_post_select_rule_uniqueid", "callee": "toString", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-post-select-rule.ts", "source_location": "L9"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types_ts", "label": "types.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L1"}, {"id": "flow_tree_types_newid", "label": "newId()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L46"}, {"id": "flow_tree_types_createendnode", "label": "createEndNode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L50"}, {"id": "flow_tree_types_createdefaultflow", "label": "createDefaultFlow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L54"}, {"id": "flow_tree_types_createnode", "label": "createNode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L69"}, {"id": "flow_tree_types_ensureflowroot", "label": "ensureFlowRoot()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L117"}, {"id": "flow_tree_types_normalizeccassigneetypes", "label": "normalizeCcAssigneeTypes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L143"}, {"id": "flow_tree_types_summarizeapprover", "label": "summarizeApprover()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L163"}, {"id": "flow_tree_types_insertbetween", "label": "insertBetween()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L198"}, {"id": "flow_tree_types_removechildnode", "label": "removeChildNode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L205"}, {"id": "flow_tree_types_removefromsubtree", "label": "removeFromSubtree()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L219"}, {"id": "flow_tree_types_findparent", "label": "findParent()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L229"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types_ts", "target": "flow_tree_types_newid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L46", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types_ts", "target": "flow_tree_types_createendnode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L50", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types_ts", "target": "flow_tree_types_createdefaultflow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L54", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types_ts", "target": "flow_tree_types_createnode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L69", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types_ts", "target": "flow_tree_types_ensureflowroot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L117", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types_ts", "target": "flow_tree_types_normalizeccassigneetypes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/types.ts", "source_location": "L143", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types_ts", "target": "flow_tree_types_summarizeapproLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_receive_account_ts", "label": "oa-form-create-receive-account.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-receive-account.ts", "source_location": "L1"}, {"id": "utils_oa_form_create_receive_account_setupoareceiveaccountselect", "label": "setupOaReceiveAccountSelect()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-receive-account.ts", "source_location": "L7"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_receive_account_ts", "target": "designer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-receive-account.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_receive_account_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oareceiveaccountselect_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-receive-account.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_receive_account_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_rule", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-receive-account.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_receive_account_ts", "target": "utils_oa_form_create_receive_account_setupoareceiveaccountselect", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-receive-account.ts", "source_location": "L7", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_oa_form_create_receive_account_setupoareceiveaccountselect", "callee": "component", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-receive-account.ts", "source_location": "L11"}, {"caller_nid": "utils_oa_form_create_receive_account_setupoareceiveaccountselect", "callee": "component", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-receive-account.ts", "source_location": "L13"}, {"caller_nid": "utils_oa_form_create_receive_account_setupoareceiveaccountselect", "callee": "addDragRule", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-receive-account.ts", "source_location": "L16"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oapostselect_vue", "label": "OaPostSelect.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaPostSelect.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -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": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oapersonselect_vue", "label": "OaPersonSelect.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaPersonSelect.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "label": "main.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L1"}, {"id": "src_main_masksecret", "label": "maskSecret()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L36"}, {"id": "src_main_logapicryptobootinfo", "label": "logApiCryptoBootInfo()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L42"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_patch_el_select_filterable", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_app_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_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/main.ts", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_locales", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_assets_styles_core_tailwind_css", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_assets_styles_index_scss", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_sys_console_ts", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_directives", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_sys_error_handle", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L15", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "designer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L16", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "auto_import", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L17", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload", "relation": "imports_from", "confidence": "EXTRACTED", "source_filLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "label": "oa-receive-account-value.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L1"}, {"id": "utils_oa_receive_account_value_isreceiveaccounttype", "label": "isReceiveAccountType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L33"}, {"id": "utils_oa_receive_account_value_isreceiveaccountsnapshot", "label": "isReceiveAccountSnapshot()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L37"}, {"id": "utils_oa_receive_account_value_trimsnapshot", "label": "trimSnapshot()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L47"}, {"id": "utils_oa_receive_account_value_normalizereceiveaccountmodelvalue", "label": "normalizeReceiveAccountModelValue()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L61"}, {"id": "utils_oa_receive_account_value_formatreceiveaccountline", "label": "formatReceiveAccountLine()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L73"}, {"id": "utils_oa_receive_account_value_formatreceiveaccountdisplay", "label": "formatReceiveAccountDisplay()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L93"}, {"id": "utils_oa_receive_account_value_optionlabelfromrow", "label": "optionLabelFromRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L99"}, {"id": "utils_oa_receive_account_value_snapshotfromrow", "label": "snapshotFromRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L111"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_isreceiveaccounttype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L33", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_isreceiveaccountsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L37", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_trimsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L47", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_normalizereceiveaccountmodelvalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L61", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_formatreceiveaccountline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L73", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_formatreceiveaccountdisplay", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L93", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_optionlabelfromrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-receive-account-value.ts", "source_location": "L99", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_receive_account_value_ts", "target": "utils_oa_receive_account_value_snapshotfromrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00codLine truncated
+2
View File
@@ -20,6 +20,7 @@ import { setupOaRelatedApproval } from '@/utils/oa-form-create-related-approval'
import { setupOaDeptSelect } from '@/utils/oa-form-create-dept'
import { setupOaMoneyField } from '@/utils/oa-form-create-money'
import { setupOaPersonSelect } from '@/utils/oa-form-create-person'
import { setupOaPostSelect } from '@/utils/oa-form-create-post'
import { setupOaReceiveAccountSelect } from '@/utils/oa-form-create-receive-account'
// FormCreate 按字符串解析 el-input / fc-radio 等,主应用是按需自动导入,不会全局注册;
@@ -31,6 +32,7 @@ setupOaRelatedApproval(FcDesigner.formCreate)
setupOaDeptSelect(FcDesigner.formCreate)
setupOaMoneyField(FcDesigner.formCreate)
setupOaPersonSelect(FcDesigner.formCreate)
setupOaPostSelect(FcDesigner.formCreate)
setupOaReceiveAccountSelect(FcDesigner.formCreate)
function maskSecret(value?: string) {
+2
View File
@@ -17,6 +17,7 @@ import { setupOaRelatedApproval } from '@/utils/oa-form-create-related-approval'
import { setupOaDeptSelect } from '@/utils/oa-form-create-dept'
import { setupOaMoneyField } from '@/utils/oa-form-create-money'
import { setupOaPersonSelect } from '@/utils/oa-form-create-person'
import { setupOaPostSelect } from '@/utils/oa-form-create-post'
import { setupOaReceiveAccountSelect } from '@/utils/oa-form-create-receive-account'
import App from './App.vue'
@@ -38,5 +39,6 @@ setupOaRelatedApproval(FcDesigner.formCreate)
setupOaDeptSelect(FcDesigner.formCreate)
setupOaMoneyField(FcDesigner.formCreate)
setupOaPersonSelect(FcDesigner.formCreate)
setupOaPostSelect(FcDesigner.formCreate)
setupOaReceiveAccountSelect(FcDesigner.formCreate)
app.mount('#app')
+7
View File
@@ -14,6 +14,7 @@ import {
import { formatProgressPersonLines } from '@/utils/oa-progress-person-lines'
import { formatDeptDisplay } from '@/utils/oa-dept-value'
import { formatPersonDisplay } from '@/utils/oa-person-value'
import { formatPostDisplay } from '@/utils/oa-post-value'
import { formatMoneyDisplay } from '@/utils/money-format'
import { formatReceiveAccountDisplay } from '@/utils/oa-receive-account-value'
import { toRmbUpper } from '@/utils/rmb-upper'
@@ -254,6 +255,12 @@ async function walkRules(
continue
}
if (type === 'post') {
const text = formatPostDisplay(value)
out.push({ label, text: text || '-' })
continue
}
if (type === 'money') {
const showUpper = rule.props?.showUpper !== false
const n =
@@ -0,0 +1,17 @@
import FcDesigner from '@form-create/designer'
import OaPostSelect from '@/components/oa-approval/OaPostSelect.vue'
import { postSelectDragRule } from '@/utils/oa-post-select-rule'
const FLAG = '__oaPostSelectConfigured'
export function setupOaPostSelect(formCreate?: { component?: (name: string, c: unknown) => void }) {
if ((FcDesigner as any)[FLAG]) return
FcDesigner.component('post', OaPostSelect)
if (typeof formCreate?.component === 'function') {
formCreate.component('post', OaPostSelect)
}
if (typeof FcDesigner.addDragRule === 'function') {
FcDesigner.addDragRule(postSelectDragRule)
}
;(FcDesigner as any)[FLAG] = true
}
@@ -0,0 +1,60 @@
/** 与 FormCreate 官方 unique 同类:生成不重复 field */
let _uidSeq = 0
function uniqueId() {
const num = 370 + ++_uidSeq
return (
'F' +
Math.random().toString(36).slice(3, 6) +
Number(`${Date.now()}`).toString(36) +
num.toString(36) +
't'
)
}
/** FormCreate Designer DragRule:职位选择 */
export const postSelectDragRule = {
menu: 'main' as const,
icon: 'icon-input',
label: '职位',
name: 'post',
input: true,
mask: true,
validate: ['string', 'array', 'object'],
event: ['change'],
rule() {
return {
type: 'post',
field: uniqueId(),
title: '职位',
info: '',
$required: false,
props: {
multiple: true,
max: undefined as number | undefined
}
}
},
props() {
return [
{
type: 'switch',
field: 'multiple',
title: '允许多选',
value: true,
props: { activeText: '是', inactiveText: '否' }
},
{
type: 'inputNumber',
field: 'max',
title: '最大可选数',
value: undefined,
props: { min: 1, precision: 0, placeholder: '不填则不限制' }
},
{
type: 'input',
field: 'formCreateInfo',
title: '提示信息'
}
]
}
}
+61
View File
@@ -0,0 +1,61 @@
export type OaPostValueItem = { id: string; name: string }
export function isPostValueItem(v: unknown): v is OaPostValueItem {
if (!v || typeof v !== 'object') return false
const o = v as Record<string, unknown>
return String(o.id || '').trim() !== '' && String(o.name || '').trim() !== ''
}
export function normalizePostModelValue(
raw: unknown,
multiple: boolean
): OaPostValueItem | OaPostValueItem[] | null {
if (multiple) {
if (Array.isArray(raw)) {
return raw.filter(isPostValueItem).map((x) => ({
id: String(x.id).trim(),
name: String(x.name).trim()
}))
}
if (isPostValueItem(raw)) {
return [{ id: String(raw.id).trim(), name: String(raw.name).trim() }]
}
return []
}
if (isPostValueItem(raw)) {
return { id: String(raw.id).trim(), name: String(raw.name).trim() }
}
if (Array.isArray(raw) && raw.length === 1 && isPostValueItem(raw[0])) {
return { id: String(raw[0].id).trim(), name: String(raw[0].name).trim() }
}
return null
}
export function formatPostDisplay(raw: unknown): string {
if (Array.isArray(raw)) {
return raw
.filter(isPostValueItem)
.map((x) => x.name)
.filter(Boolean)
.join('、')
}
if (isPostValueItem(raw)) return raw.name
return ''
}
export function extractPostIds(raw: unknown): string[] {
const n = Array.isArray(raw)
? raw.filter(isPostValueItem)
: isPostValueItem(raw)
? [raw]
: []
const out: string[] = []
const seen = new Set<string>()
for (const x of n) {
const id = String(x.id).trim()
if (!id || seen.has(id)) continue
seen.add(id)
out.push(id)
}
return out
}
@@ -89,7 +89,7 @@
<el-dialog
v-model="dlgVisible"
:title="picked?.appName || '发起审批'"
width="720px"
width="920px"
class="dialog-form-layout"
align-center
append-to-body