diff --git a/backend/app/services/pl/plan_list_export_segments.py b/backend/app/services/pl/plan_list_export_segments.py new file mode 100644 index 000000000..effae4ac6 --- /dev/null +++ b/backend/app/services/pl/plan_list_export_segments.py @@ -0,0 +1,28 @@ +"""运输计划列表 / 归档 / 合同完善导出共用的段次×产品槽位。""" +from __future__ import annotations + +from typing import Any, Optional + + +def format_stop_segment_label(kind: str, delivery_seq: Optional[int] = None) -> str: + if kind == "load": + return "装货" + return f"送货 #{delivery_seq or 1}" + + +def iter_segment_product_slots(load_read: Any, delivery_reads: Any): + """按列表展平顺序产出 (kind, load, delivery, delivery_seq, product)。""" + if load_read is not None: + load_products = list(getattr(load_read, "products", None) or []) or [None] + for product in load_products: + yield ("load", load_read, None, None, product) + deliveries = list(delivery_reads or []) or ([None] if load_read is not None else []) + for index, delivery in enumerate(deliveries): + seq = getattr(delivery, "seq", None) if delivery is not None else (index + 1) + if seq is None: + seq = index + 1 + products = list(getattr(delivery, "products", None) or []) if delivery else [] + if not products: + products = [None] + for product in products: + yield ("delivery", None, delivery, seq, product) diff --git a/backend/graphify-out/cache/ast/5b3dcb6c18a611166e7c20c4bb6a780fa792cd1c35dac0abbb599c9e30a94f24.json b/backend/graphify-out/cache/ast/5b3dcb6c18a611166e7c20c4bb6a780fa792cd1c35dac0abbb599c9e30a94f24.json new file mode 100644 index 000000000..69f5029b7 --- /dev/null +++ b/backend/graphify-out/cache/ast/5b3dcb6c18a611166e7c20c4bb6a780fa792cd1c35dac0abbb599c9e30a94f24.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "label": "test_pl_plan_list_export.py", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L1"}, {"id": "tests_test_pl_plan_list_export_test_normalize_plan_export_columns_maps_list_props", "label": "test_normalize_plan_export_columns_maps_list_props()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L15"}, {"id": "tests_test_pl_plan_list_export_test_format_plan_list_export_brand_only_required", "label": "test_format_plan_list_export_brand_only_required()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L42"}, {"id": "tests_test_pl_plan_list_export_test_filter_export_columns_keeps_list_props_after_normalize", "label": "test_filter_export_columns_keeps_list_props_after_normalize()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L49"}, {"id": "tests_test_pl_plan_list_export_test_plan_list_export_filename_stem_by_stock_role", "label": "test_plan_list_export_filename_stem_by_stock_role()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L87"}, {"id": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "label": "test_build_plan_list_export_rows_expands_products_with_crm_names()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L93"}, {"id": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "label": "test_build_plan_list_export_rows_expands_stop_segments()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L250"}, {"id": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "label": "test_build_plan_list_export_rows_empty_delivery_products_placeholder()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L399"}, {"id": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "label": "test_build_plan_list_export_rows_legacy_without_stops()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L500"}, {"id": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "label": "test_build_plan_list_export_rows_internal_customer_contract_placeholder()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L580"}, {"id": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "label": "test_plan_list_merge_sheet_follows_list_rowspan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L694"}, {"id": "tests_test_pl_plan_list_export_rationale_1", "label": "\u8fd0\u8f93\u8ba1\u5212\u5217\u8868\u5bfc\u51fa\uff1a\u4ea7\u54c1\u540d\u79f0 / \u54c1\u724c / \u522b\u540d / \u72b6\u6001\u4e2d\u6587 / \u5217\u8868\u5217\u5bf9\u9f50\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L1"}, {"id": "tests_test_pl_plan_list_export_rationale_251", "label": "\u4e00\u88c5\u591a\u9001\uff1a\u5148\u88c5\u8d27\u4ea7\u54c1\u884c\uff0c\u518d\u5404\u9001\u8d27\u6bb5\u4ea7\u54c1\u884c\uff1b\u4fa7\u680f\u5b57\u6bb5\u6309\u884c\u586b\u5199\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L251"}, {"id": "tests_test_pl_plan_list_export_rationale_501", "label": "\u65e0\u6bb5\u7ed3\u6784\uff1a\u56de\u9000\u8ba1\u5212\u7ea7\u4ea7\u54c1\uff1bstopSegment \u4e3a\u7a7a\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L501"}, {"id": "tests_test_pl_plan_list_export_rationale_581", "label": "\u5c71\u5ce1/\u4e91\u680b\u7f3a\u5408\u540c\uff1a\u88c5\u8d27\u884c\u5408\u540c\u4e3a\u51fa\u5e93\uff0c\u9001\u8d27\u884c\u4e3a\u5165\u5e93\uff08\u4e0e\u5217\u8868 UI \u4e00\u81f4\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L581"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "types", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "app_api_pl_plan", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "app_utils_excel_export", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L12", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "tests_test_pl_plan_list_export_test_normalize_plan_export_columns_maps_list_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L15", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "tests_test_pl_plan_list_export_test_format_plan_list_export_brand_only_required", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L42", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "tests_test_pl_plan_list_export_test_filter_export_columns_keeps_list_props_after_normalize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L49", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "tests_test_pl_plan_list_export_test_plan_list_export_filename_stem_by_stock_role", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L87", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L93", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L399", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L500", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L580", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "target": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L694", "weight": 1.0}, {"source": "tests_test_pl_plan_list_export_rationale_1", "target": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_list_export_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L1", "weight": 1.0}, {"source": "tests_test_pl_plan_list_export_rationale_251", "target": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L251", "weight": 1.0}, {"source": "tests_test_pl_plan_list_export_rationale_501", "target": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L501", "weight": 1.0}, {"source": "tests_test_pl_plan_list_export_rationale_581", "target": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L581", "weight": 1.0}], "raw_calls": [{"caller_nid": "tests_test_pl_plan_list_export_test_normalize_plan_export_columns_maps_list_props", "callee": "_normalize_plan_export_columns", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L16"}, {"caller_nid": "tests_test_pl_plan_list_export_test_normalize_plan_export_columns_maps_list_props", "callee": "_normalize_plan_export_columns", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L39"}, {"caller_nid": "tests_test_pl_plan_list_export_test_format_plan_list_export_brand_only_required", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L43"}, {"caller_nid": "tests_test_pl_plan_list_export_test_format_plan_list_export_brand_only_required", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L44"}, {"caller_nid": "tests_test_pl_plan_list_export_test_format_plan_list_export_brand_only_required", "callee": "_format_plan_list_export_brand", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L45"}, {"caller_nid": "tests_test_pl_plan_list_export_test_format_plan_list_export_brand_only_required", "callee": "_format_plan_list_export_brand", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L46"}, {"caller_nid": "tests_test_pl_plan_list_export_test_filter_export_columns_keeps_list_props_after_normalize", "callee": "_normalize_plan_export_columns", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L50"}, {"caller_nid": "tests_test_pl_plan_list_export_test_filter_export_columns_keeps_list_props_after_normalize", "callee": "filter_export_columns", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L68"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_export_filename_stem_by_stock_role", "callee": "_plan_list_export_filename_stem", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L88"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_export_filename_stem_by_stock_role", "callee": "_plan_list_export_filename_stem", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L89"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_export_filename_stem_by_stock_role", "callee": "_plan_list_export_filename_stem", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L90"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L94"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L112"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L126"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L138"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L150"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L151"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L157"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L163"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L166"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L173"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L197"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L199"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L199"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L199"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L200"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "_build_plan_list_export_rows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L204"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_products_with_crm_names", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L211"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L252"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L269"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L270"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L277"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L291"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L305"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L319"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L325"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L328"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L335"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L338"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L345"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L369"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L371"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L371"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L371"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L372"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "_build_plan_list_export_rows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L376"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_expands_stop_segments", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L383"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L401"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L418"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L419"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L425"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L439"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L445"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L448"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L455"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L479"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L481"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L481"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L481"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L482"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "_build_plan_list_export_rows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L486"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_empty_delivery_products_placeholder", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L493"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L502"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L519"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L533"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L534"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L560"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L562"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L562"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L562"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L563"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "callee": "_build_plan_list_export_rows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L567"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_legacy_without_stops", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L574"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "next", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L584"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "iter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L584"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L585"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L602"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L603"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L609"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L621"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L630"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L639"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L673"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L675"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L675"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L675"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L676"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "_build_plan_list_export_rows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L680"}, {"caller_nid": "tests_test_pl_plan_list_export_test_build_plan_list_export_rows_internal_customer_contract_placeholder", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L687"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "callee": "ExportColumn", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L710"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "callee": "ExportColumn", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L711"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "callee": "ExportColumn", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L712"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "callee": "ExportColumn", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L713"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "callee": "ExportColumn", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L714"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "callee": "ExportColumn", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L715"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "callee": "Workbook", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L752"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "callee": "append_archive_list_merge_sheet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L754"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "callee": "Resolver", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L758"}, {"caller_nid": "tests_test_pl_plan_list_export_test_plan_list_merge_sheet_follows_list_rowspan", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_list_export.py", "source_location": "L768"}]} \ No newline at end of file diff --git a/backend/graphify-out/cache/ast/6271f423eadaf4517fce998e6f8593a925d2a9dcd2c3ca5f09f1106850908f92.json b/backend/graphify-out/cache/ast/6271f423eadaf4517fce998e6f8593a925d2a9dcd2c3ca5f09f1106850908f92.json new file mode 100644 index 000000000..4ab1108f5 --- /dev/null +++ b/backend/graphify-out/cache/ast/6271f423eadaf4517fce998e6f8593a925d2a9dcd2c3ca5f09f1106850908f92.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "label": "pl_plan_archive_export.py", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L1"}, {"id": "services_pl_plan_archive_export_unique_contract_nos", "label": "_unique_contract_nos()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L24"}, {"id": "services_pl_plan_archive_export_contract_nos_from_stop_links", "label": "_contract_nos_from_stop_links()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L35"}, {"id": "services_pl_plan_archive_export_format_stop_contract_export_label", "label": "format_stop_contract_export_label()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L59"}, {"id": "services_pl_plan_archive_export_load_contract_nos_by_plan", "label": "_load_contract_nos_by_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L73"}, {"id": "services_pl_plan_archive_export_resolve_archive_list_io_column", "label": "resolve_archive_list_io_column()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L128"}, {"id": "services_pl_plan_archive_export_format_date_value", "label": "_format_date_value()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L136"}, {"id": "services_pl_plan_archive_export_format_plate_display", "label": "_format_plate_display()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L142"}, {"id": "services_pl_plan_archive_export_get_stop_archive_actual_qty", "label": "_get_stop_archive_actual_qty()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L152"}, {"id": "services_pl_plan_archive_export_get_stop_archive_unit_price", "label": "_get_stop_archive_unit_price()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L156"}, {"id": "services_pl_plan_archive_export_get_stop_archive_amount", "label": "_get_stop_archive_amount()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L160"}, {"id": "services_pl_plan_archive_export_stop_time", "label": "_stop_time()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L171"}, {"id": "services_pl_plan_archive_export_load_legacy_products_by_plan", "label": "_load_legacy_products_by_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L177"}, {"id": "services_pl_plan_archive_export_plan_common_export_fields", "label": "_plan_common_export_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L198"}, {"id": "services_pl_plan_archive_export_empty_pair_side_fields", "label": "_empty_pair_side_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L229"}, {"id": "services_pl_plan_archive_export_empty_product_identity_fields", "label": "_empty_product_identity_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L245"}, {"id": "services_pl_plan_archive_export_format_export_brand_name", "label": "_format_export_brand_name()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L256"}, {"id": "services_pl_plan_archive_export_resolve_export_product_display", "label": "_resolve_export_product_display()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L265"}, {"id": "services_pl_plan_archive_export_lookup_plan_product", "label": "_lookup_plan_product()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L290"}, {"id": "services_pl_plan_archive_export_product_identity_from_stop", "label": "_product_identity_from_stop()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L304"}, {"id": "services_pl_plan_archive_export_segment_slot_customer", "label": "_segment_slot_customer()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L327"}, {"id": "services_pl_plan_archive_export_build_archive_segment_row", "label": "_build_archive_segment_row()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L339"}, {"id": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "label": "_append_legacy_plan_product_rows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L409"}, {"id": "services_pl_plan_archive_export_build_plan_archive_export_rows", "label": "build_plan_archive_export_rows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L494"}, {"id": "services_pl_plan_archive_export_iter_equal_spans", "label": "_iter_equal_spans()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L639"}, {"id": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "label": "prepare_archive_list_display_rows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L655"}, {"id": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "label": "append_archive_list_merge_sheet()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L711"}, {"id": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "label": "export_plan_archive_xlsx_response()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L760"}, {"id": "services_pl_plan_archive_export_rationale_1", "label": "\u8fd0\u8f93\u8ba1\u5212\u5f52\u6863\u5bfc\u51fa\uff1a\u6309\u6bb5\u6b21\u00d7\u4ea7\u54c1\u5c55\u5f00\uff08\u88c5\u8d27\u884c\u4e0e\u5404\u9001\u8d27\u6bb5\u5404\u4e00\u884c\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L1"}, {"id": "services_pl_plan_archive_export_rationale_64", "label": "\u4e0e\u524d\u7aef\u5217\u8868\u4e00\u81f4\uff1a\u6709\u7f16\u53f7\u663e\u793a\u7f16\u53f7\uff1b\u5c71\u5ce1/\u4e91\u680b\u7f3a\u5408\u540c \u2192 \u88c5\u8d27\u51fa\u5e93 / \u9001\u8d27\u5165\u5e93\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L64"}, {"id": "services_pl_plan_archive_export_rationale_129", "label": "\u88c5\u8d27/\u9001\u8d27\u6bb5\u5165\u5e93\u51fa\u5e93\u5217\u65b9\u5411\uff08\u4e0e\u524d\u7aef resolveArchiveListIoColumn \u4e00\u81f4\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L129"}, {"id": "services_pl_plan_archive_export_rationale_230", "label": "side: load | delivery", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L230"}, {"id": "services_pl_plan_archive_export_rationale_257", "label": "\u4e0e\u8868\u5355\u300c\u54c1\u724c\u300d\u5217\u4e00\u81f4\uff1a\u4ec5\u6307\u5b9a\u54c1\u724c\u65f6\u5bfc\u51fa\u54c1\u724c\u540d\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L257"}, {"id": "services_pl_plan_archive_export_rationale_353", "label": "\u4e00\u6bb5\u6b21\u00d7\u4e00\u4e2a\u4ea7\u54c1\u4e00\u884c\uff1a\u53ea\u586b\u672c\u4fa7\u5ba2\u6237/\u5730\u5740/\u65f6\u95f4/\u5408\u540c\u4e0e\u672c\u4fa7\u91cf\u4ef7\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L353"}, {"id": "services_pl_plan_archive_export_rationale_419", "label": "\u65e0\u6bb5\u8868\u6570\u636e\u65f6\u56de\u9000\u8ba1\u5212\u4ea7\u54c1\u7ea7\u5bfc\u51fa\uff08\u517c\u5bb9\u65e7\u6570\u636e\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L419"}, {"id": "services_pl_plan_archive_export_rationale_503", "label": "\u6784\u5efa\u5f52\u6863\u5bfc\u51fa\u6570\u636e\u884c\u3002 \u9ed8\u8ba4\u6309\u6bb5\u6b21\u00d7\u4ea7\u54c1\u5c55\u5f00\uff1a\u5148\u88c5\u8d27\u4ea7\u54c1\u884c\uff0c\u518d\u5404\u9001\u8d27\u6bb5\u4ea7\u54c1\u884c\u3002 stop_kind \u4e3a load / delivery \u65f6\u53ea\u4fdd\u7559", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L503"}, {"id": "services_pl_plan_archive_export_rationale_640", "label": "\u8fd4\u56de\u9700\u8981\u5408\u5e76\u7684\u95ed\u533a\u95f4\uff08\u6570\u636e\u884c\u4e0b\u6807\uff0c\u4e0d\u542b\u8868\u5934\uff09\u3002\u5355\u884c\u4e0d\u5408\u5e76\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L640"}, {"id": "services_pl_plan_archive_export_rationale_656", "label": "\u6309\u5217\u8868\u5408\u5e76\u89c4\u5219\u6574\u7406\u5355\u5143\u683c\u53d6\u503c\u3002 \u5e8f\u53f7\u6309\u8ba1\u5212\u8ba1\uff0c\u4e00\u5f20\u8ba1\u5212\u4e00\u4e2a\u53f7\u3002 \u53ea\u6709\u4e00\u4e2a\u9001\u8d27\u6bb5\u65f6\uff0c\u9001\u8d27\u5ba2\u6237/\u5730\u5740/\u65f6\u95f4\u5199\u5230\u8be5\u8ba1\u5212\u9996\u884c\uff0c\u4ee5\u4fbf\u548c\u88c5\u8d27\u884c\u5408\u5e76\u540e\u4ecd\u80fd\u770b", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L656"}, {"id": "services_pl_plan_archive_export_rationale_712", "label": "\u5728\u5de5\u4f5c\u7c3f\u4e2d\u8ffd\u52a0\u300c\u8ba1\u5212\u5f52\u6863\uff08\u5408\u5e76\uff09\u300d\u9875\uff0c\u5408\u5e76\u65b9\u5f0f\u5bf9\u9f50\u8fd0\u8f93\u5f52\u6863\u5217\u8868\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L712"}, {"id": "services_pl_plan_archive_export_rationale_768", "label": "\u5f52\u6863 Excel\uff1a\u7b2c\u4e00\u9875\u4e3a\u6bb5\u6b21\u660e\u7ec6\uff0c\u7b2c\u4e8c\u9875\u4e3a\u5217\u8868\u5408\u5e76\u6837\u5f0f\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L768"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "decimal", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L6", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "sqlalchemy_orm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L8", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_models_pl_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L10", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_schemas_pl_plan", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L11", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_services_pl_plan_list_export_segments", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L12", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_services_pl_plan_list_filters", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L16", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_services_pl_internal_customer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L17", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_services_pl_plan_stop_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L18", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_services_pl_product_display", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L19", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_unique_contract_nos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L24", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_contract_nos_from_stop_links", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L35", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_format_stop_contract_export_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L59", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_load_contract_nos_by_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L73", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_resolve_archive_list_io_column", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L128", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_format_date_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_format_plate_display", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_get_stop_archive_actual_qty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L152", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_get_stop_archive_unit_price", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L156", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_get_stop_archive_amount", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L160", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_stop_time", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L171", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_load_legacy_products_by_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L177", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_plan_common_export_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L198", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_empty_pair_side_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L229", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_empty_product_identity_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L245", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_format_export_brand_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L256", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_resolve_export_product_display", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L265", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_lookup_plan_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L290", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_product_identity_from_stop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L304", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_segment_slot_customer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L327", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_build_archive_segment_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L339", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L409", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_build_plan_archive_export_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L494", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_iter_equal_spans", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L639", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L655", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L711", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L760", "weight": 1.0}, {"source": "services_pl_plan_archive_export_format_stop_contract_export_label", "target": "services_pl_plan_archive_export_contract_nos_from_stop_links", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L65", "weight": 1.0}, {"source": "services_pl_plan_archive_export_get_stop_archive_amount", "target": "services_pl_plan_archive_export_get_stop_archive_actual_qty", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L164", "weight": 1.0}, {"source": "services_pl_plan_archive_export_get_stop_archive_amount", "target": "services_pl_plan_archive_export_get_stop_archive_unit_price", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L165", "weight": 1.0}, {"source": "services_pl_plan_archive_export_stop_time", "target": "services_pl_plan_archive_export_format_date_value", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L173", "weight": 1.0}, {"source": "services_pl_plan_archive_export_plan_common_export_fields", "target": "services_pl_plan_archive_export_format_date_value", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L210", "weight": 1.0}, {"source": "services_pl_plan_archive_export_plan_common_export_fields", "target": "services_pl_plan_archive_export_unique_contract_nos", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L215", "weight": 1.0}, {"source": "services_pl_plan_archive_export_plan_common_export_fields", "target": "services_pl_plan_archive_export_format_plate_display", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L220", "weight": 1.0}, {"source": "services_pl_plan_archive_export_product_identity_from_stop", "target": "services_pl_plan_archive_export_resolve_export_product_display", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L311", "weight": 1.0}, {"source": "services_pl_plan_archive_export_product_identity_from_stop", "target": "services_pl_plan_archive_export_format_export_brand_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L319", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_empty_product_identity_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L368", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_stop_time", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L378", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_format_stop_contract_export_label", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L379", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_lookup_plan_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L391", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_product_identity_from_stop", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L395", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_get_stop_archive_actual_qty", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L403", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_get_stop_archive_unit_price", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L404", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_get_stop_archive_amount", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L405", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_unique_contract_nos", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L425", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_format_stop_contract_export_label", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L426", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_empty_pair_side_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L440", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_empty_product_identity_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L442", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_format_date_value", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L447", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_resolve_export_product_display", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L462", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_format_export_brand_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L471", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_load_legacy_products_by_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L524", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_load_contract_nos_by_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L525", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_plan_common_export_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L546", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L567", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_segment_slot_customer", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L585", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_build_archive_segment_row", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L589", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "target": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L715", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "target": "services_pl_plan_archive_export_iter_equal_spans", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L739", "weight": 1.0}, {"source": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "target": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L787", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_1", "target": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L1", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_64", "target": "services_pl_plan_archive_export_format_stop_contract_export_label", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L64", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_129", "target": "services_pl_plan_archive_export_resolve_archive_list_io_column", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L129", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_230", "target": "services_pl_plan_archive_export_empty_pair_side_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L230", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_257", "target": "services_pl_plan_archive_export_format_export_brand_name", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L257", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_353", "target": "services_pl_plan_archive_export_build_archive_segment_row", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L353", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_419", "target": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L419", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_503", "target": "services_pl_plan_archive_export_build_plan_archive_export_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L503", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_640", "target": "services_pl_plan_archive_export_iter_equal_spans", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L640", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_656", "target": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L656", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_712", "target": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L712", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_768", "target": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L768", "weight": 1.0}], "raw_calls": [{"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L28"}, {"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L28"}, {"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L28"}, {"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L29"}, {"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L31"}, {"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L32"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L40"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L41"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L41"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L42"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L45"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L45"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L48"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L49"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L49"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L50"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L53"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L53"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L55"}, {"caller_nid": "services_pl_plan_archive_export_format_stop_contract_export_label", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L67"}, {"caller_nid": "services_pl_plan_archive_export_format_stop_contract_export_label", "callee": "is_internal_customer_name", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L68"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L79"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L79"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L79"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L79"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L83"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L85"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L85"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L90"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L93"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L95"}, {"caller_nid": "services_pl_plan_archive_export_resolve_archive_list_io_column", "callee": "is_internal_customer_name", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L130"}, {"caller_nid": "services_pl_plan_archive_export_format_date_value", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L139"}, {"caller_nid": "services_pl_plan_archive_export_format_plate_display", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L143"}, {"caller_nid": "services_pl_plan_archive_export_format_plate_display", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L144"}, {"caller_nid": "services_pl_plan_archive_export_stop_time", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L173"}, {"caller_nid": "services_pl_plan_archive_export_stop_time", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L174"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L183"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L183"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L183"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L183"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L187"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L194"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L194"}, {"caller_nid": "services_pl_plan_archive_export_plan_common_export_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L205"}, {"caller_nid": "services_pl_plan_archive_export_plan_common_export_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L217"}, {"caller_nid": "services_pl_plan_archive_export_plan_common_export_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L218"}, {"caller_nid": "services_pl_plan_archive_export_plan_common_export_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L219"}, {"caller_nid": "services_pl_plan_archive_export_plan_common_export_fields", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L221"}, {"caller_nid": "services_pl_plan_archive_export_format_export_brand_name", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L260"}, {"caller_nid": "services_pl_plan_archive_export_format_export_brand_name", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L262"}, {"caller_nid": "services_pl_plan_archive_export_resolve_export_product_display", "callee": "resolve_product_display_names", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L281"}, {"caller_nid": "services_pl_plan_archive_export_resolve_export_product_display", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L287"}, {"caller_nid": "services_pl_plan_archive_export_resolve_export_product_display", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L287"}, {"caller_nid": "services_pl_plan_archive_export_lookup_plan_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L295"}, {"caller_nid": "services_pl_plan_archive_export_lookup_plan_product", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L295"}, {"caller_nid": "services_pl_plan_archive_export_lookup_plan_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L295"}, {"caller_nid": "services_pl_plan_archive_export_lookup_plan_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L298"}, {"caller_nid": "services_pl_plan_archive_export_lookup_plan_product", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L298"}, {"caller_nid": "services_pl_plan_archive_export_build_archive_segment_row", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L354"}, {"caller_nid": "services_pl_plan_archive_export_build_archive_segment_row", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L354"}, {"caller_nid": "services_pl_plan_archive_export_build_archive_segment_row", "callee": "format_stop_segment_label", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L360"}, {"caller_nid": "services_pl_plan_archive_export_build_archive_segment_row", "callee": "update", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L394"}, {"caller_nid": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L421"}, {"caller_nid": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L421"}, {"caller_nid": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "callee": "update", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L468"}, {"caller_nid": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L490"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L515"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L515"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L515"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L515"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L523"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "values", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L527"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L530"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "values", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L531"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "list", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L532"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L535"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "load_crm_product_alias_maps", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L536"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L545"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L549"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L551"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L552"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L553"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L556"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L556"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "bool", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L560"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "_keep_customer", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L565"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "iter_segment_product_slots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L578"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "_keep_customer", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L585"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L588"}, {"caller_nid": "services_pl_plan_archive_export_iter_equal_spans", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L643"}, {"caller_nid": "services_pl_plan_archive_export_iter_equal_spans", "callee": "key_fn", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L645"}, {"caller_nid": "services_pl_plan_archive_export_iter_equal_spans", "callee": "key_fn", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L647"}, {"caller_nid": "services_pl_plan_archive_export_iter_equal_spans", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L650"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L665"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L666"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L668"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L668"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L670"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L674"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L674"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L675"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L677"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L678"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L680"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L684"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L684"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L688"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "next", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L691"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L691"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L694"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L697"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L699"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "next", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L701"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L701"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L704"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L705"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "extend", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L706"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "list", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L715"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "create_sheet", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L716"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L717"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L719"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "row_to_cells", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L719"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L721"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "Alignment", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L722"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L738"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "set", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L740"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "update", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L741"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "startswith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L741"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L741"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "merge_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L742"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "merge_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L743"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L747"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L747"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "merge_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L751"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L755"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L755"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "assert_export_row_count", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L777"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L777"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L779"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "DictLabelResolver", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L780"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "Workbook", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L781"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L784"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L786"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "row_to_cells", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L786"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "workbook_to_streaming_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L788"}]} \ No newline at end of file diff --git a/backend/graphify-out/cache/ast/66c5949c7a6eb892a8840369b60de02668dad7f34becb9fe0bbd3c2e408c38b8.json b/backend/graphify-out/cache/ast/66c5949c7a6eb892a8840369b60de02668dad7f34becb9fe0bbd3c2e408c38b8.json new file mode 100644 index 000000000..a452d686a --- /dev/null +++ b/backend/graphify-out/cache/ast/66c5949c7a6eb892a8840369b60de02668dad7f34becb9fe0bbd3c2e408c38b8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "label": "test_pl_plan_archive_export.py", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L1"}, {"id": "tests_test_pl_plan_archive_export_stop_product", "label": "_stop_product()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L17"}, {"id": "tests_test_pl_plan_archive_export_test_resolve_archive_list_io_column", "label": "test_resolve_archive_list_io_column()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L36"}, {"id": "tests_test_pl_plan_archive_export_bare_plan", "label": "_bare_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L49"}, {"id": "tests_test_pl_plan_archive_export_archive_rows", "label": "_archive_rows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L73"}, {"id": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "label": "test_build_plan_archive_export_rows_segment_rows_and_single_side()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L104"}, {"id": "tests_test_pl_plan_archive_export_fakeplan", "label": "_FakePlan", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L200"}, {"id": "tests_test_pl_plan_archive_export_test_plan_common_export_fields", "label": "test_plan_common_export_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L215"}, {"id": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_includes_brand_and_alias", "label": "test_build_plan_archive_export_rows_includes_brand_and_alias()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L227"}, {"id": "tests_test_pl_plan_archive_export_test_plan_common_export_fields_merges_link_contract_nos", "label": "test_plan_common_export_fields_merges_link_contract_nos()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L281"}, {"id": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "label": "test_build_plan_archive_export_rows_internal_customer_contract_per_segment()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L290"}, {"id": "tests_test_pl_plan_archive_export_cellresolver", "label": "_CellResolver", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L327"}, {"id": "tests_test_pl_plan_archive_export_cellresolver_row_to_cells", "label": ".row_to_cells()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L328"}, {"id": "tests_test_pl_plan_archive_export_merged_ranges", "label": "_merged_ranges()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L343"}, {"id": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "label": "test_prepare_single_delivery_puts_delivery_customer_on_first_row()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L347"}, {"id": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "label": "test_merge_sheet_matches_list_rowspan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L389"}, {"id": "tests_test_pl_plan_archive_export_rationale_105", "label": "\u9ed8\u8ba4\u6309\u6bb5\u6b21\u00d7\u4ea7\u54c1\u5c55\u5f00\uff1a1 \u4e2a\u88c5\u8d27\u4ea7\u54c1 + 1 \u4e2a\u9001\u8d27\u4ea7\u54c1 = 2 \u884c\uff1b\u5355\u4fa7\u7b5b\u9009\u53ea\u7559\u5bf9\u5e94\u6bb5\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L105"}, {"id": "tests_test_pl_plan_archive_export_rationale_291", "label": "\u5185\u90e8\u5ba2\u6237\u7f3a\u5408\u540c\uff1a\u88c5\u8d27\u884c\u5408\u540c\u4e3a\u51fa\u5e93\uff0c\u9001\u8d27\u884c\u4e3a\u5165\u5e93\uff0c\u4e0d\u518d\u62fc\u5728\u540c\u4e00\u884c\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L291"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "decimal", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "app_schemas_pl_plan", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "app_services_pl_internal_customer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "app_services_pl_plan_archive_export", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L6", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "app_utils_excel_export", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L14", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_stop_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L17", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_test_resolve_archive_list_io_column", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L36", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_bare_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L49", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_archive_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L73", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L104", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_fakeplan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L200", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_test_plan_common_export_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L215", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_includes_brand_and_alias", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L227", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_test_plan_common_export_fields_merges_link_contract_nos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L281", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L290", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_cellresolver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L327", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_cellresolver", "target": "tests_test_pl_plan_archive_export_cellresolver_row_to_cells", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L328", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_merged_ranges", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L343", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L347", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_tests_test_pl_plan_archive_export_py", "target": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L389", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "target": "tests_test_pl_plan_archive_export_stop_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L107", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "target": "tests_test_pl_plan_archive_export_bare_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L142", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "target": "tests_test_pl_plan_archive_export_archive_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L144", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_plan_common_export_fields", "target": "tests_test_pl_plan_archive_export_fakeplan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L216", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_includes_brand_and_alias", "target": "tests_test_pl_plan_archive_export_stop_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L235", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_includes_brand_and_alias", "target": "tests_test_pl_plan_archive_export_archive_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L262", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_includes_brand_and_alias", "target": "tests_test_pl_plan_archive_export_bare_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L263", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_plan_common_export_fields_merges_link_contract_nos", "target": "tests_test_pl_plan_archive_export_fakeplan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L283", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "target": "tests_test_pl_plan_archive_export_stop_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L293", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "target": "tests_test_pl_plan_archive_export_archive_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L316", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "target": "tests_test_pl_plan_archive_export_bare_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L316", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "target": "tests_test_pl_plan_archive_export_stop_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L357", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "target": "tests_test_pl_plan_archive_export_archive_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L380", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "target": "tests_test_pl_plan_archive_export_bare_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L380", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "target": "tests_test_pl_plan_archive_export_stop_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L399", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "target": "tests_test_pl_plan_archive_export_archive_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L430", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "target": "tests_test_pl_plan_archive_export_bare_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L430", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "target": "tests_test_pl_plan_archive_export_cellresolver", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L433", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "target": "tests_test_pl_plan_archive_export_merged_ranges", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L438", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_rationale_105", "target": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L105", "weight": 1.0}, {"source": "tests_test_pl_plan_archive_export_rationale_291", "target": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L291", "weight": 1.0}], "raw_calls": [{"caller_nid": "tests_test_pl_plan_archive_export_stop_product", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L28"}, {"caller_nid": "tests_test_pl_plan_archive_export_stop_product", "callee": "update", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L32"}, {"caller_nid": "tests_test_pl_plan_archive_export_stop_product", "callee": "PlanStopProductRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L33"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_resolve_archive_list_io_column", "callee": "next", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L37"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_resolve_archive_list_io_column", "callee": "iter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L37"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_resolve_archive_list_io_column", "callee": "resolve_archive_list_io_column", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L38"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_resolve_archive_list_io_column", "callee": "resolve_archive_list_io_column", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L39"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_resolve_archive_list_io_column", "callee": "resolve_archive_list_io_column", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L40"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_resolve_archive_list_io_column", "callee": "resolve_archive_list_io_column", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L41"}, {"caller_nid": "tests_test_pl_plan_archive_export_bare_plan", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L50"}, {"caller_nid": "tests_test_pl_plan_archive_export_bare_plan", "callee": "items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L68"}, {"caller_nid": "tests_test_pl_plan_archive_export_bare_plan", "callee": "setattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L69"}, {"caller_nid": "tests_test_pl_plan_archive_export_archive_rows", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L86"}, {"caller_nid": "tests_test_pl_plan_archive_export_archive_rows", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L89"}, {"caller_nid": "tests_test_pl_plan_archive_export_archive_rows", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L92"}, {"caller_nid": "tests_test_pl_plan_archive_export_archive_rows", "callee": "patch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L95"}, {"caller_nid": "tests_test_pl_plan_archive_export_archive_rows", "callee": "build_plan_archive_export_rows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L99"}, {"caller_nid": "tests_test_pl_plan_archive_export_archive_rows", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L100"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "next", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L106"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "iter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L106"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L108"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L109"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L110"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L114"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L115"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L116"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L117"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "PlanLoadRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L119"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "PlanDeliveryRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L130"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L148"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L158"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L159"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L160"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L161"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L168"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L169"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L170"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L171"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L172"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L173"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L174"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L175"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L176"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L177"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L179"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L183"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L184"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L185"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L186"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L187"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L189"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L193"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L194"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L195"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L196"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_segment_rows_and_single_side", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L197"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_plan_common_export_fields", "callee": "_plan_common_export_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L216"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_includes_brand_and_alias", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L228"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_includes_brand_and_alias", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L240"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_includes_brand_and_alias", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L241"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_includes_brand_and_alias", "callee": "PlanLoadRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L243"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_includes_brand_and_alias", "callee": "PlanDeliveryRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L252"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_includes_brand_and_alias", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L269"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_plan_common_export_fields_merges_link_contract_nos", "callee": "_plan_common_export_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L282"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "callee": "next", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L292"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "callee": "iter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L292"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L293"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L294"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "callee": "PlanLoadRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L295"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "callee": "PlanDeliveryRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L305"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_build_plan_archive_export_rows_internal_customer_contract_per_segment", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L317"}, {"caller_nid": "tests_test_pl_plan_archive_export_cellresolver_row_to_cells", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L329"}, {"caller_nid": "tests_test_pl_plan_archive_export_cellresolver_row_to_cells", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L329"}, {"caller_nid": "tests_test_pl_plan_archive_export_merged_ranges", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L344"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "callee": "next", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L348"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "callee": "iter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L348"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "callee": "PlanLoadRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L349"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L357"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L358"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "callee": "PlanDeliveryRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L364"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L373"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L374"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_prepare_single_delivery_puts_delivery_customer_on_first_row", "callee": "prepare_archive_list_display_rows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L381"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "callee": "next", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L392"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "callee": "iter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L392"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "callee": "PlanLoadRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L393"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L399"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L400"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "callee": "PlanDeliveryRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L406"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L413"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "callee": "PlanDeliveryRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L418"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "callee": "Decimal", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L425"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "callee": "Workbook", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L431"}, {"caller_nid": "tests_test_pl_plan_archive_export_test_merge_sheet_matches_list_rowspan", "callee": "append_archive_list_merge_sheet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_plan_archive_export.py", "source_location": "L433"}]} \ No newline at end of file diff --git a/backend/graphify-out/cache/ast/9786c00a9a417b0bfe8235279c059678828eb6c3dbe4bec32b4e84aaa2fb58e7.json b/backend/graphify-out/cache/ast/9786c00a9a417b0bfe8235279c059678828eb6c3dbe4bec32b4e84aaa2fb58e7.json new file mode 100644 index 000000000..cbbf7d227 --- /dev/null +++ b/backend/graphify-out/cache/ast/9786c00a9a417b0bfe8235279c059678828eb6c3dbe4bec32b4e84aaa2fb58e7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "label": "export_attachment_zip.py", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L1"}, {"id": "services_export_attachment_zip_sanitize_zip_segment", "label": "sanitize_zip_segment()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L28"}, {"id": "services_export_attachment_zip_short_hash", "label": "short_hash()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L34"}, {"id": "services_export_attachment_zip_guess_ext_from_url", "label": "guess_ext_from_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L38"}, {"id": "services_export_attachment_zip_build_attachment_filename", "label": "build_attachment_filename()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L49"}, {"id": "services_export_attachment_zip_first_row_no_by_entity_id", "label": "first_row_no_by_entity_id()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L56"}, {"id": "services_export_attachment_zip_build_hyperlink_formula", "label": "build_hyperlink_formula()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L71"}, {"id": "services_export_attachment_zip_parse_url_list", "label": "parse_url_list()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L77"}, {"id": "services_export_attachment_zip_urls_to_attachment_items", "label": "urls_to_attachment_items()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L92"}, {"id": "services_export_attachment_zip_default_download", "label": "_default_download()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L102"}, {"id": "services_export_attachment_zip_attach_field", "label": "_attach_field()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L108"}, {"id": "services_export_attachment_zip_plan_attachment_jobs", "label": "_plan_attachment_jobs()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L112"}, {"id": "services_export_attachment_zip_build_xlsx_bytes", "label": "_build_xlsx_bytes()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L155"}, {"id": "services_export_attachment_zip_build_attachment_zip_bytes", "label": "build_attachment_zip_bytes()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L215"}, {"id": "services_export_attachment_zip_iter_attachment_zip_chunks", "label": "iter_attachment_zip_chunks()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L250"}, {"id": "services_export_attachment_zip_build_attachment_zip_streaming_response", "label": "build_attachment_zip_streaming_response()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L345"}, {"id": "services_export_attachment_zip_rationale_1", "label": "\u5217\u8868\u5bfc\u51fa\uff1aExcel \u603b\u8868 + \u9644\u4ef6\u76ee\u5f55 ZIP\uff08\u8ba1\u5212\u5f52\u6863 / \u5145\u503c\u7533\u8bf7\u7b49\u5171\u7528\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L1"}, {"id": "services_export_attachment_zip_rationale_95", "label": "\u5c06\u9017\u53f7/JSON URL \u5217\u8868\u8f6c\u4e3a {url, label} \u5217\u8868\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L95"}, {"id": "services_export_attachment_zip_rationale_119", "label": "\u9884\u5148\u786e\u5b9a\u9644\u4ef6 zip \u8def\u5f84\u4e0e\u8d85\u94fe\u63a5\uff08\u5c1a\u672a\u4e0b\u8f7d\uff09\u3002 \u8fd4\u56de: entity_file_meta: entity_id -> [(zip_pat", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L119"}, {"id": "services_export_attachment_zip_rationale_229", "label": "\u6253\u5305 ZIP\uff1axlsx + \u9644\u4ef6/\uff1b\u8fd4\u56de (zip_bytes, failure_messages)\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L229"}, {"id": "services_export_attachment_zip_rationale_265", "label": "\u8fb9\u4e0b\u8f7d\u8fb9\u4ea7\u51fa ZIP \u5b57\u8282\uff0c\u4fbf\u4e8e\u4ee3\u7406\u5c42\u5728\u957f\u65f6\u95f4\u6253\u5305\u65f6\u4fdd\u6301\u8fde\u63a5\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L265"}, {"id": "services_export_attachment_zip_rationale_359", "label": "\u7acb\u5373\u8fd4\u56de StreamingResponse\uff1a\u5148\u53d1\u54cd\u5e94\u5934\uff0c\u518d\u8fb9\u4e0b\u9644\u4ef6\u8fb9\u63a8\u9001 ZIP \u5b57\u8282\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L359"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "hashlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "io", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L6", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L7", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L8", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "zipfile", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L9", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L10", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "urllib_parse", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L11", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "fastapi_responses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L13", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "sqlalchemy_orm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L14", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "app_utils_excel_export", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L16", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_sanitize_zip_segment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L28", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_short_hash", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L34", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_guess_ext_from_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L38", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_build_attachment_filename", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L49", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_first_row_no_by_entity_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L56", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_build_hyperlink_formula", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L71", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_parse_url_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L77", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_urls_to_attachment_items", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L92", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_default_download", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L102", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_attach_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L108", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_plan_attachment_jobs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L112", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_build_xlsx_bytes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L155", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_build_attachment_zip_bytes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L215", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_iter_attachment_zip_chunks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "target": "services_export_attachment_zip_build_attachment_zip_streaming_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L345", "weight": 1.0}, {"source": "services_export_attachment_zip_build_attachment_filename", "target": "services_export_attachment_zip_sanitize_zip_segment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L51", "weight": 1.0}, {"source": "services_export_attachment_zip_build_attachment_filename", "target": "services_export_attachment_zip_short_hash", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L52", "weight": 1.0}, {"source": "services_export_attachment_zip_build_attachment_filename", "target": "services_export_attachment_zip_guess_ext_from_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L52", "weight": 1.0}, {"source": "services_export_attachment_zip_build_hyperlink_formula", "target": "services_export_attachment_zip_sanitize_zip_segment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L73", "weight": 1.0}, {"source": "services_export_attachment_zip_urls_to_attachment_items", "target": "services_export_attachment_zip_parse_url_list", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L97", "weight": 1.0}, {"source": "services_export_attachment_zip_plan_attachment_jobs", "target": "services_export_attachment_zip_first_row_no_by_entity_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L125", "weight": 1.0}, {"source": "services_export_attachment_zip_plan_attachment_jobs", "target": "services_export_attachment_zip_build_attachment_filename", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L145", "weight": 1.0}, {"source": "services_export_attachment_zip_build_xlsx_bytes", "target": "services_export_attachment_zip_attach_field", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L171", "weight": 1.0}, {"source": "services_export_attachment_zip_build_xlsx_bytes", "target": "services_export_attachment_zip_build_hyperlink_formula", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L186", "weight": 1.0}, {"source": "services_export_attachment_zip_build_attachment_zip_bytes", "target": "services_export_attachment_zip_iter_attachment_zip_chunks", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L232", "weight": 1.0}, {"source": "services_export_attachment_zip_iter_attachment_zip_chunks", "target": "services_export_attachment_zip_sanitize_zip_segment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L267", "weight": 1.0}, {"source": "services_export_attachment_zip_iter_attachment_zip_chunks", "target": "services_export_attachment_zip_plan_attachment_jobs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L273", "weight": 1.0}, {"source": "services_export_attachment_zip_iter_attachment_zip_chunks", "target": "services_export_attachment_zip_build_xlsx_bytes", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L279", "weight": 1.0}, {"source": "services_export_attachment_zip_build_attachment_zip_streaming_response", "target": "services_export_attachment_zip_sanitize_zip_segment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L360", "weight": 1.0}, {"source": "services_export_attachment_zip_rationale_1", "target": "users_zlwu_work_00code_shanxia2_0_backend_app_services_export_attachment_zip_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L1", "weight": 1.0}, {"source": "services_export_attachment_zip_rationale_95", "target": "services_export_attachment_zip_urls_to_attachment_items", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L95", "weight": 1.0}, {"source": "services_export_attachment_zip_rationale_119", "target": "services_export_attachment_zip_plan_attachment_jobs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L119", "weight": 1.0}, {"source": "services_export_attachment_zip_rationale_229", "target": "services_export_attachment_zip_build_attachment_zip_bytes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L229", "weight": 1.0}, {"source": "services_export_attachment_zip_rationale_265", "target": "services_export_attachment_zip_iter_attachment_zip_chunks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L265", "weight": 1.0}, {"source": "services_export_attachment_zip_rationale_359", "target": "services_export_attachment_zip_build_attachment_zip_streaming_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L359", "weight": 1.0}], "raw_calls": [{"caller_nid": "services_export_attachment_zip_sanitize_zip_segment", "callee": "sub", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L29"}, {"caller_nid": "services_export_attachment_zip_sanitize_zip_segment", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L29"}, {"caller_nid": "services_export_attachment_zip_sanitize_zip_segment", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L29"}, {"caller_nid": "services_export_attachment_zip_sanitize_zip_segment", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L30"}, {"caller_nid": "services_export_attachment_zip_sanitize_zip_segment", "callee": "sub", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L30"}, {"caller_nid": "services_export_attachment_zip_short_hash", "callee": "hexdigest", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L35"}, {"caller_nid": "services_export_attachment_zip_short_hash", "callee": "sha1", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L35"}, {"caller_nid": "services_export_attachment_zip_short_hash", "callee": "encode", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L35"}, {"caller_nid": "services_export_attachment_zip_short_hash", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L35"}, {"caller_nid": "services_export_attachment_zip_guess_ext_from_url", "callee": "unquote", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L39"}, {"caller_nid": "services_export_attachment_zip_guess_ext_from_url", "callee": "urlparse", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L39"}, {"caller_nid": "services_export_attachment_zip_guess_ext_from_url", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L39"}, {"caller_nid": "services_export_attachment_zip_guess_ext_from_url", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L39"}, {"caller_nid": "services_export_attachment_zip_guess_ext_from_url", "callee": "rsplit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L40"}, {"caller_nid": "services_export_attachment_zip_guess_ext_from_url", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L43"}, {"caller_nid": "services_export_attachment_zip_guess_ext_from_url", "callee": "rsplit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L43"}, {"caller_nid": "services_export_attachment_zip_guess_ext_from_url", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L44"}, {"caller_nid": "services_export_attachment_zip_build_attachment_filename", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L51"}, {"caller_nid": "services_export_attachment_zip_first_row_no_by_entity_id", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L61"}, {"caller_nid": "services_export_attachment_zip_first_row_no_by_entity_id", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L61"}, {"caller_nid": "services_export_attachment_zip_first_row_no_by_entity_id", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L61"}, {"caller_nid": "services_export_attachment_zip_first_row_no_by_entity_id", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L65"}, {"caller_nid": "services_export_attachment_zip_first_row_no_by_entity_id", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L65"}, {"caller_nid": "services_export_attachment_zip_build_hyperlink_formula", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L72"}, {"caller_nid": "services_export_attachment_zip_build_hyperlink_formula", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L72"}, {"caller_nid": "services_export_attachment_zip_build_hyperlink_formula", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L73"}, {"caller_nid": "services_export_attachment_zip_parse_url_list", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L80"}, {"caller_nid": "services_export_attachment_zip_parse_url_list", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L80"}, {"caller_nid": "services_export_attachment_zip_parse_url_list", "callee": "loads", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L84"}, {"caller_nid": "services_export_attachment_zip_parse_url_list", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L85"}, {"caller_nid": "services_export_attachment_zip_parse_url_list", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L86"}, {"caller_nid": "services_export_attachment_zip_parse_url_list", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L86"}, {"caller_nid": "services_export_attachment_zip_parse_url_list", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L86"}, {"caller_nid": "services_export_attachment_zip_parse_url_list", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L86"}, {"caller_nid": "services_export_attachment_zip_parse_url_list", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L89"}, {"caller_nid": "services_export_attachment_zip_parse_url_list", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L89"}, {"caller_nid": "services_export_attachment_zip_parse_url_list", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L89"}, {"caller_nid": "services_export_attachment_zip_urls_to_attachment_items", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L97"}, {"caller_nid": "services_export_attachment_zip_urls_to_attachment_items", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L98"}, {"caller_nid": "services_export_attachment_zip_default_download", "callee": "download_file_bytes", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L105"}, {"caller_nid": "services_export_attachment_zip_plan_attachment_jobs", "callee": "items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L130"}, {"caller_nid": "services_export_attachment_zip_plan_attachment_jobs", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L131"}, {"caller_nid": "services_export_attachment_zip_plan_attachment_jobs", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L136"}, {"caller_nid": "services_export_attachment_zip_plan_attachment_jobs", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L136"}, {"caller_nid": "services_export_attachment_zip_plan_attachment_jobs", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L136"}, {"caller_nid": "services_export_attachment_zip_plan_attachment_jobs", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L141"}, {"caller_nid": "services_export_attachment_zip_plan_attachment_jobs", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L144"}, {"caller_nid": "services_export_attachment_zip_plan_attachment_jobs", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L144"}, {"caller_nid": "services_export_attachment_zip_plan_attachment_jobs", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L148"}, {"caller_nid": "services_export_attachment_zip_plan_attachment_jobs", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L149"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "values", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L166"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "max", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L167"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L167"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "min", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L168"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "ExportColumn", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L171"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "range", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L171"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "list", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L173"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "set", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L176"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L178"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L179"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L179"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L179"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "range", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L180"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L183"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "list", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L184"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L184"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L185"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L187"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L190"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L192"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "DictLabelResolver", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L194"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "Workbook", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L197"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L200"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "row_to_cells", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L202"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L203"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "append_archive_list_merge_sheet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L208"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "BytesIO", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L210"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "save", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L211"}, {"caller_nid": "services_export_attachment_zip_build_xlsx_bytes", "callee": "getvalue", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L212"}, {"caller_nid": "services_export_attachment_zip_build_attachment_zip_bytes", "callee": "list", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L231"}, {"caller_nid": "services_export_attachment_zip_build_attachment_zip_bytes", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L247"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "BytesIO", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L292"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "ZipFile", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L304"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "writestr", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L305"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "flush", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L306"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "download", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L312"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L314"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L317"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L319"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L323"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "writestr", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L324"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "flush", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L325"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L330"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "writestr", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L331"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "encode", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L331"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "flush", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L332"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "flush", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L337"}, {"caller_nid": "services_export_attachment_zip_iter_attachment_zip_chunks", "callee": "extend", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L342"}, {"caller_nid": "services_export_attachment_zip_build_attachment_zip_streaming_response", "callee": "quote", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L362"}, {"caller_nid": "services_export_attachment_zip_build_attachment_zip_streaming_response", "callee": "StreamingResponse", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L380"}, {"caller_nid": "services_export_attachment_zip_build_attachment_zip_streaming_response", "callee": "generate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/export_attachment_zip.py", "source_location": "L381"}]} \ No newline at end of file diff --git a/backend/graphify-out/cache/ast/d3930e539498d317b98e88c17f6fd9a23dfa51fa899acc1901d9e0ed2f7edf85.json b/backend/graphify-out/cache/ast/d3930e539498d317b98e88c17f6fd9a23dfa51fa899acc1901d9e0ed2f7edf85.json new file mode 100644 index 000000000..db1284330 --- /dev/null +++ b/backend/graphify-out/cache/ast/d3930e539498d317b98e88c17f6fd9a23dfa51fa899acc1901d9e0ed2f7edf85.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "label": "pl_plan_archive_export.py", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L1"}, {"id": "services_pl_plan_archive_export_unique_contract_nos", "label": "_unique_contract_nos()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L24"}, {"id": "services_pl_plan_archive_export_contract_nos_from_stop_links", "label": "_contract_nos_from_stop_links()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L35"}, {"id": "services_pl_plan_archive_export_format_stop_contract_export_label", "label": "format_stop_contract_export_label()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L59"}, {"id": "services_pl_plan_archive_export_load_contract_nos_by_plan", "label": "_load_contract_nos_by_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L73"}, {"id": "services_pl_plan_archive_export_resolve_archive_list_io_column", "label": "resolve_archive_list_io_column()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L128"}, {"id": "services_pl_plan_archive_export_format_date_value", "label": "_format_date_value()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L136"}, {"id": "services_pl_plan_archive_export_format_plate_display", "label": "_format_plate_display()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L142"}, {"id": "services_pl_plan_archive_export_get_stop_archive_actual_qty", "label": "_get_stop_archive_actual_qty()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L152"}, {"id": "services_pl_plan_archive_export_get_stop_archive_unit_price", "label": "_get_stop_archive_unit_price()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L156"}, {"id": "services_pl_plan_archive_export_get_stop_archive_amount", "label": "_get_stop_archive_amount()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L160"}, {"id": "services_pl_plan_archive_export_stop_time", "label": "_stop_time()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L171"}, {"id": "services_pl_plan_archive_export_load_legacy_products_by_plan", "label": "_load_legacy_products_by_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L177"}, {"id": "services_pl_plan_archive_export_plan_common_export_fields", "label": "_plan_common_export_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L198"}, {"id": "services_pl_plan_archive_export_empty_pair_side_fields", "label": "_empty_pair_side_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L229"}, {"id": "services_pl_plan_archive_export_empty_product_identity_fields", "label": "_empty_product_identity_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L245"}, {"id": "services_pl_plan_archive_export_format_export_brand_name", "label": "_format_export_brand_name()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L256"}, {"id": "services_pl_plan_archive_export_resolve_export_product_display", "label": "_resolve_export_product_display()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L265"}, {"id": "services_pl_plan_archive_export_lookup_plan_product", "label": "_lookup_plan_product()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L290"}, {"id": "services_pl_plan_archive_export_product_identity_from_stop", "label": "_product_identity_from_stop()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L304"}, {"id": "services_pl_plan_archive_export_segment_slot_customer", "label": "_segment_slot_customer()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L327"}, {"id": "services_pl_plan_archive_export_build_archive_segment_row", "label": "_build_archive_segment_row()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L339"}, {"id": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "label": "_append_legacy_plan_product_rows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L409"}, {"id": "services_pl_plan_archive_export_build_plan_archive_export_rows", "label": "build_plan_archive_export_rows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L494"}, {"id": "services_pl_plan_archive_export_iter_equal_spans", "label": "_iter_equal_spans()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L639"}, {"id": "services_pl_plan_archive_export_export_plan_group_key", "label": "_export_plan_group_key()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L684"}, {"id": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "label": "prepare_archive_list_display_rows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L688"}, {"id": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "label": "append_archive_list_merge_sheet()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L765"}, {"id": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "label": "export_plan_list_xlsx_response()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L838"}, {"id": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "label": "export_plan_archive_xlsx_response()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L882"}, {"id": "services_pl_plan_archive_export_rationale_1", "label": "\u8fd0\u8f93\u8ba1\u5212\u5f52\u6863\u5bfc\u51fa\uff1a\u6309\u6bb5\u6b21\u00d7\u4ea7\u54c1\u5c55\u5f00\uff08\u88c5\u8d27\u884c\u4e0e\u5404\u9001\u8d27\u6bb5\u5404\u4e00\u884c\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L1"}, {"id": "services_pl_plan_archive_export_rationale_64", "label": "\u4e0e\u524d\u7aef\u5217\u8868\u4e00\u81f4\uff1a\u6709\u7f16\u53f7\u663e\u793a\u7f16\u53f7\uff1b\u5c71\u5ce1/\u4e91\u680b\u7f3a\u5408\u540c \u2192 \u88c5\u8d27\u51fa\u5e93 / \u9001\u8d27\u5165\u5e93\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L64"}, {"id": "services_pl_plan_archive_export_rationale_129", "label": "\u88c5\u8d27/\u9001\u8d27\u6bb5\u5165\u5e93\u51fa\u5e93\u5217\u65b9\u5411\uff08\u4e0e\u524d\u7aef resolveArchiveListIoColumn \u4e00\u81f4\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L129"}, {"id": "services_pl_plan_archive_export_rationale_230", "label": "side: load | delivery", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L230"}, {"id": "services_pl_plan_archive_export_rationale_257", "label": "\u4e0e\u8868\u5355\u300c\u54c1\u724c\u300d\u5217\u4e00\u81f4\uff1a\u4ec5\u6307\u5b9a\u54c1\u724c\u65f6\u5bfc\u51fa\u54c1\u724c\u540d\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L257"}, {"id": "services_pl_plan_archive_export_rationale_353", "label": "\u4e00\u6bb5\u6b21\u00d7\u4e00\u4e2a\u4ea7\u54c1\u4e00\u884c\uff1a\u53ea\u586b\u672c\u4fa7\u5ba2\u6237/\u5730\u5740/\u65f6\u95f4/\u5408\u540c\u4e0e\u672c\u4fa7\u91cf\u4ef7\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L353"}, {"id": "services_pl_plan_archive_export_rationale_419", "label": "\u65e0\u6bb5\u8868\u6570\u636e\u65f6\u56de\u9000\u8ba1\u5212\u4ea7\u54c1\u7ea7\u5bfc\u51fa\uff08\u517c\u5bb9\u65e7\u6570\u636e\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L419"}, {"id": "services_pl_plan_archive_export_rationale_503", "label": "\u6784\u5efa\u5f52\u6863\u5bfc\u51fa\u6570\u636e\u884c\u3002 \u9ed8\u8ba4\u6309\u6bb5\u6b21\u00d7\u4ea7\u54c1\u5c55\u5f00\uff1a\u5148\u88c5\u8d27\u4ea7\u54c1\u884c\uff0c\u518d\u5404\u9001\u8d27\u6bb5\u4ea7\u54c1\u884c\u3002 stop_kind \u4e3a load / delivery \u65f6\u53ea\u4fdd\u7559", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L503"}, {"id": "services_pl_plan_archive_export_rationale_640", "label": "\u8fd4\u56de\u9700\u8981\u5408\u5e76\u7684\u95ed\u533a\u95f4\uff08\u6570\u636e\u884c\u4e0b\u6807\uff0c\u4e0d\u542b\u8868\u5934\uff09\u3002\u5355\u884c\u4e0d\u5408\u5e76\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L640"}, {"id": "services_pl_plan_archive_export_rationale_697", "label": "\u6309\u5217\u8868\u5408\u5e76\u89c4\u5219\u6574\u7406\u5355\u5143\u683c\u53d6\u503c\u3002 \u5e8f\u53f7\u6309\u8ba1\u5212\u8ba1\uff0c\u4e00\u5f20\u8ba1\u5212\u4e00\u4e2a\u53f7\uff08\u5f52\u6863\u5bfc\u51fa\uff09\u3002 \u53ea\u6709\u4e00\u4e2a\u9001\u8d27\u6bb5\u65f6\uff0c\u9001\u8d27\u4fa7\u5b57\u6bb5\u5199\u5230\u8be5\u8ba1\u5212\u9996\u884c\uff0c\u4ee5\u4fbf\u548c\u88c5\u8d27\u884c\u5408\u5e76\u540e\u4ecd\u80fd", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L697"}, {"id": "services_pl_plan_archive_export_rationale_779", "label": "\u8ffd\u52a0\u6309\u5217\u8868\u5408\u5e76\u7684 sheet\u3002\u9ed8\u8ba4\u6807\u9898\u4e3a\u300c\u8ba1\u5212\u5f52\u6863\uff08\u5408\u5e76\uff09\u300d\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L779"}, {"id": "services_pl_plan_archive_export_rationale_847", "label": "\u8fd0\u8f93\u8ba1\u5212 / \u5371\u5316\u54c1\u8bc1\u5217\u8868 Excel\uff1a\u660e\u7ec6\u9875 + \u6309\u5217\u8868\u5408\u5e76\u7684\u7b2c\u4e8c\u9875\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L847"}, {"id": "services_pl_plan_archive_export_rationale_890", "label": "\u5f52\u6863 Excel\uff1a\u7b2c\u4e00\u9875\u4e3a\u6bb5\u6b21\u660e\u7ec6\uff0c\u7b2c\u4e8c\u9875\u4e3a\u5217\u8868\u5408\u5e76\u6837\u5f0f\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L890"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "decimal", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L6", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "sqlalchemy_orm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L8", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_models_pl_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L10", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_schemas_pl_plan", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L11", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_services_pl_plan_list_export_segments", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L12", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_services_pl_plan_list_filters", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L16", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_services_pl_internal_customer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L17", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_services_pl_plan_stop_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L18", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "app_services_pl_product_display", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L19", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_unique_contract_nos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L24", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_contract_nos_from_stop_links", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L35", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_format_stop_contract_export_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L59", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_load_contract_nos_by_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L73", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_resolve_archive_list_io_column", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L128", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_format_date_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_format_plate_display", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_get_stop_archive_actual_qty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L152", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_get_stop_archive_unit_price", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L156", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_get_stop_archive_amount", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L160", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_stop_time", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L171", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_load_legacy_products_by_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L177", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_plan_common_export_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L198", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_empty_pair_side_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L229", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_empty_product_identity_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L245", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_format_export_brand_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L256", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_resolve_export_product_display", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L265", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_lookup_plan_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L290", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_product_identity_from_stop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L304", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_segment_slot_customer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L327", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_build_archive_segment_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L339", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L409", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_build_plan_archive_export_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L494", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_iter_equal_spans", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L639", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_export_plan_group_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L684", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L688", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L765", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L838", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "target": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L882", "weight": 1.0}, {"source": "services_pl_plan_archive_export_format_stop_contract_export_label", "target": "services_pl_plan_archive_export_contract_nos_from_stop_links", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L65", "weight": 1.0}, {"source": "services_pl_plan_archive_export_get_stop_archive_amount", "target": "services_pl_plan_archive_export_get_stop_archive_actual_qty", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L164", "weight": 1.0}, {"source": "services_pl_plan_archive_export_get_stop_archive_amount", "target": "services_pl_plan_archive_export_get_stop_archive_unit_price", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L165", "weight": 1.0}, {"source": "services_pl_plan_archive_export_stop_time", "target": "services_pl_plan_archive_export_format_date_value", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L173", "weight": 1.0}, {"source": "services_pl_plan_archive_export_plan_common_export_fields", "target": "services_pl_plan_archive_export_format_date_value", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L210", "weight": 1.0}, {"source": "services_pl_plan_archive_export_plan_common_export_fields", "target": "services_pl_plan_archive_export_unique_contract_nos", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L215", "weight": 1.0}, {"source": "services_pl_plan_archive_export_plan_common_export_fields", "target": "services_pl_plan_archive_export_format_plate_display", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L220", "weight": 1.0}, {"source": "services_pl_plan_archive_export_product_identity_from_stop", "target": "services_pl_plan_archive_export_resolve_export_product_display", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L311", "weight": 1.0}, {"source": "services_pl_plan_archive_export_product_identity_from_stop", "target": "services_pl_plan_archive_export_format_export_brand_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L319", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_empty_product_identity_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L368", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_stop_time", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L378", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_format_stop_contract_export_label", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L379", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_lookup_plan_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L391", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_product_identity_from_stop", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L395", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_get_stop_archive_actual_qty", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L403", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_get_stop_archive_unit_price", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L404", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_archive_segment_row", "target": "services_pl_plan_archive_export_get_stop_archive_amount", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L405", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_unique_contract_nos", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L425", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_format_stop_contract_export_label", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L426", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_empty_pair_side_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L440", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_empty_product_identity_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L442", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_format_date_value", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L447", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_resolve_export_product_display", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L462", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "target": "services_pl_plan_archive_export_format_export_brand_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L471", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_load_legacy_products_by_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L524", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_load_contract_nos_by_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L525", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_plan_common_export_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L546", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L567", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_segment_slot_customer", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L585", "weight": 1.0}, {"source": "services_pl_plan_archive_export_build_plan_archive_export_rows", "target": "services_pl_plan_archive_export_build_archive_segment_row", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L589", "weight": 1.0}, {"source": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "target": "services_pl_plan_archive_export_export_plan_group_key", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L709", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "target": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L786", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "target": "services_pl_plan_archive_export_iter_equal_spans", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L817", "weight": 1.0}, {"source": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "target": "services_pl_plan_archive_export_export_plan_group_key", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L825", "weight": 1.0}, {"source": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "target": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L866", "weight": 1.0}, {"source": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "target": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L909", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_1", "target": "users_zlwu_work_00code_shanxia2_0_backend_app_services_pl_plan_archive_export_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L1", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_64", "target": "services_pl_plan_archive_export_format_stop_contract_export_label", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L64", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_129", "target": "services_pl_plan_archive_export_resolve_archive_list_io_column", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L129", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_230", "target": "services_pl_plan_archive_export_empty_pair_side_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L230", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_257", "target": "services_pl_plan_archive_export_format_export_brand_name", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L257", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_353", "target": "services_pl_plan_archive_export_build_archive_segment_row", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L353", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_419", "target": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L419", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_503", "target": "services_pl_plan_archive_export_build_plan_archive_export_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L503", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_640", "target": "services_pl_plan_archive_export_iter_equal_spans", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L640", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_697", "target": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L697", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_779", "target": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L779", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_847", "target": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L847", "weight": 1.0}, {"source": "services_pl_plan_archive_export_rationale_890", "target": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L890", "weight": 1.0}], "raw_calls": [{"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L28"}, {"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L28"}, {"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L28"}, {"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L29"}, {"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L31"}, {"caller_nid": "services_pl_plan_archive_export_unique_contract_nos", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L32"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L40"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L41"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L41"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L42"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L45"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L45"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L48"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L49"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L49"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L50"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L53"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L53"}, {"caller_nid": "services_pl_plan_archive_export_contract_nos_from_stop_links", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L55"}, {"caller_nid": "services_pl_plan_archive_export_format_stop_contract_export_label", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L67"}, {"caller_nid": "services_pl_plan_archive_export_format_stop_contract_export_label", "callee": "is_internal_customer_name", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L68"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L79"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L79"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L79"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L79"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L83"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L85"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L85"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L90"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L93"}, {"caller_nid": "services_pl_plan_archive_export_load_contract_nos_by_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L95"}, {"caller_nid": "services_pl_plan_archive_export_resolve_archive_list_io_column", "callee": "is_internal_customer_name", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L130"}, {"caller_nid": "services_pl_plan_archive_export_format_date_value", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L139"}, {"caller_nid": "services_pl_plan_archive_export_format_plate_display", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L143"}, {"caller_nid": "services_pl_plan_archive_export_format_plate_display", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L144"}, {"caller_nid": "services_pl_plan_archive_export_stop_time", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L173"}, {"caller_nid": "services_pl_plan_archive_export_stop_time", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L174"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L183"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L183"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L183"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L183"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L187"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L194"}, {"caller_nid": "services_pl_plan_archive_export_load_legacy_products_by_plan", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L194"}, {"caller_nid": "services_pl_plan_archive_export_plan_common_export_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L205"}, {"caller_nid": "services_pl_plan_archive_export_plan_common_export_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L217"}, {"caller_nid": "services_pl_plan_archive_export_plan_common_export_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L218"}, {"caller_nid": "services_pl_plan_archive_export_plan_common_export_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L219"}, {"caller_nid": "services_pl_plan_archive_export_plan_common_export_fields", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L221"}, {"caller_nid": "services_pl_plan_archive_export_format_export_brand_name", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L260"}, {"caller_nid": "services_pl_plan_archive_export_format_export_brand_name", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L262"}, {"caller_nid": "services_pl_plan_archive_export_resolve_export_product_display", "callee": "resolve_product_display_names", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L281"}, {"caller_nid": "services_pl_plan_archive_export_resolve_export_product_display", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L287"}, {"caller_nid": "services_pl_plan_archive_export_resolve_export_product_display", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L287"}, {"caller_nid": "services_pl_plan_archive_export_lookup_plan_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L295"}, {"caller_nid": "services_pl_plan_archive_export_lookup_plan_product", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L295"}, {"caller_nid": "services_pl_plan_archive_export_lookup_plan_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L295"}, {"caller_nid": "services_pl_plan_archive_export_lookup_plan_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L298"}, {"caller_nid": "services_pl_plan_archive_export_lookup_plan_product", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L298"}, {"caller_nid": "services_pl_plan_archive_export_build_archive_segment_row", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L354"}, {"caller_nid": "services_pl_plan_archive_export_build_archive_segment_row", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L354"}, {"caller_nid": "services_pl_plan_archive_export_build_archive_segment_row", "callee": "format_stop_segment_label", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L360"}, {"caller_nid": "services_pl_plan_archive_export_build_archive_segment_row", "callee": "update", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L394"}, {"caller_nid": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L421"}, {"caller_nid": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L421"}, {"caller_nid": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "callee": "update", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L468"}, {"caller_nid": "services_pl_plan_archive_export_append_legacy_plan_product_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L490"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L515"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L515"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L515"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L515"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L523"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "values", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L527"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L530"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "values", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L531"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "list", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L532"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L535"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "load_crm_product_alias_maps", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L536"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L545"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L549"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L551"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L552"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L553"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L556"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L556"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "bool", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L560"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "_keep_customer", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L565"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "iter_segment_product_slots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L578"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "_keep_customer", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L585"}, {"caller_nid": "services_pl_plan_archive_export_build_plan_archive_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L588"}, {"caller_nid": "services_pl_plan_archive_export_iter_equal_spans", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L643"}, {"caller_nid": "services_pl_plan_archive_export_iter_equal_spans", "callee": "key_fn", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L645"}, {"caller_nid": "services_pl_plan_archive_export_iter_equal_spans", "callee": "key_fn", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L647"}, {"caller_nid": "services_pl_plan_archive_export_iter_equal_spans", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L650"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_group_key", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L685"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_group_key", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L685"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_group_key", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L685"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L708"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L711"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L713"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L717"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L717"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L718"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L720"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L721"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L723"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L727"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L727"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L732"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "next", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L737"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L737"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L740"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L743"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L745"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "next", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L747"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L747"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L750"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L751"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L755"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L755"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L755"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L757"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L759"}, {"caller_nid": "services_pl_plan_archive_export_prepare_archive_list_display_rows", "callee": "extend", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L760"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "list", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L787"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "create_sheet", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L794"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L795"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L797"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "row_to_cells", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L797"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L799"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "Alignment", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L800"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "set", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L818"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "update", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L819"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "startswith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L819"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L819"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "merge_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L820"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "merge_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L821"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L825"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "merge_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L829"}, {"caller_nid": "services_pl_plan_archive_export_append_archive_list_merge_sheet", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L833"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "callee": "assert_export_row_count", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L856"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L856"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L858"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "callee": "DictLabelResolver", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L859"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "callee": "Workbook", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L860"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L863"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L865"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "callee": "row_to_cells", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L865"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_list_xlsx_response", "callee": "workbook_to_streaming_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L879"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "assert_export_row_count", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L899"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L899"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L901"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "DictLabelResolver", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L902"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "Workbook", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L903"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L906"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L908"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "row_to_cells", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L908"}, {"caller_nid": "services_pl_plan_archive_export_export_plan_archive_xlsx_response", "callee": "workbook_to_streaming_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_archive_export.py", "source_location": "L910"}]} \ No newline at end of file diff --git a/backend/graphify-out/cache/ast/ed35e5e3c93b3f98d012f5b992f7976cb762db8cb254239223bda3aef92a9c64.json b/backend/graphify-out/cache/ast/ed35e5e3c93b3f98d012f5b992f7976cb762db8cb254239223bda3aef92a9c64.json new file mode 100644 index 000000000..2554fe1f7 --- /dev/null +++ b/backend/graphify-out/cache/ast/ed35e5e3c93b3f98d012f5b992f7976cb762db8cb254239223bda3aef92a9c64.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "label": "plan.py", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1"}, {"id": "pl_plan_resolve_list_product_display", "label": "_resolve_list_product_display()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L197"}, {"id": "pl_plan_resolve_create_date", "label": "_resolve_create_date()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L213"}, {"id": "pl_plan_generate_plan_no", "label": "_generate_plan_no()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L217"}, {"id": "pl_plan_format_subpack_slip_no", "label": "_format_subpack_slip_no()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L249"}, {"id": "pl_plan_normalize_subpack_slip_no", "label": "_normalize_subpack_slip_no()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L253"}, {"id": "pl_plan_subpack_slip_no_seq", "label": "_subpack_slip_no_seq()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L278"}, {"id": "pl_plan_ensure_subpack_slip_no", "label": "_ensure_subpack_slip_no()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L286"}, {"id": "pl_plan_determine_plan_type", "label": "_determine_plan_type()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L318"}, {"id": "pl_plan_get_plan_type_label", "label": "_get_plan_type_label()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L323"}, {"id": "pl_plan_generate_notify_message", "label": "_generate_notify_message()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L332"}, {"id": "pl_plan_parse_status_csv", "label": "_parse_status_csv()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L352"}, {"id": "pl_plan_apply_follow_status_filter", "label": "_apply_follow_status_filter()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L358"}, {"id": "pl_plan_apply_exclude_follow_status_filter", "label": "_apply_exclude_follow_status_filter()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L367"}, {"id": "pl_plan_merge_query", "label": "_merge_query()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L376"}, {"id": "pl_plan_param_get", "label": "_param_get()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L386"}, {"id": "pl_plan_filters_from_params", "label": "_filters_from_params()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L393"}, {"id": "pl_plan_body_to_params", "label": "_body_to_params()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L506"}, {"id": "pl_plan_plancolumnfacetbody", "label": "PlanColumnFacetBody", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L517"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "pl_plan_truthy_param", "label": "_truthy_param()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L530"}, {"id": "pl_plan_build_plan_facet_base_query", "label": "_build_plan_facet_base_query()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L538"}, {"id": "pl_plan_plan_column_facet_values", "label": "plan_column_facet_values()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L627"}, {"id": "pl_plan_list_plans", "label": "list_plans()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L789"}, {"id": "pl_plan_normalize_plan_export_columns", "label": "_normalize_plan_export_columns()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1112"}, {"id": "pl_plan_plan_list_export_filename_stem", "label": "_plan_list_export_filename_stem()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1122"}, {"id": "pl_plan_plan_list_export_sheet_title", "label": "_plan_list_export_sheet_title()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1133"}, {"id": "pl_plan_format_plan_list_export_brand", "label": "_format_plan_list_export_brand()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1142"}, {"id": "pl_plan_format_export_date_text", "label": "_format_export_date_text()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1149"}, {"id": "pl_plan_format_stop_address_time", "label": "_format_stop_address_time()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1156"}, {"id": "pl_plan_format_stop_dibang_label", "label": "_format_stop_dibang_label()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1164"}, {"id": "pl_plan_apply_plan_list_export_labels", "label": "_apply_plan_list_export_labels()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1180"}, {"id": "pl_plan_apply_plan_list_export_segment_stop_fields", "label": "_apply_plan_list_export_segment_stop_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1193"}, {"id": "pl_plan_blank_plan_list_export_stop_fields", "label": "_blank_plan_list_export_stop_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1249"}, {"id": "pl_plan_blank_plan_list_export_product_fields", "label": "_blank_plan_list_export_product_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1261"}, {"id": "pl_plan_index_plan_products_for_list_export", "label": "_index_plan_products_for_list_export()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1272"}, {"id": "pl_plan_lookup_plan_list_export_plan_product", "label": "_lookup_plan_list_export_plan_product()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1287"}, {"id": "pl_plan_fill_plan_list_export_legacy_product", "label": "_fill_plan_list_export_legacy_product()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1301"}, {"id": "pl_plan_fill_plan_list_export_segment_product", "label": "_fill_plan_list_export_segment_product()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1324"}, {"id": "pl_plan_build_plan_list_export_rows", "label": "_build_plan_list_export_rows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1362"}, {"id": "pl_plan_load_transports_by_id", "label": "_load_transports_by_id()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1499"}, {"id": "pl_plan_planexportbody", "label": "PlanExportBody", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1514"}, {"id": "pl_plan_export_plans", "label": "export_plans()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1546"}, {"id": "pl_plan_count_plans_by_contract", "label": "count_plans_by_contract()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1701"}, {"id": "pl_plan_get_contract_product_arrange_qty", "label": "get_contract_product_arrange_qty()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1750"}, {"id": "pl_plan_batch_contract_product_arrange_qty", "label": "batch_contract_product_arrange_qty()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1775"}, {"id": "pl_plan_list_contract_gaps", "label": "list_contract_gaps()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1797"}, {"id": "pl_plan_contract_gap_export_base", "label": "_contract_gap_export_base()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1873"}, {"id": "pl_plan_contract_gap_row_gap_type", "label": "_contract_gap_row_gap_type()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1908"}, {"id": "pl_plan_build_contract_gap_export_rows", "label": "build_contract_gap_export_rows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1921"}, {"id": "pl_plan_contractgapexportbody", "label": "ContractGapExportBody", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1971"}, {"id": "pl_plan_export_contract_gaps", "label": "export_contract_gaps()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1986"}, {"id": "pl_plan_put_plan_stop_contracts", "label": "put_plan_stop_contracts()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2027"}, {"id": "pl_plan_put_plan_side_contracts", "label": "put_plan_side_contracts()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2052"}, {"id": "pl_plan_create_plan", "label": "create_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2082"}, {"id": "pl_plan_create_plan_full", "label": "create_plan_full()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2166"}, {"id": "pl_plan_create_from_contract", "label": "create_from_contract()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2371"}, {"id": "pl_plan_get_plan", "label": "get_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2485"}, {"id": "pl_plan_update_plan", "label": "update_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2557"}, {"id": "pl_plan_patch_plan_product_certs", "label": "patch_plan_product_certs()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2934"}, {"id": "pl_plan_patch_plan_hazard_cert_ready", "label": "patch_plan_hazard_cert_ready()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2966"}, {"id": "pl_plan_patch_plan_erp_entered", "label": "patch_plan_erp_entered()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2998"}, {"id": "pl_plan_build_driver_url", "label": "_build_driver_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3033"}, {"id": "pl_plan_get_plan_arrange_info", "label": "get_plan_arrange_info()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3039"}, {"id": "pl_plan_mark_plan_wait_notice", "label": "mark_plan_wait_notice()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3158"}, {"id": "pl_plan_cancel_plan_wait_notice", "label": "cancel_plan_wait_notice()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3182"}, {"id": "pl_plan_force_plan_follow_status", "label": "force_plan_follow_status()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3218"}, {"id": "pl_plan_cancel_plan", "label": "cancel_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3253"}, {"id": "pl_plan_archive_plan_draft", "label": "archive_plan_draft()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3321"}, {"id": "pl_plan_archive_plan", "label": "archive_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3402"}, {"id": "pl_plan_update_plan_driver_feedback", "label": "update_plan_driver_feedback()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3544"}, {"id": "pl_plan_update_plan_site_feedback", "label": "update_plan_site_feedback()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3575"}, {"id": "pl_plan_get_inbound_slip_template", "label": "get_inbound_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3614"}, {"id": "pl_plan_save_inbound_slip_template", "label": "save_inbound_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3625"}, {"id": "pl_plan_get_print_delivery_slip", "label": "get_print_delivery_slip()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3648"}, {"id": "pl_plan_get_delivery_slip_template", "label": "get_delivery_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3672"}, {"id": "pl_plan_save_delivery_slip_template", "label": "save_delivery_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3683"}, {"id": "pl_plan_get_subpack_slip_template", "label": "get_subpack_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3706"}, {"id": "pl_plan_save_subpack_slip_template", "label": "save_subpack_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3717"}, {"id": "pl_plan_delete_plan", "label": "delete_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3754"}, {"id": "pl_plan_rationale_203", "label": "\u5217\u8868\u5c55\u793a\u7528\uff1a\u4f18\u5148 CRM \u6807\u51c6\u540d\uff0c\u5e76\u8fd4\u56de\u53cd\u63a8\u522b\u540d\uff08\u8be6\u60c5\u4ecd\u8fd4\u56de\u5e93\u5185 product_name\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L203"}, {"id": "pl_plan_rationale_218", "label": "\u751f\u6210\u8ba1\u5212\u7f16\u53f7 POYYYYMMDD###\uff08\u5f53\u65e5 3 \u4f4d\u5e8f\u53f7\uff0c\u6bcf\u65e5\u91cd\u7f6e\uff09", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L218"}, {"id": "pl_plan_rationale_254", "label": "\u5c06\u5386\u53f2\u5206\u88c5\u5355\u53f7\u7edf\u4e00\u4e3a NO:SXFZYYYYMMDD-###", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L254"}, {"id": "pl_plan_rationale_287", "label": "\u5206\u914d\u5206\u88c5\u5355\u53f7 NO:SXFZYYYYMMDD-###\uff08\u6309\u79df\u6237\u6bcf\u65e5\u9012\u589e\uff09", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L287"}, {"id": "pl_plan_rationale_518", "label": "\u8fd0\u8f93\u8ba1\u5212\u5217\u5934\u53ef\u9009\u503c\uff08\u53bb\u91cd\uff09\u3002\u989d\u5916\u5b57\u6bb5\u4e0e\u5217\u8868\u8fc7\u6ee4\u540c\u540d\uff0c\u7528\u4e8e Excel \u7ea7\u8054\u4e0a\u4e0b\u6587\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L518"}, {"id": "pl_plan_rationale_545", "label": "\u4e0e\u5217\u8868\u540c\u6e90\u7684\u8ba1\u5212\u4e0a\u4e0b\u6587\u67e5\u8be2\uff08\u5df2\u6392\u9664\u5f53\u524d facet \u5217\u81ea\u8eab\u6761\u4ef6\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L545"}, {"id": "pl_plan_rationale_632", "label": "\u8fd0\u8f93\u8ba1\u5212\u5217\u5934\u53ef\u9009\u503c\uff1a\u5728\u5217\u8868\u4e0a\u4e0b\u6587\uff08\u6392\u9664\u672c\u5217\uff09\u4e0b\u53bb\u91cd\uff0c\u5bf9\u9f50 Excel \u7ea7\u8054\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L632"}, {"id": "pl_plan_rationale_1143", "label": "\u4e0e\u5217\u8868/\u8868\u5355\u4e00\u81f4\uff1a\u4ec5\u6307\u5b9a\u54c1\u724c\u65f6\u5bfc\u51fa\u54c1\u724c\u540d\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1143"}, {"id": "pl_plan_rationale_1201", "label": "\u6309\u5f53\u524d\u5bfc\u51fa\u884c\u6240\u5c5e\u6bb5\u586b\u5199\u88c5/\u9001\u4fa7\u5b57\u6bb5\uff1b\u5bf9\u4fa7\u7559\u7a7a\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1201"}, {"id": "pl_plan_rationale_1369", "label": "\u8ba1\u5212\u5217\u8868\u5bfc\u51fa\uff1a\u6709\u6bb5\u65f6\u6309\u6bb5\u6b21\u00d7\u4ea7\u54c1\u5c55\u5f00\uff1b\u65e0\u6bb5\u65f6\u56de\u9000\u8ba1\u5212\u7ea7\u4ea7\u54c1\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1369"}, {"id": "pl_plan_rationale_1551", "label": "\u5bfc\u51fa\u8ba1\u5212\u5217\u8868\uff08\u5f53\u524d\u7b5b\u9009\u5168\u91cf\uff0c\u6216 ids \u5df2\u9009\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1551"}, {"id": "pl_plan_rationale_1759", "label": "\u8868\u5355\u53ef\u5b89\u6392\u6570\u91cf + \u95ee\u53f7\u5f39\u7a97\uff1a\u5408\u540c\u7528\u91cf\u4e0e\u5df2\u5b89\u6392\u8ba1\u5212\u5217\u8868\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1759"}, {"id": "pl_plan_rationale_1780", "label": "\u6279\u91cf\u53ef\u5b89\u6392\u6570\u91cf\u6458\u8981\uff08\u4e0d\u542b\u5df2\u5b89\u6392\u8ba1\u5212\u660e\u7ec6\uff09\u3002 \u4ec5\u4f9b\u8fd0\u8f93\u8ba1\u5212\u65b0\u589e/\u7f16\u8f91/\u8c03\u6574\u8fd0\u8f93\u8868\u5355\u6253\u5f00\u65f6\u9884\u53d6\uff0c\u95ee\u53f7\u5f39\u7a97\u4ecd\u8d70\u5355\u6761\u8be6\u60c5\u63a5\u53e3\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1780"}, {"id": "pl_plan_rationale_1874", "label": "\u8ba1\u5212\u7ea7\u5b57\u6bb5\uff1b\u5355\u636e\u7c7b\u578b\u3001\u8ddf\u8fdb\u72b6\u6001\u6cbf\u7528\u5217\u8868\u5bfc\u51fa\u7684\u4e2d\u6587\u6807\u7b7e\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1874"}, {"id": "pl_plan_rationale_1909", "label": "\u672c\u884c\u6bb5\u7f3a\u53e3\uff1a\u88c5\u8d27\u7f3a\u4f9b\u65b9\u5408\u540c\uff0c\u9001\u8d27\u7f3a\u9700\u65b9\u5408\u540c\uff1b\u65e0\u7f3a\u53e3\u7559\u7a7a\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1909"}, {"id": "pl_plan_rationale_1925", "label": "\u628a\u6709\u7f3a\u53e3\u7684\u8ba1\u5212\u6309\u6bb5\u6b21\u00d7\u4ea7\u54c1\u5c55\u5f00\uff1b\u65e0\u7f3a\u53e3\u4fa7\u4ecd\u5bfc\u51fa\uff0cgapType \u4e3a\u7a7a\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1925"}, {"id": "pl_plan_rationale_2171", "label": "\u521b\u5efa\u8fd0\u8f93\u8ba1\u5212\uff08\u5b8c\u6574\u8868\u5355\uff1a\u4f9b\u65b9/\u9700\u65b9 + \u4ea7\u54c1\u5e93\u4ea7\u54c1 + \u53ef\u9009\u9884\u9009\u8f66\u8f86\uff0c\u4e0d\u81ea\u52a8\u5b89\u6392\u8fd0\u8f93\uff09", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2171"}, {"id": "pl_plan_rationale_2940", "label": "\u66f4\u65b0\u8ba1\u5212\u5371\u5316\u54c1\u4ea7\u54c1\u8bc1\u4e66\uff08\u8d2d\u4e70\u8bc1/\u8fd0\u8f93\u8bc1/\u5408\u6cd5\u4f7f\u7528\u8bc1\u660e\uff0c\u4e0d\u89e6\u53d1\u5b89\u6392\u8fd0\u8f93\uff09", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2940"}, {"id": "pl_plan_rationale_3044", "label": "\u83b7\u53d6\u8ba1\u5212\u5df2\u5b89\u6392\u8fd0\u8f93\u540e\u7684\u53f8\u673a\u94fe\u63a5\u4e0e\u5730\u78c5\u51fa\u5165\u5e93\u5173\u8054\uff08\u4f9b\u67e5\u770b\u5f39\u7a97\u590d\u5236\u7b80\u8ff0/\u4e8c\u7ef4\u7801\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3044"}, {"id": "pl_plan_rationale_3224", "label": "\u5f3a\u5236\u4fee\u6539\u8ddf\u8fdb\u72b6\u6001\uff08\u4ec5\u6539\u5b57\u6bb5\uff0c\u4e0d\u4f5c\u5e9f\u8054\u52a8\u3001\u4e0d\u8865\u8fd0\u8f93\u5b89\u6392\uff09\u3002\u9700\u6743\u9650 pl:plan:force-follow-status\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3224"}, {"id": "pl_plan_rationale_3259", "label": "\u4f5c\u5e9f\u8fd0\u8f93\u8ba1\u5212\uff1a\u53d6\u6d88\u8ddf\u8fdb\u72b6\u6001\u3001\u4f5c\u5e9f\u5173\u8054\u5730\u78c5\u51fa\u5165\u5e93\u5355\u3001\u53d6\u6d88\u8fd0\u8f93\u5355\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3259"}, {"id": "pl_plan_rationale_3654", "label": "\u6309\u9001\u8d27\u5ba2\u6237\u805a\u5408\u9001(\u63d0)\u8d27\u5355\u6253\u5370\u6570\u636e\uff1b\u4e0d\u4f20 customerId \u65f6\u4ec5\u8fd4\u56de\u5ba2\u6237\u9009\u9879\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3654"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "collections", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L7", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L8", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "sqlalchemy", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L9", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "sqlalchemy_orm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L10", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_config", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L12", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_database", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L13", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_db_auth", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L14", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_delete_guard", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L15", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_menu_guard", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L16", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_data_scope", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L17", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_list_sort", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L18", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_arrange_copy_flags", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L19", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_tenant_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L20", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_utils_excel_export", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L21", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_utils", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L28", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_models_crm_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L29", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_models_db_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L30", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_models_pl_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_schemas_pl", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L44", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_schemas_pl_cancel_reason", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L45", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_schemas_pl_plan", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L46", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_column_facet_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L76", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_contract_gap", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L77", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_brand_archive", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L86", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_product_display", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L87", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_schemas_pl_transport", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L91", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_dibang_bridge_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L97", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_inventory_link_read", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L103", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_io_order_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L104", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_internal_customer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L105", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_site_link_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L106", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_transport_site_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L107", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_inventory_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L108", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_archive_stop_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L112", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_archive_export", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L117", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_price_mask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L127", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_list_attachments", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_print_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L133", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_stop_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L134", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_customer_stop_pref_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L143", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_list_export_segments", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L144", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_list_filters", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L148", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L156", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_resolve_list_product_display", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L197", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_resolve_create_date", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L213", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_generate_plan_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_format_subpack_slip_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_normalize_subpack_slip_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L253", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_subpack_slip_no_seq", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L278", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_ensure_subpack_slip_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L286", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_determine_plan_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L318", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_plan_type_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L323", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_generate_notify_message", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L332", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_parse_status_csv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L352", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_apply_follow_status_filter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L358", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_apply_exclude_follow_status_filter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L367", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_merge_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L376", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_param_get", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L386", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_filters_from_params", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L393", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_body_to_params", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L506", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_plancolumnfacetbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L517", "weight": 1.0}, {"source": "pl_plan_plancolumnfacetbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L517", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_truthy_param", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L530", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_build_plan_facet_base_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L538", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_plan_column_facet_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L627", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_list_plans", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L789", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_normalize_plan_export_columns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1112", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_plan_list_export_filename_stem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1122", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_plan_list_export_sheet_title", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1133", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_format_plan_list_export_brand", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_format_export_date_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1149", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_format_stop_address_time", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1156", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_format_stop_dibang_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1164", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_apply_plan_list_export_labels", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1180", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_apply_plan_list_export_segment_stop_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1193", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_blank_plan_list_export_stop_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_blank_plan_list_export_product_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_index_plan_products_for_list_export", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1272", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_lookup_plan_list_export_plan_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1287", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_fill_plan_list_export_legacy_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1301", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_fill_plan_list_export_segment_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1324", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_build_plan_list_export_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1362", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_load_transports_by_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1499", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_planexportbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1514", "weight": 1.0}, {"source": "pl_plan_planexportbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1514", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_export_plans", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1546", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_count_plans_by_contract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1701", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_contract_product_arrange_qty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1750", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_batch_contract_product_arrange_qty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1775", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_list_contract_gaps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1797", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_contract_gap_export_base", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1873", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_contract_gap_row_gap_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1908", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_build_contract_gap_export_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1921", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_contractgapexportbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1971", "weight": 1.0}, {"source": "pl_plan_contractgapexportbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1971", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_export_contract_gaps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1986", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_put_plan_stop_contracts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2027", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_put_plan_side_contracts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2052", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_create_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2082", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_create_plan_full", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2166", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_create_from_contract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2371", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2485", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_update_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2557", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_patch_plan_product_certs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2934", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_patch_plan_hazard_cert_ready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2966", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_patch_plan_erp_entered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2998", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_build_driver_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3033", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_plan_arrange_info", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3039", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_mark_plan_wait_notice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3158", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_cancel_plan_wait_notice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3182", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_force_plan_follow_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3218", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_cancel_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3253", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_archive_plan_draft", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3321", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_archive_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3402", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_update_plan_driver_feedback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3544", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_update_plan_site_feedback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3575", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_inbound_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3614", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_save_inbound_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3625", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_print_delivery_slip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3648", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_delivery_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3672", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_save_delivery_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3683", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_subpack_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3706", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_save_subpack_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3717", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_ensure_subpack_slip_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3733", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_delete_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3754", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3793", "weight": 1.0}, {"source": "pl_plan_normalize_subpack_slip_no", "target": "pl_plan_format_subpack_slip_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L262", "weight": 1.0}, {"source": "pl_plan_subpack_slip_no_seq", "target": "pl_plan_normalize_subpack_slip_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L279", "weight": 1.0}, {"source": "pl_plan_ensure_subpack_slip_no", "target": "pl_plan_normalize_subpack_slip_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L290", "weight": 1.0}, {"source": "pl_plan_ensure_subpack_slip_no", "target": "pl_plan_subpack_slip_no_seq", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L311", "weight": 1.0}, {"source": "pl_plan_apply_follow_status_filter", "target": "pl_plan_parse_status_csv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L359", "weight": 1.0}, {"source": "pl_plan_apply_exclude_follow_status_filter", "target": "pl_plan_parse_status_csv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L368", "weight": 1.0}, {"source": "pl_plan_filters_from_params", "target": "pl_plan_param_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L397", "weight": 1.0}, {"source": "pl_plan_build_plan_facet_base_query", "target": "pl_plan_truthy_param", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L550", "weight": 1.0}, {"source": "pl_plan_build_plan_facet_base_query", "target": "pl_plan_param_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L551", "weight": 1.0}, {"source": "pl_plan_build_plan_facet_base_query", "target": "pl_plan_apply_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L575", "weight": 1.0}, {"source": "pl_plan_build_plan_facet_base_query", "target": "pl_plan_apply_exclude_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L579", "weight": 1.0}, {"source": "pl_plan_build_plan_facet_base_query", "target": "pl_plan_filters_from_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L610", "weight": 1.0}, {"source": "pl_plan_plan_column_facet_values", "target": "pl_plan_body_to_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L640", "weight": 1.0}, {"source": "pl_plan_plan_column_facet_values", "target": "pl_plan_build_plan_facet_base_query", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L642", "weight": 1.0}, {"source": "pl_plan_list_plans", "target": "pl_plan_apply_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L892", "weight": 1.0}, {"source": "pl_plan_list_plans", "target": "pl_plan_apply_exclude_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L893", "weight": 1.0}, {"source": "pl_plan_list_plans", "target": "pl_plan_merge_query", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L898", "weight": 1.0}, {"source": "pl_plan_list_plans", "target": "pl_plan_filters_from_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L915", "weight": 1.0}, {"source": "pl_plan_list_plans", "target": "pl_plan_resolve_list_product_display", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1008", "weight": 1.0}, {"source": "pl_plan_format_stop_address_time", "target": "pl_plan_format_export_date_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1158", "weight": 1.0}, {"source": "pl_plan_apply_plan_list_export_segment_stop_fields", "target": "pl_plan_format_stop_address_time", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1216", "weight": 1.0}, {"source": "pl_plan_apply_plan_list_export_segment_stop_fields", "target": "pl_plan_format_stop_dibang_label", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1220", "weight": 1.0}, {"source": "pl_plan_apply_plan_list_export_segment_stop_fields", "target": "pl_plan_format_export_date_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1237", "weight": 1.0}, {"source": "pl_plan_fill_plan_list_export_legacy_product", "target": "pl_plan_format_plan_list_export_brand", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1315", "weight": 1.0}, {"source": "pl_plan_fill_plan_list_export_segment_product", "target": "pl_plan_blank_plan_list_export_product_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1335", "weight": 1.0}, {"source": "pl_plan_fill_plan_list_export_segment_product", "target": "pl_plan_lookup_plan_list_export_plan_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1337", "weight": 1.0}, {"source": "pl_plan_fill_plan_list_export_segment_product", "target": "pl_plan_format_plan_list_export_brand", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1349", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_apply_plan_list_export_labels", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1415", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_blank_plan_list_export_stop_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1420", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_blank_plan_list_export_product_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1422", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_fill_plan_list_export_legacy_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1431", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_index_plan_products_for_list_export", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1440", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_apply_plan_list_export_segment_stop_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1445", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_fill_plan_list_export_segment_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1452", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_apply_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1572", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_apply_exclude_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1573", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_filters_from_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1576", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_body_to_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1577", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_load_transports_by_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1607", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_param_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1614", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_normalize_plan_export_columns", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1622", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_build_plan_list_export_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1668", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_plan_list_export_sheet_title", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1677", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_plan_list_export_filename_stem", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1678", "weight": 1.0}, {"source": "pl_plan_list_contract_gaps", "target": "pl_plan_merge_query", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1826", "weight": 1.0}, {"source": "pl_plan_list_contract_gaps", "target": "pl_plan_filters_from_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1838", "weight": 1.0}, {"source": "pl_plan_list_contract_gaps", "target": "pl_plan_param_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1845", "weight": 1.0}, {"source": "pl_plan_contract_gap_export_base", "target": "pl_plan_format_export_date_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1900", "weight": 1.0}, {"source": "pl_plan_build_contract_gap_export_rows", "target": "pl_plan_contract_gap_export_base", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1930", "weight": 1.0}, {"source": "pl_plan_build_contract_gap_export_rows", "target": "pl_plan_contract_gap_row_gap_type", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1956", "weight": 1.0}, {"source": "pl_plan_build_contract_gap_export_rows", "target": "pl_plan_format_export_date_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1961", "weight": 1.0}, {"source": "pl_plan_export_contract_gaps", "target": "pl_plan_body_to_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1993", "weight": 1.0}, {"source": "pl_plan_export_contract_gaps", "target": "pl_plan_filters_from_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1994", "weight": 1.0}, {"source": "pl_plan_export_contract_gaps", "target": "pl_plan_param_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2001", "weight": 1.0}, {"source": "pl_plan_export_contract_gaps", "target": "pl_plan_build_contract_gap_export_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2015", "weight": 1.0}, {"source": "pl_plan_create_plan", "target": "pl_plan_generate_plan_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2090", "weight": 1.0}, {"source": "pl_plan_create_plan", "target": "pl_plan_resolve_create_date", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2099", "weight": 1.0}, {"source": "pl_plan_create_plan_full", "target": "pl_plan_generate_plan_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2227", "weight": 1.0}, {"source": "pl_plan_create_plan_full", "target": "pl_plan_resolve_create_date", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2238", "weight": 1.0}, {"source": "pl_plan_create_from_contract", "target": "pl_plan_generate_plan_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2393", "weight": 1.0}, {"source": "pl_plan_create_from_contract", "target": "pl_plan_determine_plan_type", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2396", "weight": 1.0}, {"source": "pl_plan_create_from_contract", "target": "pl_plan_resolve_create_date", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2402", "weight": 1.0}, {"source": "pl_plan_get_plan_arrange_info", "target": "pl_plan_build_driver_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3071", "weight": 1.0}, {"source": "pl_plan_archive_plan_draft", "target": "pl_plan_get_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3398", "weight": 1.0}, {"source": "pl_plan_archive_plan", "target": "pl_plan_get_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3439", "weight": 1.0}, {"source": "pl_plan_update_plan_driver_feedback", "target": "pl_plan_get_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3571", "weight": 1.0}, {"source": "pl_plan_update_plan_site_feedback", "target": "pl_plan_get_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3605", "weight": 1.0}, {"source": "pl_plan_rationale_203", "target": "pl_plan_resolve_list_product_display", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L203", "weight": 1.0}, {"source": "pl_plan_rationale_218", "target": "pl_plan_generate_plan_no", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L218", "weight": 1.0}, {"source": "pl_plan_rationale_254", "target": "pl_plan_normalize_subpack_slip_no", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L254", "weight": 1.0}, {"source": "pl_plan_rationale_287", "target": "pl_plan_ensure_subpack_slip_no", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L287", "weight": 1.0}, {"source": "pl_plan_rationale_518", "target": "pl_plan_plancolumnfacetbody", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L518", "weight": 1.0}, {"source": "pl_plan_rationale_545", "target": "pl_plan_build_plan_facet_base_query", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L545", "weight": 1.0}, {"source": "pl_plan_rationale_632", "target": "pl_plan_plan_column_facet_values", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L632", "weight": 1.0}, {"source": "pl_plan_rationale_1143", "target": "pl_plan_format_plan_list_export_brand", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1143", "weight": 1.0}, {"source": "pl_plan_rationale_1201", "target": "pl_plan_apply_plan_list_export_segment_stop_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1201", "weight": 1.0}, {"source": "pl_plan_rationale_1369", "target": "pl_plan_build_plan_list_export_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1369", "weight": 1.0}, {"source": "pl_plan_rationale_1551", "target": "pl_plan_export_plans", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1551", "weight": 1.0}, {"source": "pl_plan_rationale_1759", "target": "pl_plan_get_contract_product_arrange_qty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1759", "weight": 1.0}, {"source": "pl_plan_rationale_1780", "target": "pl_plan_batch_contract_product_arrange_qty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1780", "weight": 1.0}, {"source": "pl_plan_rationale_1874", "target": "pl_plan_contract_gap_export_base", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1874", "weight": 1.0}, {"source": "pl_plan_rationale_1909", "target": "pl_plan_contract_gap_row_gap_type", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1909", "weight": 1.0}, {"source": "pl_plan_rationale_1925", "target": "pl_plan_build_contract_gap_export_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1925", "weight": 1.0}, {"source": "pl_plan_rationale_2171", "target": "pl_plan_create_plan_full", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2171", "weight": 1.0}, {"source": "pl_plan_rationale_2940", "target": "pl_plan_patch_plan_product_certs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2940", "weight": 1.0}, {"source": "pl_plan_rationale_3044", "target": "pl_plan_get_plan_arrange_info", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3044", "weight": 1.0}, {"source": "pl_plan_rationale_3224", "target": "pl_plan_force_plan_follow_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3224", "weight": 1.0}, {"source": "pl_plan_rationale_3259", "target": "pl_plan_cancel_plan", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3259", "weight": 1.0}, {"source": "pl_plan_rationale_3654", "target": "pl_plan_get_print_delivery_slip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3654", "weight": 1.0}], "raw_calls": [{"caller_nid": "pl_plan_resolve_list_product_display", "callee": "resolve_product_display_names", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L204"}, {"caller_nid": "pl_plan_resolve_create_date", "callee": "today", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L214"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "today", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L219"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L220"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L224"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L224"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L224"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "like", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L225"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L231"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "isdigit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L232"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "max", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L233"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L233"}, {"caller_nid": "pl_plan_format_subpack_slip_no", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L250"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L255"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "match", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L259"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "groups", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L261"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L262"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "match", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L264"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "groups", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L266"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L267"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "match", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L270"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "groups", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L272"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L273"}, {"caller_nid": "pl_plan_subpack_slip_no_seq", "callee": "startswith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L280"}, {"caller_nid": "pl_plan_subpack_slip_no_seq", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L282"}, {"caller_nid": "pl_plan_subpack_slip_no_seq", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L283"}, {"caller_nid": "pl_plan_subpack_slip_no_seq", "callee": "isdigit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L283"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L288"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "today", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L296"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L297"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L300"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L300"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L300"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "isnot", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L303"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "max", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L311"}, {"caller_nid": "pl_plan_determine_plan_type", "callee": "determine_plan_type", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L320"}, {"caller_nid": "pl_plan_get_plan_type_label", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L329"}, {"caller_nid": "pl_plan_generate_notify_message", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L334"}, {"caller_nid": "pl_plan_generate_notify_message", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L335"}, {"caller_nid": "pl_plan_generate_notify_message", "callee": "sum", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L343"}, {"caller_nid": "pl_plan_generate_notify_message", "callee": "float", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L343"}, {"caller_nid": "pl_plan_parse_status_csv", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L355"}, {"caller_nid": "pl_plan_parse_status_csv", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L355"}, {"caller_nid": "pl_plan_parse_status_csv", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L355"}, {"caller_nid": "pl_plan_apply_follow_status_filter", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L360"}, {"caller_nid": "pl_plan_apply_follow_status_filter", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L361"}, {"caller_nid": "pl_plan_apply_follow_status_filter", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L362"}, {"caller_nid": "pl_plan_apply_follow_status_filter", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L363"}, {"caller_nid": "pl_plan_apply_follow_status_filter", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L363"}, {"caller_nid": "pl_plan_apply_exclude_follow_status_filter", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L369"}, {"caller_nid": "pl_plan_apply_exclude_follow_status_filter", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L370"}, {"caller_nid": "pl_plan_apply_exclude_follow_status_filter", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L371"}, {"caller_nid": "pl_plan_apply_exclude_follow_status_filter", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L372"}, {"caller_nid": "pl_plan_apply_exclude_follow_status_filter", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L372"}, {"caller_nid": "pl_plan_merge_query", "callee": "items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L377"}, {"caller_nid": "pl_plan_merge_query", "callee": "multi_items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L378"}, {"caller_nid": "pl_plan_filters_from_params", "callee": "build_plan_column_filters", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L394"}, {"caller_nid": "pl_plan_body_to_params", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L507"}, {"caller_nid": "pl_plan_body_to_params", "callee": "pop", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L509"}, {"caller_nid": "pl_plan_body_to_params", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L510"}, {"caller_nid": "pl_plan_body_to_params", "callee": "items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L511"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L546"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L546"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L555"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L556"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L558"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L558"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "apply_contract_gap_keyword_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L560"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L562"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L563"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "or_", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L564"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L565"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L566"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L566"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L567"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L567"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L568"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L568"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "plan_product_name_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L569"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "plan_plate_match", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L570"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L583"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "plan_has_hazard_product_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L583"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L586"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "plan_has_contract_gap_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L588"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "apply_contract_gap_type_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L593"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L593"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "apply_contract_gap_keyword_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L597"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L598"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L600"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L600"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L601"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L601"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L602"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L603"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "or_", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L604"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L605"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L605"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L606"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L606"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L612"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "apply_stock_role_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L616"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L620"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L620"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "apply_pl_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L622"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L635"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L635"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "min", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L636"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "max", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L636"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L636"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L637"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L638"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L638"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "strip_plan_facet_self_params", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L641"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "subquery", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L645"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "with_entities", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L645"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_plan_col_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L688"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_plan_col_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L690"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L692"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L694"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L696"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L698"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L702"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L702"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "select_from", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L702"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L702"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L702"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L702"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L702"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L706"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "isnot", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L709"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L714"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "like", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L714"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_finish", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L715"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L715"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "limit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L715"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L715"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "group_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L715"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L715"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L718"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L720"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L730"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L730"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "select_from", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L730"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L730"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L731"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L732"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L732"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L737"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "isnot", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L740"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L745"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L745"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L746"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L747"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L747"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L750"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "isnot", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L751"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L756"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "like", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L756"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L757"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "like", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L757"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L759"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "group_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L759"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L760"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L760"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L762"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L762"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L763"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "group_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L763"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L764"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L764"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L766"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L766"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "sorted", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L767"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L767"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L774"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L774"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L774"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L776"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L776"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "plan_internal_contract_placeholder_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L777"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L780"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L781"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L785"}, {"caller_nid": "pl_plan_list_plans", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L861"}, {"caller_nid": "pl_plan_list_plans", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L861"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L862"}, {"caller_nid": "pl_plan_list_plans", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L862"}, {"caller_nid": "pl_plan_list_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L867"}, {"caller_nid": "pl_plan_list_plans", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L867"}, {"caller_nid": "pl_plan_list_plans", "callee": "plan_ids_linked_to_contract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L870"}, {"caller_nid": "pl_plan_list_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L871"}, {"caller_nid": "pl_plan_list_plans", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L871"}, {"caller_nid": "pl_plan_list_plans", "callee": "PlanListResponse", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L874"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L875"}, {"caller_nid": "pl_plan_list_plans", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L875"}, {"caller_nid": "pl_plan_list_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L878"}, {"caller_nid": "pl_plan_list_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L880"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L881"}, {"caller_nid": "pl_plan_list_plans", "callee": "or_", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L882"}, {"caller_nid": "pl_plan_list_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L883"}, {"caller_nid": "pl_plan_list_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L884"}, {"caller_nid": "pl_plan_list_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L884"}, {"caller_nid": "pl_plan_list_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L885"}, {"caller_nid": "pl_plan_list_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L885"}, {"caller_nid": "pl_plan_list_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L886"}, {"caller_nid": "pl_plan_list_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L886"}, {"caller_nid": "pl_plan_list_plans", "callee": "plan_product_name_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L887"}, {"caller_nid": "pl_plan_list_plans", "callee": "plan_plate_match", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L888"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L896"}, {"caller_nid": "pl_plan_list_plans", "callee": "plan_has_hazard_product_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L896"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L917"}, {"caller_nid": "pl_plan_list_plans", "callee": "apply_stock_role_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L920"}, {"caller_nid": "pl_plan_list_plans", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L924"}, {"caller_nid": "pl_plan_list_plans", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L924"}, {"caller_nid": "pl_plan_list_plans", "callee": "apply_pl_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L926"}, {"caller_nid": "pl_plan_list_plans", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L929"}, {"caller_nid": "pl_plan_list_plans", "callee": "parse_sort_params", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L933"}, {"caller_nid": "pl_plan_list_plans", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L935"}, {"caller_nid": "pl_plan_list_plans", "callee": "limit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L935"}, {"caller_nid": "pl_plan_list_plans", "callee": "offset", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L935"}, {"caller_nid": "pl_plan_list_plans", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L935"}, {"caller_nid": "pl_plan_list_plans", "callee": "order_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L935"}, {"caller_nid": "pl_plan_list_plans", "callee": "desc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L935"}, {"caller_nid": "pl_plan_list_plans", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L946"}, {"caller_nid": "pl_plan_list_plans", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L946"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L946"}, {"caller_nid": "pl_plan_list_plans", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L946"}, {"caller_nid": "pl_plan_list_plans", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L948"}, {"caller_nid": "pl_plan_list_plans", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L955"}, {"caller_nid": "pl_plan_list_plans", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L955"}, {"caller_nid": "pl_plan_list_plans", "callee": "fetch_hazard_flags_map", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L958"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_crm_product_alias_maps", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L963"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_brand_qtys_by_plan_product_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L968"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L973"}, {"caller_nid": "pl_plan_list_plans", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L974"}, {"caller_nid": "pl_plan_list_plans", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L975"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_plan_arrange_copy_flags", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L977"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_plan_document_attachments_by_plan_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L980"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L988"}, {"caller_nid": "pl_plan_list_plans", "callee": "user_can_view_archive_prices", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L989"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L994"}, {"caller_nid": "pl_plan_list_plans", "callee": "resolve_hazard_flags_from_crm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L995"}, {"caller_nid": "pl_plan_list_plans", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1001"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1002"}, {"caller_nid": "pl_plan_list_plans", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1004"}, {"caller_nid": "pl_plan_list_plans", "callee": "model_copy", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1013"}, {"caller_nid": "pl_plan_list_plans", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1022"}, {"caller_nid": "pl_plan_list_plans", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1024"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1026"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1029"}, {"caller_nid": "pl_plan_list_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1034"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1040"}, {"caller_nid": "pl_plan_list_plans", "callee": "attach_plan_stops_to_item", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1041"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1044"}, {"caller_nid": "pl_plan_list_plans", "callee": "mask_plan_with_products_prices", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1046"}, {"caller_nid": "pl_plan_list_plans", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1047"}, {"caller_nid": "pl_plan_list_plans", "callee": "PlanListResponse", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1049"}, {"caller_nid": "pl_plan_normalize_plan_export_columns", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1118"}, {"caller_nid": "pl_plan_normalize_plan_export_columns", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1118"}, {"caller_nid": "pl_plan_normalize_plan_export_columns", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1118"}, {"caller_nid": "pl_plan_plan_list_export_filename_stem", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1125"}, {"caller_nid": "pl_plan_plan_list_export_filename_stem", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1125"}, {"caller_nid": "pl_plan_plan_list_export_sheet_title", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1134"}, {"caller_nid": "pl_plan_plan_list_export_sheet_title", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1134"}, {"caller_nid": "pl_plan_format_plan_list_export_brand", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1144"}, {"caller_nid": "pl_plan_format_plan_list_export_brand", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1146"}, {"caller_nid": "pl_plan_format_export_date_text", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1152"}, {"caller_nid": "pl_plan_format_export_date_text", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1152"}, {"caller_nid": "pl_plan_format_stop_address_time", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1157"}, {"caller_nid": "pl_plan_format_stop_address_time", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1157"}, {"caller_nid": "pl_plan_format_stop_dibang_label", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1167"}, {"caller_nid": "pl_plan_format_stop_dibang_label", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1167"}, {"caller_nid": "pl_plan_format_stop_dibang_label", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1170"}, {"caller_nid": "pl_plan_format_stop_dibang_label", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1170"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1181"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1181"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1182"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1183"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1183"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1184"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1185"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1185"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1186"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1187"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1187"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1188"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1189"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1189"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1190"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "_format_stop_segment_label", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1204"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1215"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1215"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1217"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1218"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "format_stop_contract_export_label", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1222"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1224"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1230"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1231"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1234"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1235"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1238"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "format_stop_contract_export_label", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1242"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1244"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1278"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1278"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1278"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1281"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1281"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1281"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1292"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1292"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1292"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1295"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1295"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1295"}, {"caller_nid": "pl_plan_fill_plan_list_export_legacy_product", "callee": "resolve_product_display_names", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1308"}, {"caller_nid": "pl_plan_fill_plan_list_export_legacy_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1316"}, {"caller_nid": "pl_plan_fill_plan_list_export_legacy_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1317"}, {"caller_nid": "pl_plan_fill_plan_list_export_legacy_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1318"}, {"caller_nid": "pl_plan_fill_plan_list_export_legacy_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1319"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1340"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "resolve_product_display_names", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1341"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1343"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1351"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1352"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1352"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1353"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1353"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1354"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1354"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1355"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1357"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1359"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "defaultdict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1371"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "set", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1372"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1375"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1375"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1375"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1375"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1378"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1381"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1381"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1385"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1387"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1389"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "_iter_segment_product_slots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1392"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1397"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1397"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1397"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1399"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "load_crm_product_alias_maps", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1400"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1406"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1406"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "pop", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1407"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1408"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1409"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1410"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1411"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "_format_plate_display", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1412"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1413"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1413"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1416"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1417"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1425"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1428"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1437"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "_iter_segment_product_slots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1441"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1444"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1461"}, {"caller_nid": "pl_plan_load_transports_by_id", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1503"}, {"caller_nid": "pl_plan_load_transports_by_id", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1503"}, {"caller_nid": "pl_plan_load_transports_by_id", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1503"}, {"caller_nid": "pl_plan_load_transports_by_id", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1507"}, {"caller_nid": "pl_plan_export_plans", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1553"}, {"caller_nid": "pl_plan_export_plans", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1553"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1554"}, {"caller_nid": "pl_plan_export_plans", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1554"}, {"caller_nid": "pl_plan_export_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1559"}, {"caller_nid": "pl_plan_export_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1561"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1562"}, {"caller_nid": "pl_plan_export_plans", "callee": "or_", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1563"}, {"caller_nid": "pl_plan_export_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1564"}, {"caller_nid": "pl_plan_export_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1565"}, {"caller_nid": "pl_plan_export_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1565"}, {"caller_nid": "pl_plan_export_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1566"}, {"caller_nid": "pl_plan_export_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1566"}, {"caller_nid": "pl_plan_export_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1567"}, {"caller_nid": "pl_plan_export_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1567"}, {"caller_nid": "pl_plan_export_plans", "callee": "plan_product_name_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1568"}, {"caller_nid": "pl_plan_export_plans", "callee": "plan_plate_match", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1569"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1575"}, {"caller_nid": "pl_plan_export_plans", "callee": "plan_has_hazard_product_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1575"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1580"}, {"caller_nid": "pl_plan_export_plans", "callee": "apply_stock_role_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1582"}, {"caller_nid": "pl_plan_export_plans", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1586"}, {"caller_nid": "pl_plan_export_plans", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1586"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1588"}, {"caller_nid": "pl_plan_export_plans", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1588"}, {"caller_nid": "pl_plan_export_plans", "callee": "apply_pl_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1589"}, {"caller_nid": "pl_plan_export_plans", "callee": "parse_sort_params", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1591"}, {"caller_nid": "pl_plan_export_plans", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1593"}, {"caller_nid": "pl_plan_export_plans", "callee": "limit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1593"}, {"caller_nid": "pl_plan_export_plans", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1593"}, {"caller_nid": "pl_plan_export_plans", "callee": "order_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1593"}, {"caller_nid": "pl_plan_export_plans", "callee": "desc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1593"}, {"caller_nid": "pl_plan_export_plans", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1597"}, {"caller_nid": "pl_plan_export_plans", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1597"}, {"caller_nid": "pl_plan_export_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1598"}, {"caller_nid": "pl_plan_export_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1598"}, {"caller_nid": "pl_plan_export_plans", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1601"}, {"caller_nid": "pl_plan_export_plans", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1602"}, {"caller_nid": "pl_plan_export_plans", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1605"}, {"caller_nid": "pl_plan_export_plans", "callee": "build_plan_archive_export_rows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1608"}, {"caller_nid": "pl_plan_export_plans", "callee": "parse_single_stop_kind", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1613"}, {"caller_nid": "pl_plan_export_plans", "callee": "parse_stop_customer_keywords", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1617"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter_export_columns", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1621"}, {"caller_nid": "pl_plan_export_plans", "callee": "user_can_view_archive_prices", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1624"}, {"caller_nid": "pl_plan_export_plans", "callee": "load_plan_document_attachments_by_plan_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1635"}, {"caller_nid": "pl_plan_export_plans", "callee": "load_plan_products_by_plan_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1638"}, {"caller_nid": "pl_plan_export_plans", "callee": "merge_plan_attachment_items", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1642"}, {"caller_nid": "pl_plan_export_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1643"}, {"caller_nid": "pl_plan_export_plans", "callee": "collect_hazard_cert_items", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1644"}, {"caller_nid": "pl_plan_export_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1644"}, {"caller_nid": "pl_plan_export_plans", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1648"}, {"caller_nid": "pl_plan_export_plans", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1648"}, {"caller_nid": "pl_plan_export_plans", "callee": "build_archive_zip_streaming_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1649"}, {"caller_nid": "pl_plan_export_plans", "callee": "export_plan_archive_xlsx_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1658"}, {"caller_nid": "pl_plan_export_plans", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1667"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter_export_columns", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1674"}, {"caller_nid": "pl_plan_export_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1679"}, {"caller_nid": "pl_plan_export_plans", "callee": "export_plan_list_xlsx_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1680"}, {"caller_nid": "pl_plan_export_plans", "callee": "export_rows_to_xlsx_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1688"}, {"caller_nid": "pl_plan_export_plans", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1697"}, {"caller_nid": "pl_plan_export_plans", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1697"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1708"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1708"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1709"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1709"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1709"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1715"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1715"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1715"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1719"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1722"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "group_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1722"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "apply_pl_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1722"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1726"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1726"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1726"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1731"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "apply_pl_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1736"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "set", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1737"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1738"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1742"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1744"}, {"caller_nid": "pl_plan_get_contract_product_arrange_qty", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1762"}, {"caller_nid": "pl_plan_get_contract_product_arrange_qty", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1762"}, {"caller_nid": "pl_plan_get_contract_product_arrange_qty", "callee": "get_contract_product_arrange_qty_detail", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1763"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1786"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1786"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1787"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1787"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1788"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "batch_contract_product_arrange_qty_summaries", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1790"}, {"caller_nid": "pl_plan_list_contract_gaps", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1825"}, {"caller_nid": "pl_plan_list_contract_gaps", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1825"}, {"caller_nid": "pl_plan_list_contract_gaps", "callee": "list_plan_contract_gaps", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1839"}, {"caller_nid": "pl_plan_list_contract_gaps", "callee": "PlanContractGapListResponse", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1853"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1875"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1876"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1879"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1879"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1880"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1881"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1882"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1883"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1884"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1885"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1886"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1887"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1888"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1889"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1890"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1891"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1892"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1893"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1894"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1896"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1896"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1897"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1897"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1899"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1900"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1901"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1902"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1903"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1904"}, {"caller_nid": "pl_plan_contract_gap_row_gap_type", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1912"}, {"caller_nid": "pl_plan_contract_gap_row_gap_type", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1913"}, {"caller_nid": "pl_plan_contract_gap_row_gap_type", "callee": "stop_contract_gap", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1914"}, {"caller_nid": "pl_plan_contract_gap_row_gap_type", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1914"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1928"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1928"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1929"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "_iter_segment_product_slots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1931"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "_format_stop_segment_label", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1936"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1944"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1944"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1953"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1954"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1958"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1959"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1962"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1967"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1992"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1992"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "list_plan_contract_gaps", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1995"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2014"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "filter_export_columns", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2016"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2017"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2017"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "export_rows_to_xlsx_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2018"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2023"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2023"}, {"caller_nid": "pl_plan_put_plan_stop_contracts", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2034"}, {"caller_nid": "pl_plan_put_plan_stop_contracts", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2034"}, {"caller_nid": "pl_plan_put_plan_stop_contracts", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2035"}, {"caller_nid": "pl_plan_put_plan_stop_contracts", "callee": "update_plan_stop_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2036"}, {"caller_nid": "pl_plan_put_plan_stop_contracts", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2047"}, {"caller_nid": "pl_plan_put_plan_side_contracts", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2060"}, {"caller_nid": "pl_plan_put_plan_side_contracts", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2060"}, {"caller_nid": "pl_plan_put_plan_side_contracts", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2061"}, {"caller_nid": "pl_plan_put_plan_side_contracts", "callee": "update_plan_side_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2062"}, {"caller_nid": "pl_plan_put_plan_side_contracts", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2072"}, {"caller_nid": "pl_plan_create_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2087"}, {"caller_nid": "pl_plan_create_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2087"}, {"caller_nid": "pl_plan_create_plan", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2093"}, {"caller_nid": "pl_plan_create_plan", "callee": "PlPlan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2095"}, {"caller_nid": "pl_plan_create_plan", "callee": "generate_uuid", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2096"}, {"caller_nid": "pl_plan_create_plan", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2142"}, {"caller_nid": "pl_plan_create_plan", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2146"}, {"caller_nid": "pl_plan_create_plan", "callee": "build_plan_product", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2147"}, {"caller_nid": "pl_plan_create_plan", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2156"}, {"caller_nid": "pl_plan_create_plan", "callee": "calc_plan_total_amount", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2158"}, {"caller_nid": "pl_plan_create_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2160"}, {"caller_nid": "pl_plan_create_plan", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2161"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2172"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2172"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2173"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2173"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "uses_multi_stop_payload", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2175"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "validate_draft_min_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2183"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "validate_plan_stops_write", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2189"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "collect_stop_qty_warnings", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2196"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "validate_plan_stops_write", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2203"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "collect_stop_qty_warnings", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2210"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "validate_create_full", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2212"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "validate_plan_party_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2213"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2230"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "bool", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2231"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2232"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "PlPlan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2234"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "generate_uuid", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2235"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "resolve_follow_status_on_save", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2242"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "calc_plan_total_amount", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2278"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2285"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "flush", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2286"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "sync_plan_legacy_from_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2289"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2292"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "resolve_hazard_flags_from_crm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2293"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "model_copy", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2298"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "build_plan_product", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2299"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2308"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2309"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "replace_plan_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2312"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "safe_upsert_prefs_from_plan_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2322"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "replace_plan_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2331"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "apply_vehicle_prefill_to_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2342"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2352"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2353"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2355"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2360"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2360"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "attach_plan_stops_to_item", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2361"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2379"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2379"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2383"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2383"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2383"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2388"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "assert_contract_selectable_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2390"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "PlPlan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2398"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "generate_uuid", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2399"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2413"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2416"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2418"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2433"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2437"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2437"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2437"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2446"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "resolve_hazard_flags_from_crm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2447"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "PlPlanProduct", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2452"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "generate_uuid", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2453"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2472"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2474"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2475"}, {"caller_nid": "pl_plan_get_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2490"}, {"caller_nid": "pl_plan_get_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2490"}, {"caller_nid": "pl_plan_get_plan", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2491"}, {"caller_nid": "pl_plan_get_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2494"}, {"caller_nid": "pl_plan_get_plan", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2494"}, {"caller_nid": "pl_plan_get_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2494"}, {"caller_nid": "pl_plan_get_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2494"}, {"caller_nid": "pl_plan_get_plan", "callee": "fetch_hazard_flags_map", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2503"}, {"caller_nid": "pl_plan_get_plan", "callee": "load_brand_qtys_by_plan_product_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2508"}, {"caller_nid": "pl_plan_get_plan", "callee": "resolve_hazard_flags_from_crm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2516"}, {"caller_nid": "pl_plan_get_plan", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2522"}, {"caller_nid": "pl_plan_get_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2523"}, {"caller_nid": "pl_plan_get_plan", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2525"}, {"caller_nid": "pl_plan_get_plan", "callee": "model_copy", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2529"}, {"caller_nid": "pl_plan_get_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2536"}, {"caller_nid": "pl_plan_get_plan", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2538"}, {"caller_nid": "pl_plan_get_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2540"}, {"caller_nid": "pl_plan_get_plan", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2540"}, {"caller_nid": "pl_plan_get_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2545"}, {"caller_nid": "pl_plan_get_plan", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2545"}, {"caller_nid": "pl_plan_get_plan", "callee": "attach_plan_stops_to_item", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2546"}, {"caller_nid": "pl_plan_get_plan", "callee": "user_can_view_archive_prices", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2547"}, {"caller_nid": "pl_plan_get_plan", "callee": "mask_plan_with_products_prices", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2548"}, {"caller_nid": "pl_plan_update_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2563"}, {"caller_nid": "pl_plan_update_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2563"}, {"caller_nid": "pl_plan_update_plan", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2564"}, {"caller_nid": "pl_plan_update_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2567"}, {"caller_nid": "pl_plan_update_plan", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2569"}, {"caller_nid": "pl_plan_update_plan", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2569"}, {"caller_nid": "pl_plan_update_plan", "callee": "assert_can_save_as_draft", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2572"}, {"caller_nid": "pl_plan_update_plan", "callee": "validate_draft_min_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2573"}, {"caller_nid": "pl_plan_update_plan", "callee": "uses_multi_stop_payload", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2584"}, {"caller_nid": "pl_plan_update_plan", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2590"}, {"caller_nid": "pl_plan_update_plan", "callee": "items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2603"}, {"caller_nid": "pl_plan_update_plan", "callee": "setattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2604"}, {"caller_nid": "pl_plan_update_plan", "callee": "validate_plan_stops_write", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2625"}, {"caller_nid": "pl_plan_update_plan", "callee": "collect_stop_qty_warnings", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2633"}, {"caller_nid": "pl_plan_update_plan", "callee": "sync_plan_legacy_from_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2636"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2642"}, {"caller_nid": "pl_plan_update_plan", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2642"}, {"caller_nid": "pl_plan_update_plan", "callee": "validate_plan_stops_write", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2646"}, {"caller_nid": "pl_plan_update_plan", "callee": "collect_stop_qty_warnings", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2654"}, {"caller_nid": "pl_plan_update_plan", "callee": "sync_plan_legacy_from_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2655"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2662"}, {"caller_nid": "pl_plan_update_plan", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2662"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2667"}, {"caller_nid": "pl_plan_update_plan", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2667"}, {"caller_nid": "pl_plan_update_plan", "callee": "validate_plan_party_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2677"}, {"caller_nid": "pl_plan_update_plan", "callee": "replace_plan_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2688"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2698"}, {"caller_nid": "pl_plan_update_plan", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2698"}, {"caller_nid": "pl_plan_update_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2707"}, {"caller_nid": "pl_plan_update_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2707"}, {"caller_nid": "pl_plan_update_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2707"}, {"caller_nid": "pl_plan_update_plan", "callee": "collect_hazard_product_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2716"}, {"caller_nid": "pl_plan_update_plan", "callee": "set", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2726"}, {"caller_nid": "pl_plan_update_plan", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2728"}, {"caller_nid": "pl_plan_update_plan", "callee": "resolve_hazard_flags_from_crm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2729"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2737"}, {"caller_nid": "pl_plan_update_plan", "callee": "model_copy", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2742"}, {"caller_nid": "pl_plan_update_plan", "callee": "resolve_plan_product_id_for_upsert", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2751"}, {"caller_nid": "pl_plan_update_plan", "callee": "apply_plan_product_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2757"}, {"caller_nid": "pl_plan_update_plan", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2764"}, {"caller_nid": "pl_plan_update_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2765"}, {"caller_nid": "pl_plan_update_plan", "callee": "build_plan_product", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2767"}, {"caller_nid": "pl_plan_update_plan", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2777"}, {"caller_nid": "pl_plan_update_plan", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2778"}, {"caller_nid": "pl_plan_update_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2779"}, {"caller_nid": "pl_plan_update_plan", "callee": "collect_hazard_product_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2786"}, {"caller_nid": "pl_plan_update_plan", "callee": "clear_hazard_cert_ready", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2788"}, {"caller_nid": "pl_plan_update_plan", "callee": "calc_plan_total_amount", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2790"}, {"caller_nid": "pl_plan_update_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2793"}, {"caller_nid": "pl_plan_update_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2793"}, {"caller_nid": "pl_plan_update_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2793"}, {"caller_nid": "pl_plan_update_plan", "callee": "sync_transport_prefill_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2804"}, {"caller_nid": "pl_plan_update_plan", "callee": "clear_draft_transport_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2814"}, {"caller_nid": "pl_plan_update_plan", "callee": "replace_plan_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2822"}, {"caller_nid": "pl_plan_update_plan", "callee": "safe_upsert_prefs_from_plan_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2832"}, {"caller_nid": "pl_plan_update_plan", "callee": "resolve_follow_status_on_save", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2842"}, {"caller_nid": "pl_plan_update_plan", "callee": "sync_linked_dibang_dates_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2847"}, {"caller_nid": "pl_plan_update_plan", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2862"}, {"caller_nid": "pl_plan_update_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2862"}, {"caller_nid": "pl_plan_update_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2862"}, {"caller_nid": "pl_plan_update_plan", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2873"}, {"caller_nid": "pl_plan_update_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2873"}, {"caller_nid": "pl_plan_update_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2873"}, {"caller_nid": "pl_plan_update_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2882"}, {"caller_nid": "pl_plan_update_plan", "callee": "StopDibangOption", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2883"}, {"caller_nid": "pl_plan_update_plan", "callee": "bool", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2886"}, {"caller_nid": "pl_plan_update_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2890"}, {"caller_nid": "pl_plan_update_plan", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2890"}, {"caller_nid": "pl_plan_update_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2890"}, {"caller_nid": "pl_plan_update_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2890"}, {"caller_nid": "pl_plan_update_plan", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2896"}, {"caller_nid": "pl_plan_update_plan", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2896"}, {"caller_nid": "pl_plan_update_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2900"}, {"caller_nid": "pl_plan_update_plan", "callee": "StopDibangOption", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2901"}, {"caller_nid": "pl_plan_update_plan", "callee": "bool", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2904"}, {"caller_nid": "pl_plan_update_plan", "callee": "upsert_stop_dibang_links", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2909"}, {"caller_nid": "pl_plan_update_plan", "callee": "rollback", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2919"}, {"caller_nid": "pl_plan_update_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2920"}, {"caller_nid": "pl_plan_update_plan", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2920"}, {"caller_nid": "pl_plan_update_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2921"}, {"caller_nid": "pl_plan_update_plan", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2922"}, {"caller_nid": "pl_plan_update_plan", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2923"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2928"}, {"caller_nid": "pl_plan_update_plan", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2928"}, {"caller_nid": "pl_plan_update_plan", "callee": "attach_plan_stops_to_item", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2929"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2941"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2941"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2942"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "update_plan_product_certs", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2943"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2950"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2952"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2952"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2952"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2952"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2960"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2973"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2973"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2974"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "set_hazard_cert_ready", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2975"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2982"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2984"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2984"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2984"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2984"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2992"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3005"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3005"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "set_plan_erp_entered", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3006"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3013"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3015"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3015"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3015"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3015"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3023"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3025"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "load_plan_document_attachments_by_plan_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3025"}, {"caller_nid": "pl_plan_build_driver_url", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3034"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3045"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3045"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3046"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "PlanArrangeInfoRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3048"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3059"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3059"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3059"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3070"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "plan_requires_site_link", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3072"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "build_site_records_for_arranged_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3073"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3081"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3081"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3081"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3094"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3094"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3094"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3102"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3102"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3102"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3110"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "build_transport_inventory_link_read", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3111"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "get_active_io_order_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3127"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3132"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "TransportIoOrderBrief", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3133"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "build_io_order_site_url", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3138"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "PlanArrangeInfoRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3142"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3164"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3164"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3165"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3168"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3170"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3172"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3176"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3177"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3188"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3188"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3189"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3192"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3194"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3198"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3199"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "get_user_menu_codes", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3226"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3228"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3230"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3232"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3237"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3237"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3238"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3242"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3243"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3260"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3260"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3261"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3264"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3267"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3271"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3271"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3271"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "revoke_regeneratable_dibang_for_transport", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3281"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3288"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3288"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "revoke_site_links_for_transport", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3289"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "void_io_orders_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3298"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3302"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "normalize_optional_reason", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3303"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3310"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3311"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "user_can_archive_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3328"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3329"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3330"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3330"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3331"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3334"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3336"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "apply_archive_stop_quantities", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3340"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "sync_plan_products_from_stop_archive", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3349"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "apply_archive_brand_qtys_only", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3353"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "apply_archive_product_quantities", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3361"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "apply_archive_freight", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3366"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "apply_archive_stop_feedback_attachments", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3376"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "record_plan_change", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3387"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3397"}, {"caller_nid": "pl_plan_archive_plan", "callee": "user_can_archive_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3408"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3409"}, {"caller_nid": "pl_plan_archive_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3410"}, {"caller_nid": "pl_plan_archive_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3410"}, {"caller_nid": "pl_plan_archive_plan", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3411"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3414"}, {"caller_nid": "pl_plan_archive_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3420"}, {"caller_nid": "pl_plan_archive_plan", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3420"}, {"caller_nid": "pl_plan_archive_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3420"}, {"caller_nid": "pl_plan_archive_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3420"}, {"caller_nid": "pl_plan_archive_plan", "callee": "validate_hazard_cert_ready_for_transport", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3429"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3433"}, {"caller_nid": "pl_plan_archive_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3438"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3444"}, {"caller_nid": "pl_plan_archive_plan", "callee": "collect_archive_line_overages", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3450"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3458"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_stop_quantities", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3466"}, {"caller_nid": "pl_plan_archive_plan", "callee": "sync_plan_products_from_stop_archive", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3474"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_brand_qtys_only", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3478"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_inventory_for_plan_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3485"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3494"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_product_quantities", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3495"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_inventory_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3498"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_freight", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3506"}, {"caller_nid": "pl_plan_archive_plan", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3509"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3511"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_stop_feedback_attachments", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3514"}, {"caller_nid": "pl_plan_archive_plan", "callee": "record_plan_change", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3529"}, {"caller_nid": "pl_plan_archive_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3539"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3550"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3550"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3551"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "apply_plan_driver_feedback", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3552"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "record_plan_change", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3559"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3570"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3582"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3582"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3583"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "apply_plan_site_feedback", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3584"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3592"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "record_plan_change", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3593"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3604"}, {"caller_nid": "pl_plan_get_inbound_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3619"}, {"caller_nid": "pl_plan_get_inbound_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3619"}, {"caller_nid": "pl_plan_get_inbound_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3620"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3631"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3631"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3632"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3634"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3636"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3639"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3655"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3655"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3656"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "isoformat", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3657"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "get_delivery_slip_print_context", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3659"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3668"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3668"}, {"caller_nid": "pl_plan_get_delivery_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3677"}, {"caller_nid": "pl_plan_get_delivery_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3677"}, {"caller_nid": "pl_plan_get_delivery_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3678"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3689"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3689"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3690"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3692"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3694"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3697"}, {"caller_nid": "pl_plan_get_subpack_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3711"}, {"caller_nid": "pl_plan_get_subpack_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3711"}, {"caller_nid": "pl_plan_get_subpack_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3712"}, {"caller_nid": "pl_plan_save_subpack_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3723"}, {"caller_nid": "pl_plan_save_subpack_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3723"}, {"caller_nid": "pl_plan_save_subpack_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3724"}, {"caller_nid": "pl_plan_save_subpack_slip_template", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3726"}, {"caller_nid": "pl_plan_save_subpack_slip_template", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3729"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3738"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3738"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3739"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3741"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3744"}, {"caller_nid": "pl_plan_delete_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3759"}, {"caller_nid": "pl_plan_delete_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3759"}, {"caller_nid": "pl_plan_delete_plan", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3760"}, {"caller_nid": "pl_plan_delete_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3763"}, {"caller_nid": "pl_plan_delete_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3765"}, {"caller_nid": "pl_plan_delete_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3767"}, {"caller_nid": "pl_plan_delete_plan", "callee": "assert_row_deletable_by_creator", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3769"}, {"caller_nid": "pl_plan_delete_plan", "callee": "user_info_from_context", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3769"}, {"caller_nid": "pl_plan_delete_plan", "callee": "update", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3773"}, {"caller_nid": "pl_plan_delete_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3773"}, {"caller_nid": "pl_plan_delete_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3773"}, {"caller_nid": "pl_plan_delete_plan", "callee": "update", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3779"}, {"caller_nid": "pl_plan_delete_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3779"}, {"caller_nid": "pl_plan_delete_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3779"}, {"caller_nid": "pl_plan_delete_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3785"}, {"caller_nid": "pl_plan_get_plan", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3795"}, {"caller_nid": "pl_plan_get_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3795"}, {"caller_nid": "pl_plan_get_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3795"}, {"caller_nid": "pl_plan_get_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3804"}, {"caller_nid": "pl_plan_get_plan", "callee": "assert_pl_row_in_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3805"}]} \ No newline at end of file diff --git a/backend/graphify-out/cache/ast/edb32ce633b59fc527dd39332e64632d5a7ce00f26d3f00de5dab59da0837711.json b/backend/graphify-out/cache/ast/edb32ce633b59fc527dd39332e64632d5a7ce00f26d3f00de5dab59da0837711.json new file mode 100644 index 000000000..149140655 --- /dev/null +++ b/backend/graphify-out/cache/ast/edb32ce633b59fc527dd39332e64632d5a7ce00f26d3f00de5dab59da0837711.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "label": "plan.py", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1"}, {"id": "pl_plan_resolve_list_product_display", "label": "_resolve_list_product_display()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L196"}, {"id": "pl_plan_resolve_create_date", "label": "_resolve_create_date()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L212"}, {"id": "pl_plan_generate_plan_no", "label": "_generate_plan_no()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L216"}, {"id": "pl_plan_format_subpack_slip_no", "label": "_format_subpack_slip_no()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L248"}, {"id": "pl_plan_normalize_subpack_slip_no", "label": "_normalize_subpack_slip_no()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L252"}, {"id": "pl_plan_subpack_slip_no_seq", "label": "_subpack_slip_no_seq()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L277"}, {"id": "pl_plan_ensure_subpack_slip_no", "label": "_ensure_subpack_slip_no()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L285"}, {"id": "pl_plan_determine_plan_type", "label": "_determine_plan_type()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L317"}, {"id": "pl_plan_get_plan_type_label", "label": "_get_plan_type_label()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L322"}, {"id": "pl_plan_generate_notify_message", "label": "_generate_notify_message()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L331"}, {"id": "pl_plan_parse_status_csv", "label": "_parse_status_csv()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L351"}, {"id": "pl_plan_apply_follow_status_filter", "label": "_apply_follow_status_filter()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L357"}, {"id": "pl_plan_apply_exclude_follow_status_filter", "label": "_apply_exclude_follow_status_filter()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L366"}, {"id": "pl_plan_merge_query", "label": "_merge_query()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L375"}, {"id": "pl_plan_param_get", "label": "_param_get()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L385"}, {"id": "pl_plan_filters_from_params", "label": "_filters_from_params()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L392"}, {"id": "pl_plan_body_to_params", "label": "_body_to_params()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L505"}, {"id": "pl_plan_plancolumnfacetbody", "label": "PlanColumnFacetBody", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L516"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "pl_plan_truthy_param", "label": "_truthy_param()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L529"}, {"id": "pl_plan_build_plan_facet_base_query", "label": "_build_plan_facet_base_query()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L537"}, {"id": "pl_plan_plan_column_facet_values", "label": "plan_column_facet_values()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L626"}, {"id": "pl_plan_list_plans", "label": "list_plans()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L788"}, {"id": "pl_plan_normalize_plan_export_columns", "label": "_normalize_plan_export_columns()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1111"}, {"id": "pl_plan_plan_list_export_filename_stem", "label": "_plan_list_export_filename_stem()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1121"}, {"id": "pl_plan_plan_list_export_sheet_title", "label": "_plan_list_export_sheet_title()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1132"}, {"id": "pl_plan_format_plan_list_export_brand", "label": "_format_plan_list_export_brand()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1141"}, {"id": "pl_plan_format_export_date_text", "label": "_format_export_date_text()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1148"}, {"id": "pl_plan_format_stop_address_time", "label": "_format_stop_address_time()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1155"}, {"id": "pl_plan_format_stop_dibang_label", "label": "_format_stop_dibang_label()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1163"}, {"id": "pl_plan_apply_plan_list_export_labels", "label": "_apply_plan_list_export_labels()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1179"}, {"id": "pl_plan_apply_plan_list_export_segment_stop_fields", "label": "_apply_plan_list_export_segment_stop_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1192"}, {"id": "pl_plan_blank_plan_list_export_stop_fields", "label": "_blank_plan_list_export_stop_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1246"}, {"id": "pl_plan_blank_plan_list_export_product_fields", "label": "_blank_plan_list_export_product_fields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1258"}, {"id": "pl_plan_index_plan_products_for_list_export", "label": "_index_plan_products_for_list_export()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1269"}, {"id": "pl_plan_lookup_plan_list_export_plan_product", "label": "_lookup_plan_list_export_plan_product()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1284"}, {"id": "pl_plan_fill_plan_list_export_legacy_product", "label": "_fill_plan_list_export_legacy_product()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1298"}, {"id": "pl_plan_fill_plan_list_export_segment_product", "label": "_fill_plan_list_export_segment_product()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1321"}, {"id": "pl_plan_build_plan_list_export_rows", "label": "_build_plan_list_export_rows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1359"}, {"id": "pl_plan_load_transports_by_id", "label": "_load_transports_by_id()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1492"}, {"id": "pl_plan_planexportbody", "label": "PlanExportBody", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1507"}, {"id": "pl_plan_export_plans", "label": "export_plans()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1539"}, {"id": "pl_plan_count_plans_by_contract", "label": "count_plans_by_contract()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1685"}, {"id": "pl_plan_get_contract_product_arrange_qty", "label": "get_contract_product_arrange_qty()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1734"}, {"id": "pl_plan_batch_contract_product_arrange_qty", "label": "batch_contract_product_arrange_qty()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1759"}, {"id": "pl_plan_list_contract_gaps", "label": "list_contract_gaps()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1781"}, {"id": "pl_plan_contract_gap_export_base", "label": "_contract_gap_export_base()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1857"}, {"id": "pl_plan_contract_gap_row_gap_type", "label": "_contract_gap_row_gap_type()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1892"}, {"id": "pl_plan_build_contract_gap_export_rows", "label": "build_contract_gap_export_rows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1905"}, {"id": "pl_plan_contractgapexportbody", "label": "ContractGapExportBody", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1955"}, {"id": "pl_plan_export_contract_gaps", "label": "export_contract_gaps()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1970"}, {"id": "pl_plan_put_plan_stop_contracts", "label": "put_plan_stop_contracts()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2011"}, {"id": "pl_plan_put_plan_side_contracts", "label": "put_plan_side_contracts()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2036"}, {"id": "pl_plan_create_plan", "label": "create_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2066"}, {"id": "pl_plan_create_plan_full", "label": "create_plan_full()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2150"}, {"id": "pl_plan_create_from_contract", "label": "create_from_contract()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2355"}, {"id": "pl_plan_get_plan", "label": "get_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2469"}, {"id": "pl_plan_update_plan", "label": "update_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2541"}, {"id": "pl_plan_patch_plan_product_certs", "label": "patch_plan_product_certs()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2918"}, {"id": "pl_plan_patch_plan_hazard_cert_ready", "label": "patch_plan_hazard_cert_ready()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2950"}, {"id": "pl_plan_patch_plan_erp_entered", "label": "patch_plan_erp_entered()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2982"}, {"id": "pl_plan_build_driver_url", "label": "_build_driver_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3017"}, {"id": "pl_plan_get_plan_arrange_info", "label": "get_plan_arrange_info()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3023"}, {"id": "pl_plan_mark_plan_wait_notice", "label": "mark_plan_wait_notice()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3142"}, {"id": "pl_plan_cancel_plan_wait_notice", "label": "cancel_plan_wait_notice()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3166"}, {"id": "pl_plan_force_plan_follow_status", "label": "force_plan_follow_status()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3202"}, {"id": "pl_plan_cancel_plan", "label": "cancel_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3237"}, {"id": "pl_plan_archive_plan_draft", "label": "archive_plan_draft()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3305"}, {"id": "pl_plan_archive_plan", "label": "archive_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3386"}, {"id": "pl_plan_update_plan_driver_feedback", "label": "update_plan_driver_feedback()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3528"}, {"id": "pl_plan_update_plan_site_feedback", "label": "update_plan_site_feedback()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3559"}, {"id": "pl_plan_get_inbound_slip_template", "label": "get_inbound_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3598"}, {"id": "pl_plan_save_inbound_slip_template", "label": "save_inbound_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3609"}, {"id": "pl_plan_get_print_delivery_slip", "label": "get_print_delivery_slip()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3632"}, {"id": "pl_plan_get_delivery_slip_template", "label": "get_delivery_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3656"}, {"id": "pl_plan_save_delivery_slip_template", "label": "save_delivery_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3667"}, {"id": "pl_plan_get_subpack_slip_template", "label": "get_subpack_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3690"}, {"id": "pl_plan_save_subpack_slip_template", "label": "save_subpack_slip_template()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3701"}, {"id": "pl_plan_delete_plan", "label": "delete_plan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3738"}, {"id": "pl_plan_rationale_202", "label": "\u5217\u8868\u5c55\u793a\u7528\uff1a\u4f18\u5148 CRM \u6807\u51c6\u540d\uff0c\u5e76\u8fd4\u56de\u53cd\u63a8\u522b\u540d\uff08\u8be6\u60c5\u4ecd\u8fd4\u56de\u5e93\u5185 product_name\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L202"}, {"id": "pl_plan_rationale_217", "label": "\u751f\u6210\u8ba1\u5212\u7f16\u53f7 POYYYYMMDD###\uff08\u5f53\u65e5 3 \u4f4d\u5e8f\u53f7\uff0c\u6bcf\u65e5\u91cd\u7f6e\uff09", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L217"}, {"id": "pl_plan_rationale_253", "label": "\u5c06\u5386\u53f2\u5206\u88c5\u5355\u53f7\u7edf\u4e00\u4e3a NO:SXFZYYYYMMDD-###", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L253"}, {"id": "pl_plan_rationale_286", "label": "\u5206\u914d\u5206\u88c5\u5355\u53f7 NO:SXFZYYYYMMDD-###\uff08\u6309\u79df\u6237\u6bcf\u65e5\u9012\u589e\uff09", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L286"}, {"id": "pl_plan_rationale_517", "label": "\u8fd0\u8f93\u8ba1\u5212\u5217\u5934\u53ef\u9009\u503c\uff08\u53bb\u91cd\uff09\u3002\u989d\u5916\u5b57\u6bb5\u4e0e\u5217\u8868\u8fc7\u6ee4\u540c\u540d\uff0c\u7528\u4e8e Excel \u7ea7\u8054\u4e0a\u4e0b\u6587\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L517"}, {"id": "pl_plan_rationale_544", "label": "\u4e0e\u5217\u8868\u540c\u6e90\u7684\u8ba1\u5212\u4e0a\u4e0b\u6587\u67e5\u8be2\uff08\u5df2\u6392\u9664\u5f53\u524d facet \u5217\u81ea\u8eab\u6761\u4ef6\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L544"}, {"id": "pl_plan_rationale_631", "label": "\u8fd0\u8f93\u8ba1\u5212\u5217\u5934\u53ef\u9009\u503c\uff1a\u5728\u5217\u8868\u4e0a\u4e0b\u6587\uff08\u6392\u9664\u672c\u5217\uff09\u4e0b\u53bb\u91cd\uff0c\u5bf9\u9f50 Excel \u7ea7\u8054\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L631"}, {"id": "pl_plan_rationale_1142", "label": "\u4e0e\u5217\u8868/\u8868\u5355\u4e00\u81f4\uff1a\u4ec5\u6307\u5b9a\u54c1\u724c\u65f6\u5bfc\u51fa\u54c1\u724c\u540d\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1142"}, {"id": "pl_plan_rationale_1200", "label": "\u6309\u5f53\u524d\u5bfc\u51fa\u884c\u6240\u5c5e\u6bb5\u586b\u5199\u88c5/\u9001\u4fa7\u5b57\u6bb5\uff1b\u5bf9\u4fa7\u7559\u7a7a\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1200"}, {"id": "pl_plan_rationale_1366", "label": "\u8ba1\u5212\u5217\u8868\u5bfc\u51fa\uff1a\u6709\u6bb5\u65f6\u6309\u6bb5\u6b21\u00d7\u4ea7\u54c1\u5c55\u5f00\uff1b\u65e0\u6bb5\u65f6\u56de\u9000\u8ba1\u5212\u7ea7\u4ea7\u54c1\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1366"}, {"id": "pl_plan_rationale_1544", "label": "\u5bfc\u51fa\u8ba1\u5212\u5217\u8868\uff08\u5f53\u524d\u7b5b\u9009\u5168\u91cf\uff0c\u6216 ids \u5df2\u9009\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1544"}, {"id": "pl_plan_rationale_1743", "label": "\u8868\u5355\u53ef\u5b89\u6392\u6570\u91cf + \u95ee\u53f7\u5f39\u7a97\uff1a\u5408\u540c\u7528\u91cf\u4e0e\u5df2\u5b89\u6392\u8ba1\u5212\u5217\u8868\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1743"}, {"id": "pl_plan_rationale_1764", "label": "\u6279\u91cf\u53ef\u5b89\u6392\u6570\u91cf\u6458\u8981\uff08\u4e0d\u542b\u5df2\u5b89\u6392\u8ba1\u5212\u660e\u7ec6\uff09\u3002 \u4ec5\u4f9b\u8fd0\u8f93\u8ba1\u5212\u65b0\u589e/\u7f16\u8f91/\u8c03\u6574\u8fd0\u8f93\u8868\u5355\u6253\u5f00\u65f6\u9884\u53d6\uff0c\u95ee\u53f7\u5f39\u7a97\u4ecd\u8d70\u5355\u6761\u8be6\u60c5\u63a5\u53e3\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1764"}, {"id": "pl_plan_rationale_1858", "label": "\u8ba1\u5212\u7ea7\u5b57\u6bb5\uff1b\u5355\u636e\u7c7b\u578b\u3001\u8ddf\u8fdb\u72b6\u6001\u6cbf\u7528\u5217\u8868\u5bfc\u51fa\u7684\u4e2d\u6587\u6807\u7b7e\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1858"}, {"id": "pl_plan_rationale_1893", "label": "\u672c\u884c\u6bb5\u7f3a\u53e3\uff1a\u88c5\u8d27\u7f3a\u4f9b\u65b9\u5408\u540c\uff0c\u9001\u8d27\u7f3a\u9700\u65b9\u5408\u540c\uff1b\u65e0\u7f3a\u53e3\u7559\u7a7a\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1893"}, {"id": "pl_plan_rationale_1909", "label": "\u628a\u6709\u7f3a\u53e3\u7684\u8ba1\u5212\u6309\u6bb5\u6b21\u00d7\u4ea7\u54c1\u5c55\u5f00\uff1b\u65e0\u7f3a\u53e3\u4fa7\u4ecd\u5bfc\u51fa\uff0cgapType \u4e3a\u7a7a\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1909"}, {"id": "pl_plan_rationale_2155", "label": "\u521b\u5efa\u8fd0\u8f93\u8ba1\u5212\uff08\u5b8c\u6574\u8868\u5355\uff1a\u4f9b\u65b9/\u9700\u65b9 + \u4ea7\u54c1\u5e93\u4ea7\u54c1 + \u53ef\u9009\u9884\u9009\u8f66\u8f86\uff0c\u4e0d\u81ea\u52a8\u5b89\u6392\u8fd0\u8f93\uff09", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2155"}, {"id": "pl_plan_rationale_2924", "label": "\u66f4\u65b0\u8ba1\u5212\u5371\u5316\u54c1\u4ea7\u54c1\u8bc1\u4e66\uff08\u8d2d\u4e70\u8bc1/\u8fd0\u8f93\u8bc1/\u5408\u6cd5\u4f7f\u7528\u8bc1\u660e\uff0c\u4e0d\u89e6\u53d1\u5b89\u6392\u8fd0\u8f93\uff09", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2924"}, {"id": "pl_plan_rationale_3028", "label": "\u83b7\u53d6\u8ba1\u5212\u5df2\u5b89\u6392\u8fd0\u8f93\u540e\u7684\u53f8\u673a\u94fe\u63a5\u4e0e\u5730\u78c5\u51fa\u5165\u5e93\u5173\u8054\uff08\u4f9b\u67e5\u770b\u5f39\u7a97\u590d\u5236\u7b80\u8ff0/\u4e8c\u7ef4\u7801\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3028"}, {"id": "pl_plan_rationale_3208", "label": "\u5f3a\u5236\u4fee\u6539\u8ddf\u8fdb\u72b6\u6001\uff08\u4ec5\u6539\u5b57\u6bb5\uff0c\u4e0d\u4f5c\u5e9f\u8054\u52a8\u3001\u4e0d\u8865\u8fd0\u8f93\u5b89\u6392\uff09\u3002\u9700\u6743\u9650 pl:plan:force-follow-status\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3208"}, {"id": "pl_plan_rationale_3243", "label": "\u4f5c\u5e9f\u8fd0\u8f93\u8ba1\u5212\uff1a\u53d6\u6d88\u8ddf\u8fdb\u72b6\u6001\u3001\u4f5c\u5e9f\u5173\u8054\u5730\u78c5\u51fa\u5165\u5e93\u5355\u3001\u53d6\u6d88\u8fd0\u8f93\u5355\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3243"}, {"id": "pl_plan_rationale_3638", "label": "\u6309\u9001\u8d27\u5ba2\u6237\u805a\u5408\u9001(\u63d0)\u8d27\u5355\u6253\u5370\u6570\u636e\uff1b\u4e0d\u4f20 customerId \u65f6\u4ec5\u8fd4\u56de\u5ba2\u6237\u9009\u9879\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3638"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "collections", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L7", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L8", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "sqlalchemy", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L9", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "sqlalchemy_orm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L10", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_config", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L12", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_database", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L13", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_db_auth", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L14", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_delete_guard", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L15", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_menu_guard", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L16", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_data_scope", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L17", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_list_sort", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L18", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_arrange_copy_flags", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L19", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_tenant_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L20", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_utils_excel_export", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L21", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_core_utils", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L28", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_models_crm_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L29", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_models_db_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L30", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_models_pl_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_schemas_pl", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L44", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_schemas_pl_cancel_reason", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L45", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_schemas_pl_plan", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L46", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_column_facet_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L76", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_contract_gap", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L77", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_brand_archive", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L86", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_product_display", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L87", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_schemas_pl_transport", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L91", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_dibang_bridge_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L97", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_inventory_link_read", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L103", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_io_order_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L104", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_internal_customer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L105", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_site_link_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L106", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_transport_site_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L107", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_inventory_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L108", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_archive_stop_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L112", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_archive_export", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L117", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_price_mask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L126", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_list_attachments", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L131", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_print_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_stop_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L133", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_customer_stop_pref_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_list_export_segments", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L143", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_list_filters", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "app_services_pl_plan_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L155", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_resolve_list_product_display", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L196", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_resolve_create_date", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L212", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_generate_plan_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_format_subpack_slip_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L248", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_normalize_subpack_slip_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L252", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_subpack_slip_no_seq", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L277", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_ensure_subpack_slip_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L285", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_determine_plan_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L317", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_plan_type_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L322", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_generate_notify_message", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L331", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_parse_status_csv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L351", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_apply_follow_status_filter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L357", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_apply_exclude_follow_status_filter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L366", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_merge_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L375", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_param_get", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L385", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_filters_from_params", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L392", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_body_to_params", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L505", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_plancolumnfacetbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L516", "weight": 1.0}, {"source": "pl_plan_plancolumnfacetbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L516", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_truthy_param", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L529", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_build_plan_facet_base_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L537", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_plan_column_facet_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L626", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_list_plans", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L788", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_normalize_plan_export_columns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1111", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_plan_list_export_filename_stem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1121", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_plan_list_export_sheet_title", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_format_plan_list_export_brand", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_format_export_date_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1148", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_format_stop_address_time", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1155", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_format_stop_dibang_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1163", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_apply_plan_list_export_labels", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1179", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_apply_plan_list_export_segment_stop_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1192", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_blank_plan_list_export_stop_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1246", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_blank_plan_list_export_product_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_index_plan_products_for_list_export", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1269", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_lookup_plan_list_export_plan_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1284", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_fill_plan_list_export_legacy_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1298", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_fill_plan_list_export_segment_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1321", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_build_plan_list_export_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1359", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_load_transports_by_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1492", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_planexportbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1507", "weight": 1.0}, {"source": "pl_plan_planexportbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1507", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_export_plans", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1539", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_count_plans_by_contract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1685", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_contract_product_arrange_qty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1734", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_batch_contract_product_arrange_qty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1759", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_list_contract_gaps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1781", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_contract_gap_export_base", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1857", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_contract_gap_row_gap_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1892", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_build_contract_gap_export_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1905", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_contractgapexportbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1955", "weight": 1.0}, {"source": "pl_plan_contractgapexportbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1955", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_export_contract_gaps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1970", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_put_plan_stop_contracts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2011", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_put_plan_side_contracts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2036", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_create_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2066", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_create_plan_full", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2150", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_create_from_contract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2355", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2469", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_update_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2541", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_patch_plan_product_certs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2918", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_patch_plan_hazard_cert_ready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2950", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_patch_plan_erp_entered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2982", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_build_driver_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3017", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_plan_arrange_info", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3023", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_mark_plan_wait_notice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_cancel_plan_wait_notice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3166", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_force_plan_follow_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3202", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_cancel_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3237", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_archive_plan_draft", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3305", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_archive_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3386", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_update_plan_driver_feedback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3528", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_update_plan_site_feedback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3559", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_inbound_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3598", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_save_inbound_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3609", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_print_delivery_slip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3632", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_delivery_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3656", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_save_delivery_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3667", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_subpack_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3690", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_save_subpack_slip_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3701", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_ensure_subpack_slip_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3717", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_delete_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3738", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_api_pl_plan_py", "target": "pl_plan_get_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3777", "weight": 1.0}, {"source": "pl_plan_normalize_subpack_slip_no", "target": "pl_plan_format_subpack_slip_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L261", "weight": 1.0}, {"source": "pl_plan_subpack_slip_no_seq", "target": "pl_plan_normalize_subpack_slip_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L278", "weight": 1.0}, {"source": "pl_plan_ensure_subpack_slip_no", "target": "pl_plan_normalize_subpack_slip_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L289", "weight": 1.0}, {"source": "pl_plan_ensure_subpack_slip_no", "target": "pl_plan_subpack_slip_no_seq", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L310", "weight": 1.0}, {"source": "pl_plan_apply_follow_status_filter", "target": "pl_plan_parse_status_csv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L358", "weight": 1.0}, {"source": "pl_plan_apply_exclude_follow_status_filter", "target": "pl_plan_parse_status_csv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L367", "weight": 1.0}, {"source": "pl_plan_filters_from_params", "target": "pl_plan_param_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L396", "weight": 1.0}, {"source": "pl_plan_build_plan_facet_base_query", "target": "pl_plan_truthy_param", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L549", "weight": 1.0}, {"source": "pl_plan_build_plan_facet_base_query", "target": "pl_plan_param_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L550", "weight": 1.0}, {"source": "pl_plan_build_plan_facet_base_query", "target": "pl_plan_apply_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L574", "weight": 1.0}, {"source": "pl_plan_build_plan_facet_base_query", "target": "pl_plan_apply_exclude_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L578", "weight": 1.0}, {"source": "pl_plan_build_plan_facet_base_query", "target": "pl_plan_filters_from_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L609", "weight": 1.0}, {"source": "pl_plan_plan_column_facet_values", "target": "pl_plan_body_to_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L639", "weight": 1.0}, {"source": "pl_plan_plan_column_facet_values", "target": "pl_plan_build_plan_facet_base_query", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L641", "weight": 1.0}, {"source": "pl_plan_list_plans", "target": "pl_plan_apply_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L891", "weight": 1.0}, {"source": "pl_plan_list_plans", "target": "pl_plan_apply_exclude_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L892", "weight": 1.0}, {"source": "pl_plan_list_plans", "target": "pl_plan_merge_query", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L897", "weight": 1.0}, {"source": "pl_plan_list_plans", "target": "pl_plan_filters_from_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L914", "weight": 1.0}, {"source": "pl_plan_list_plans", "target": "pl_plan_resolve_list_product_display", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1007", "weight": 1.0}, {"source": "pl_plan_format_stop_address_time", "target": "pl_plan_format_export_date_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1157", "weight": 1.0}, {"source": "pl_plan_apply_plan_list_export_segment_stop_fields", "target": "pl_plan_format_stop_address_time", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1213", "weight": 1.0}, {"source": "pl_plan_apply_plan_list_export_segment_stop_fields", "target": "pl_plan_format_stop_dibang_label", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1217", "weight": 1.0}, {"source": "pl_plan_apply_plan_list_export_segment_stop_fields", "target": "pl_plan_format_export_date_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1234", "weight": 1.0}, {"source": "pl_plan_fill_plan_list_export_legacy_product", "target": "pl_plan_format_plan_list_export_brand", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1312", "weight": 1.0}, {"source": "pl_plan_fill_plan_list_export_segment_product", "target": "pl_plan_blank_plan_list_export_product_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1332", "weight": 1.0}, {"source": "pl_plan_fill_plan_list_export_segment_product", "target": "pl_plan_lookup_plan_list_export_plan_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1334", "weight": 1.0}, {"source": "pl_plan_fill_plan_list_export_segment_product", "target": "pl_plan_format_plan_list_export_brand", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1346", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_apply_plan_list_export_labels", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1412", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_blank_plan_list_export_stop_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1417", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_blank_plan_list_export_product_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1419", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_fill_plan_list_export_legacy_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1424", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_index_plan_products_for_list_export", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1433", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_apply_plan_list_export_segment_stop_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1438", "weight": 1.0}, {"source": "pl_plan_build_plan_list_export_rows", "target": "pl_plan_fill_plan_list_export_segment_product", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1445", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_apply_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1565", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_apply_exclude_follow_status_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1566", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_filters_from_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1569", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_body_to_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1570", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_load_transports_by_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1600", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_param_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1607", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_normalize_plan_export_columns", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1615", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_build_plan_list_export_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1661", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_plan_list_export_sheet_title", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1670", "weight": 1.0}, {"source": "pl_plan_export_plans", "target": "pl_plan_plan_list_export_filename_stem", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1671", "weight": 1.0}, {"source": "pl_plan_list_contract_gaps", "target": "pl_plan_merge_query", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1810", "weight": 1.0}, {"source": "pl_plan_list_contract_gaps", "target": "pl_plan_filters_from_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1822", "weight": 1.0}, {"source": "pl_plan_list_contract_gaps", "target": "pl_plan_param_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1829", "weight": 1.0}, {"source": "pl_plan_contract_gap_export_base", "target": "pl_plan_format_export_date_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1884", "weight": 1.0}, {"source": "pl_plan_build_contract_gap_export_rows", "target": "pl_plan_contract_gap_export_base", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1914", "weight": 1.0}, {"source": "pl_plan_build_contract_gap_export_rows", "target": "pl_plan_contract_gap_row_gap_type", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1940", "weight": 1.0}, {"source": "pl_plan_build_contract_gap_export_rows", "target": "pl_plan_format_export_date_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1945", "weight": 1.0}, {"source": "pl_plan_export_contract_gaps", "target": "pl_plan_body_to_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1977", "weight": 1.0}, {"source": "pl_plan_export_contract_gaps", "target": "pl_plan_filters_from_params", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1978", "weight": 1.0}, {"source": "pl_plan_export_contract_gaps", "target": "pl_plan_param_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1985", "weight": 1.0}, {"source": "pl_plan_export_contract_gaps", "target": "pl_plan_build_contract_gap_export_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1999", "weight": 1.0}, {"source": "pl_plan_create_plan", "target": "pl_plan_generate_plan_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2074", "weight": 1.0}, {"source": "pl_plan_create_plan", "target": "pl_plan_resolve_create_date", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2083", "weight": 1.0}, {"source": "pl_plan_create_plan_full", "target": "pl_plan_generate_plan_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2211", "weight": 1.0}, {"source": "pl_plan_create_plan_full", "target": "pl_plan_resolve_create_date", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2222", "weight": 1.0}, {"source": "pl_plan_create_from_contract", "target": "pl_plan_generate_plan_no", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2377", "weight": 1.0}, {"source": "pl_plan_create_from_contract", "target": "pl_plan_determine_plan_type", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2380", "weight": 1.0}, {"source": "pl_plan_create_from_contract", "target": "pl_plan_resolve_create_date", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2386", "weight": 1.0}, {"source": "pl_plan_get_plan_arrange_info", "target": "pl_plan_build_driver_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3055", "weight": 1.0}, {"source": "pl_plan_archive_plan_draft", "target": "pl_plan_get_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3382", "weight": 1.0}, {"source": "pl_plan_archive_plan", "target": "pl_plan_get_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3423", "weight": 1.0}, {"source": "pl_plan_update_plan_driver_feedback", "target": "pl_plan_get_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3555", "weight": 1.0}, {"source": "pl_plan_update_plan_site_feedback", "target": "pl_plan_get_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3589", "weight": 1.0}, {"source": "pl_plan_rationale_202", "target": "pl_plan_resolve_list_product_display", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L202", "weight": 1.0}, {"source": "pl_plan_rationale_217", "target": "pl_plan_generate_plan_no", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L217", "weight": 1.0}, {"source": "pl_plan_rationale_253", "target": "pl_plan_normalize_subpack_slip_no", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L253", "weight": 1.0}, {"source": "pl_plan_rationale_286", "target": "pl_plan_ensure_subpack_slip_no", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L286", "weight": 1.0}, {"source": "pl_plan_rationale_517", "target": "pl_plan_plancolumnfacetbody", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L517", "weight": 1.0}, {"source": "pl_plan_rationale_544", "target": "pl_plan_build_plan_facet_base_query", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L544", "weight": 1.0}, {"source": "pl_plan_rationale_631", "target": "pl_plan_plan_column_facet_values", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L631", "weight": 1.0}, {"source": "pl_plan_rationale_1142", "target": "pl_plan_format_plan_list_export_brand", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1142", "weight": 1.0}, {"source": "pl_plan_rationale_1200", "target": "pl_plan_apply_plan_list_export_segment_stop_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1200", "weight": 1.0}, {"source": "pl_plan_rationale_1366", "target": "pl_plan_build_plan_list_export_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1366", "weight": 1.0}, {"source": "pl_plan_rationale_1544", "target": "pl_plan_export_plans", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1544", "weight": 1.0}, {"source": "pl_plan_rationale_1743", "target": "pl_plan_get_contract_product_arrange_qty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1743", "weight": 1.0}, {"source": "pl_plan_rationale_1764", "target": "pl_plan_batch_contract_product_arrange_qty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1764", "weight": 1.0}, {"source": "pl_plan_rationale_1858", "target": "pl_plan_contract_gap_export_base", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1858", "weight": 1.0}, {"source": "pl_plan_rationale_1893", "target": "pl_plan_contract_gap_row_gap_type", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1893", "weight": 1.0}, {"source": "pl_plan_rationale_1909", "target": "pl_plan_build_contract_gap_export_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1909", "weight": 1.0}, {"source": "pl_plan_rationale_2155", "target": "pl_plan_create_plan_full", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2155", "weight": 1.0}, {"source": "pl_plan_rationale_2924", "target": "pl_plan_patch_plan_product_certs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2924", "weight": 1.0}, {"source": "pl_plan_rationale_3028", "target": "pl_plan_get_plan_arrange_info", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3028", "weight": 1.0}, {"source": "pl_plan_rationale_3208", "target": "pl_plan_force_plan_follow_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3208", "weight": 1.0}, {"source": "pl_plan_rationale_3243", "target": "pl_plan_cancel_plan", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3243", "weight": 1.0}, {"source": "pl_plan_rationale_3638", "target": "pl_plan_get_print_delivery_slip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3638", "weight": 1.0}], "raw_calls": [{"caller_nid": "pl_plan_resolve_list_product_display", "callee": "resolve_product_display_names", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L203"}, {"caller_nid": "pl_plan_resolve_create_date", "callee": "today", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L213"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "today", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L218"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L219"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L223"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L223"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L223"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "like", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L224"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L230"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "isdigit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L231"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "max", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L232"}, {"caller_nid": "pl_plan_generate_plan_no", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L232"}, {"caller_nid": "pl_plan_format_subpack_slip_no", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L249"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L254"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "match", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L258"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "groups", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L260"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L261"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "match", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L263"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "groups", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L265"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L266"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "match", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L269"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "groups", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L271"}, {"caller_nid": "pl_plan_normalize_subpack_slip_no", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L272"}, {"caller_nid": "pl_plan_subpack_slip_no_seq", "callee": "startswith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L279"}, {"caller_nid": "pl_plan_subpack_slip_no_seq", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L281"}, {"caller_nid": "pl_plan_subpack_slip_no_seq", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L282"}, {"caller_nid": "pl_plan_subpack_slip_no_seq", "callee": "isdigit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L282"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L287"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "today", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L295"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L296"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L299"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L299"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L299"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "isnot", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L302"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "max", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L310"}, {"caller_nid": "pl_plan_determine_plan_type", "callee": "determine_plan_type", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L319"}, {"caller_nid": "pl_plan_get_plan_type_label", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L328"}, {"caller_nid": "pl_plan_generate_notify_message", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L333"}, {"caller_nid": "pl_plan_generate_notify_message", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L334"}, {"caller_nid": "pl_plan_generate_notify_message", "callee": "sum", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L342"}, {"caller_nid": "pl_plan_generate_notify_message", "callee": "float", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L342"}, {"caller_nid": "pl_plan_parse_status_csv", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L354"}, {"caller_nid": "pl_plan_parse_status_csv", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L354"}, {"caller_nid": "pl_plan_parse_status_csv", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L354"}, {"caller_nid": "pl_plan_apply_follow_status_filter", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L359"}, {"caller_nid": "pl_plan_apply_follow_status_filter", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L360"}, {"caller_nid": "pl_plan_apply_follow_status_filter", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L361"}, {"caller_nid": "pl_plan_apply_follow_status_filter", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L362"}, {"caller_nid": "pl_plan_apply_follow_status_filter", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L362"}, {"caller_nid": "pl_plan_apply_exclude_follow_status_filter", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L368"}, {"caller_nid": "pl_plan_apply_exclude_follow_status_filter", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L369"}, {"caller_nid": "pl_plan_apply_exclude_follow_status_filter", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L370"}, {"caller_nid": "pl_plan_apply_exclude_follow_status_filter", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L371"}, {"caller_nid": "pl_plan_apply_exclude_follow_status_filter", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L371"}, {"caller_nid": "pl_plan_merge_query", "callee": "items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L376"}, {"caller_nid": "pl_plan_merge_query", "callee": "multi_items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L377"}, {"caller_nid": "pl_plan_filters_from_params", "callee": "build_plan_column_filters", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L393"}, {"caller_nid": "pl_plan_body_to_params", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L506"}, {"caller_nid": "pl_plan_body_to_params", "callee": "pop", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L508"}, {"caller_nid": "pl_plan_body_to_params", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L509"}, {"caller_nid": "pl_plan_body_to_params", "callee": "items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L510"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L545"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L545"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L554"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L555"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L557"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L557"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "apply_contract_gap_keyword_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L559"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L561"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L562"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "or_", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L563"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L564"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L565"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L565"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L566"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L566"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L567"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L567"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "plan_product_name_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L568"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "plan_plate_match", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L569"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L582"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "plan_has_hazard_product_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L582"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L585"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "plan_has_contract_gap_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L587"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "apply_contract_gap_type_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L592"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L592"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "apply_contract_gap_keyword_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L596"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L597"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L599"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L599"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L600"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L600"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L601"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L602"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "or_", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L603"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L604"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L604"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L605"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L605"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L611"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "apply_stock_role_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L615"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L619"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L619"}, {"caller_nid": "pl_plan_build_plan_facet_base_query", "callee": "apply_pl_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L621"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L634"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L634"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "min", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L635"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "max", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L635"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L635"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L636"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L637"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L637"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "strip_plan_facet_self_params", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L640"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "subquery", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L644"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "with_entities", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L644"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_plan_col_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L687"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_plan_col_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L689"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L691"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L693"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L695"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L697"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L701"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L701"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "select_from", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L701"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L701"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L701"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L701"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L701"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L705"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "isnot", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L708"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L713"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "like", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L713"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_finish", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L714"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L714"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "limit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L714"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L714"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "group_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L714"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L714"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L717"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "_sub_facet", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L719"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L729"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L729"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "select_from", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L729"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L729"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L730"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L731"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L731"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L736"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "isnot", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L739"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L744"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L744"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L745"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "label", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L746"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L746"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L749"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "isnot", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L750"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L755"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "like", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L755"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L756"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "like", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L756"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L758"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "group_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L758"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L759"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L759"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L761"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L761"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L762"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "group_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L762"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L763"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L763"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L765"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L765"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "sorted", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L766"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L766"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L773"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L773"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L773"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L775"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L775"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "plan_internal_contract_placeholder_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L776"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L779"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L780"}, {"caller_nid": "pl_plan_plan_column_facet_values", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L784"}, {"caller_nid": "pl_plan_list_plans", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L860"}, {"caller_nid": "pl_plan_list_plans", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L860"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L861"}, {"caller_nid": "pl_plan_list_plans", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L861"}, {"caller_nid": "pl_plan_list_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L866"}, {"caller_nid": "pl_plan_list_plans", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L866"}, {"caller_nid": "pl_plan_list_plans", "callee": "plan_ids_linked_to_contract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L869"}, {"caller_nid": "pl_plan_list_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L870"}, {"caller_nid": "pl_plan_list_plans", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L870"}, {"caller_nid": "pl_plan_list_plans", "callee": "PlanListResponse", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L873"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L874"}, {"caller_nid": "pl_plan_list_plans", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L874"}, {"caller_nid": "pl_plan_list_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L877"}, {"caller_nid": "pl_plan_list_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L879"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L880"}, {"caller_nid": "pl_plan_list_plans", "callee": "or_", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L881"}, {"caller_nid": "pl_plan_list_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L882"}, {"caller_nid": "pl_plan_list_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L883"}, {"caller_nid": "pl_plan_list_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L883"}, {"caller_nid": "pl_plan_list_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L884"}, {"caller_nid": "pl_plan_list_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L884"}, {"caller_nid": "pl_plan_list_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L885"}, {"caller_nid": "pl_plan_list_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L885"}, {"caller_nid": "pl_plan_list_plans", "callee": "plan_product_name_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L886"}, {"caller_nid": "pl_plan_list_plans", "callee": "plan_plate_match", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L887"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L895"}, {"caller_nid": "pl_plan_list_plans", "callee": "plan_has_hazard_product_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L895"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L916"}, {"caller_nid": "pl_plan_list_plans", "callee": "apply_stock_role_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L919"}, {"caller_nid": "pl_plan_list_plans", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L923"}, {"caller_nid": "pl_plan_list_plans", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L923"}, {"caller_nid": "pl_plan_list_plans", "callee": "apply_pl_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L925"}, {"caller_nid": "pl_plan_list_plans", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L928"}, {"caller_nid": "pl_plan_list_plans", "callee": "parse_sort_params", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L932"}, {"caller_nid": "pl_plan_list_plans", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L934"}, {"caller_nid": "pl_plan_list_plans", "callee": "limit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L934"}, {"caller_nid": "pl_plan_list_plans", "callee": "offset", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L934"}, {"caller_nid": "pl_plan_list_plans", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L934"}, {"caller_nid": "pl_plan_list_plans", "callee": "order_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L934"}, {"caller_nid": "pl_plan_list_plans", "callee": "desc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L934"}, {"caller_nid": "pl_plan_list_plans", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L945"}, {"caller_nid": "pl_plan_list_plans", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L945"}, {"caller_nid": "pl_plan_list_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L945"}, {"caller_nid": "pl_plan_list_plans", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L945"}, {"caller_nid": "pl_plan_list_plans", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L947"}, {"caller_nid": "pl_plan_list_plans", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L954"}, {"caller_nid": "pl_plan_list_plans", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L954"}, {"caller_nid": "pl_plan_list_plans", "callee": "fetch_hazard_flags_map", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L957"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_crm_product_alias_maps", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L962"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_brand_qtys_by_plan_product_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L967"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L972"}, {"caller_nid": "pl_plan_list_plans", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L973"}, {"caller_nid": "pl_plan_list_plans", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L974"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_plan_arrange_copy_flags", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L976"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_plan_document_attachments_by_plan_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L979"}, {"caller_nid": "pl_plan_list_plans", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L987"}, {"caller_nid": "pl_plan_list_plans", "callee": "user_can_view_archive_prices", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L988"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L993"}, {"caller_nid": "pl_plan_list_plans", "callee": "resolve_hazard_flags_from_crm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L994"}, {"caller_nid": "pl_plan_list_plans", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1000"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1001"}, {"caller_nid": "pl_plan_list_plans", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1003"}, {"caller_nid": "pl_plan_list_plans", "callee": "model_copy", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1012"}, {"caller_nid": "pl_plan_list_plans", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1021"}, {"caller_nid": "pl_plan_list_plans", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1023"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1025"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1028"}, {"caller_nid": "pl_plan_list_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1033"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1039"}, {"caller_nid": "pl_plan_list_plans", "callee": "attach_plan_stops_to_item", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1040"}, {"caller_nid": "pl_plan_list_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1043"}, {"caller_nid": "pl_plan_list_plans", "callee": "mask_plan_with_products_prices", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1045"}, {"caller_nid": "pl_plan_list_plans", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1046"}, {"caller_nid": "pl_plan_list_plans", "callee": "PlanListResponse", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1048"}, {"caller_nid": "pl_plan_normalize_plan_export_columns", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1117"}, {"caller_nid": "pl_plan_normalize_plan_export_columns", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1117"}, {"caller_nid": "pl_plan_normalize_plan_export_columns", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1117"}, {"caller_nid": "pl_plan_plan_list_export_filename_stem", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1124"}, {"caller_nid": "pl_plan_plan_list_export_filename_stem", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1124"}, {"caller_nid": "pl_plan_plan_list_export_sheet_title", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1133"}, {"caller_nid": "pl_plan_plan_list_export_sheet_title", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1133"}, {"caller_nid": "pl_plan_format_plan_list_export_brand", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1143"}, {"caller_nid": "pl_plan_format_plan_list_export_brand", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1145"}, {"caller_nid": "pl_plan_format_export_date_text", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1151"}, {"caller_nid": "pl_plan_format_export_date_text", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1151"}, {"caller_nid": "pl_plan_format_stop_address_time", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1156"}, {"caller_nid": "pl_plan_format_stop_address_time", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1156"}, {"caller_nid": "pl_plan_format_stop_dibang_label", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1166"}, {"caller_nid": "pl_plan_format_stop_dibang_label", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1166"}, {"caller_nid": "pl_plan_format_stop_dibang_label", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1169"}, {"caller_nid": "pl_plan_format_stop_dibang_label", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1169"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1180"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1180"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1181"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1182"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1182"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1183"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1184"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1184"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1185"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1186"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1186"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1187"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1188"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1188"}, {"caller_nid": "pl_plan_apply_plan_list_export_labels", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1189"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "_format_stop_segment_label", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1201"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1212"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1212"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1214"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1215"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "format_stop_contract_export_label", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1219"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1221"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1227"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1228"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1231"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1232"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1235"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "format_stop_contract_export_label", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1239"}, {"caller_nid": "pl_plan_apply_plan_list_export_segment_stop_fields", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1241"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1275"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1275"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1275"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1278"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1278"}, {"caller_nid": "pl_plan_index_plan_products_for_list_export", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1278"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1289"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1289"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1289"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1292"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1292"}, {"caller_nid": "pl_plan_lookup_plan_list_export_plan_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1292"}, {"caller_nid": "pl_plan_fill_plan_list_export_legacy_product", "callee": "resolve_product_display_names", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1305"}, {"caller_nid": "pl_plan_fill_plan_list_export_legacy_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1313"}, {"caller_nid": "pl_plan_fill_plan_list_export_legacy_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1314"}, {"caller_nid": "pl_plan_fill_plan_list_export_legacy_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1315"}, {"caller_nid": "pl_plan_fill_plan_list_export_legacy_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1316"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1337"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "resolve_product_display_names", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1338"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1340"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1348"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1349"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1349"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1350"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1350"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1351"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1351"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1352"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1354"}, {"caller_nid": "pl_plan_fill_plan_list_export_segment_product", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1356"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "defaultdict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1368"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "set", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1369"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1372"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1372"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1372"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1372"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1375"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1378"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1378"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1382"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1384"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1386"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "_iter_segment_product_slots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1389"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1394"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1394"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1394"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1396"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "load_crm_product_alias_maps", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1397"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1403"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1403"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "pop", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1404"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1405"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1406"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1407"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1408"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "_format_plate_display", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1409"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1410"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1410"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1413"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1414"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1420"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1423"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1430"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "_iter_segment_product_slots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1434"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "dict", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1437"}, {"caller_nid": "pl_plan_build_plan_list_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1454"}, {"caller_nid": "pl_plan_load_transports_by_id", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1496"}, {"caller_nid": "pl_plan_load_transports_by_id", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1496"}, {"caller_nid": "pl_plan_load_transports_by_id", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1496"}, {"caller_nid": "pl_plan_load_transports_by_id", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1500"}, {"caller_nid": "pl_plan_export_plans", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1546"}, {"caller_nid": "pl_plan_export_plans", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1546"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1547"}, {"caller_nid": "pl_plan_export_plans", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1547"}, {"caller_nid": "pl_plan_export_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1552"}, {"caller_nid": "pl_plan_export_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1554"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1555"}, {"caller_nid": "pl_plan_export_plans", "callee": "or_", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1556"}, {"caller_nid": "pl_plan_export_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1557"}, {"caller_nid": "pl_plan_export_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1558"}, {"caller_nid": "pl_plan_export_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1558"}, {"caller_nid": "pl_plan_export_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1559"}, {"caller_nid": "pl_plan_export_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1559"}, {"caller_nid": "pl_plan_export_plans", "callee": "contains", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1560"}, {"caller_nid": "pl_plan_export_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1560"}, {"caller_nid": "pl_plan_export_plans", "callee": "plan_product_name_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1561"}, {"caller_nid": "pl_plan_export_plans", "callee": "plan_plate_match", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1562"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1568"}, {"caller_nid": "pl_plan_export_plans", "callee": "plan_has_hazard_product_exists", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1568"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1573"}, {"caller_nid": "pl_plan_export_plans", "callee": "apply_stock_role_filter", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1575"}, {"caller_nid": "pl_plan_export_plans", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1579"}, {"caller_nid": "pl_plan_export_plans", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1579"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1581"}, {"caller_nid": "pl_plan_export_plans", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1581"}, {"caller_nid": "pl_plan_export_plans", "callee": "apply_pl_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1582"}, {"caller_nid": "pl_plan_export_plans", "callee": "parse_sort_params", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1584"}, {"caller_nid": "pl_plan_export_plans", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1586"}, {"caller_nid": "pl_plan_export_plans", "callee": "limit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1586"}, {"caller_nid": "pl_plan_export_plans", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1586"}, {"caller_nid": "pl_plan_export_plans", "callee": "order_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1586"}, {"caller_nid": "pl_plan_export_plans", "callee": "desc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1586"}, {"caller_nid": "pl_plan_export_plans", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1590"}, {"caller_nid": "pl_plan_export_plans", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1590"}, {"caller_nid": "pl_plan_export_plans", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1591"}, {"caller_nid": "pl_plan_export_plans", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1591"}, {"caller_nid": "pl_plan_export_plans", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1594"}, {"caller_nid": "pl_plan_export_plans", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1595"}, {"caller_nid": "pl_plan_export_plans", "callee": "ExportValidationError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1598"}, {"caller_nid": "pl_plan_export_plans", "callee": "build_plan_archive_export_rows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1601"}, {"caller_nid": "pl_plan_export_plans", "callee": "parse_single_stop_kind", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1606"}, {"caller_nid": "pl_plan_export_plans", "callee": "parse_stop_customer_keywords", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1610"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter_export_columns", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1614"}, {"caller_nid": "pl_plan_export_plans", "callee": "user_can_view_archive_prices", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1617"}, {"caller_nid": "pl_plan_export_plans", "callee": "load_plan_document_attachments_by_plan_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1628"}, {"caller_nid": "pl_plan_export_plans", "callee": "load_plan_products_by_plan_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1631"}, {"caller_nid": "pl_plan_export_plans", "callee": "merge_plan_attachment_items", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1635"}, {"caller_nid": "pl_plan_export_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1636"}, {"caller_nid": "pl_plan_export_plans", "callee": "collect_hazard_cert_items", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1637"}, {"caller_nid": "pl_plan_export_plans", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1637"}, {"caller_nid": "pl_plan_export_plans", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1641"}, {"caller_nid": "pl_plan_export_plans", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1641"}, {"caller_nid": "pl_plan_export_plans", "callee": "build_archive_zip_streaming_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1642"}, {"caller_nid": "pl_plan_export_plans", "callee": "export_plan_archive_xlsx_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1651"}, {"caller_nid": "pl_plan_export_plans", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1660"}, {"caller_nid": "pl_plan_export_plans", "callee": "filter_export_columns", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1667"}, {"caller_nid": "pl_plan_export_plans", "callee": "export_rows_to_xlsx_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1672"}, {"caller_nid": "pl_plan_export_plans", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1681"}, {"caller_nid": "pl_plan_export_plans", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1681"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1692"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1692"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1693"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1693"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1693"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1699"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1699"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "count", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1699"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1703"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1706"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "group_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1706"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "apply_pl_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1706"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1710"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1710"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1710"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "in_", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1715"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "apply_pl_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1720"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "set", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1721"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1722"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1726"}, {"caller_nid": "pl_plan_count_plans_by_contract", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1728"}, {"caller_nid": "pl_plan_get_contract_product_arrange_qty", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1746"}, {"caller_nid": "pl_plan_get_contract_product_arrange_qty", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1746"}, {"caller_nid": "pl_plan_get_contract_product_arrange_qty", "callee": "get_contract_product_arrange_qty_detail", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1747"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1770"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1770"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1771"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1771"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1772"}, {"caller_nid": "pl_plan_batch_contract_product_arrange_qty", "callee": "batch_contract_product_arrange_qty_summaries", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1774"}, {"caller_nid": "pl_plan_list_contract_gaps", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1809"}, {"caller_nid": "pl_plan_list_contract_gaps", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1809"}, {"caller_nid": "pl_plan_list_contract_gaps", "callee": "list_plan_contract_gaps", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1823"}, {"caller_nid": "pl_plan_list_contract_gaps", "callee": "PlanContractGapListResponse", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1837"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1859"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1860"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1863"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1863"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1864"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1865"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1866"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1867"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1868"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1869"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1870"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1871"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1872"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1873"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1874"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1875"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1876"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1877"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1878"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1880"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1880"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1881"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1881"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1883"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1884"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1885"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1886"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1887"}, {"caller_nid": "pl_plan_contract_gap_export_base", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1888"}, {"caller_nid": "pl_plan_contract_gap_row_gap_type", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1896"}, {"caller_nid": "pl_plan_contract_gap_row_gap_type", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1897"}, {"caller_nid": "pl_plan_contract_gap_row_gap_type", "callee": "stop_contract_gap", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1898"}, {"caller_nid": "pl_plan_contract_gap_row_gap_type", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1898"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1912"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1912"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1913"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "_iter_segment_product_slots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1915"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "_format_stop_segment_label", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1920"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1928"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1928"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1937"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1938"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1942"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1943"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1946"}, {"caller_nid": "pl_plan_build_contract_gap_export_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1951"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1976"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1976"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "list_plan_contract_gaps", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1979"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L1998"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "filter_export_columns", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2000"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2001"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2001"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "export_rows_to_xlsx_response", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2002"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2007"}, {"caller_nid": "pl_plan_export_contract_gaps", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2007"}, {"caller_nid": "pl_plan_put_plan_stop_contracts", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2018"}, {"caller_nid": "pl_plan_put_plan_stop_contracts", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2018"}, {"caller_nid": "pl_plan_put_plan_stop_contracts", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2019"}, {"caller_nid": "pl_plan_put_plan_stop_contracts", "callee": "update_plan_stop_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2020"}, {"caller_nid": "pl_plan_put_plan_stop_contracts", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2031"}, {"caller_nid": "pl_plan_put_plan_side_contracts", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2044"}, {"caller_nid": "pl_plan_put_plan_side_contracts", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2044"}, {"caller_nid": "pl_plan_put_plan_side_contracts", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2045"}, {"caller_nid": "pl_plan_put_plan_side_contracts", "callee": "update_plan_side_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2046"}, {"caller_nid": "pl_plan_put_plan_side_contracts", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2056"}, {"caller_nid": "pl_plan_create_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2071"}, {"caller_nid": "pl_plan_create_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2071"}, {"caller_nid": "pl_plan_create_plan", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2077"}, {"caller_nid": "pl_plan_create_plan", "callee": "PlPlan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2079"}, {"caller_nid": "pl_plan_create_plan", "callee": "generate_uuid", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2080"}, {"caller_nid": "pl_plan_create_plan", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2126"}, {"caller_nid": "pl_plan_create_plan", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2130"}, {"caller_nid": "pl_plan_create_plan", "callee": "build_plan_product", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2131"}, {"caller_nid": "pl_plan_create_plan", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2140"}, {"caller_nid": "pl_plan_create_plan", "callee": "calc_plan_total_amount", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2142"}, {"caller_nid": "pl_plan_create_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2144"}, {"caller_nid": "pl_plan_create_plan", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2145"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2156"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2156"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2157"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2157"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "uses_multi_stop_payload", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2159"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "validate_draft_min_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2167"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "validate_plan_stops_write", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2173"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "collect_stop_qty_warnings", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2180"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "validate_plan_stops_write", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2187"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "collect_stop_qty_warnings", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2194"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "validate_create_full", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2196"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "validate_plan_party_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2197"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2214"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "bool", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2215"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2216"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "PlPlan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2218"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "generate_uuid", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2219"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "resolve_follow_status_on_save", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2226"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "calc_plan_total_amount", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2262"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2269"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "flush", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2270"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "sync_plan_legacy_from_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2273"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2276"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "resolve_hazard_flags_from_crm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2277"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "model_copy", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2282"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "build_plan_product", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2283"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2292"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2293"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "replace_plan_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2296"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "safe_upsert_prefs_from_plan_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2306"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "replace_plan_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2315"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "apply_vehicle_prefill_to_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2326"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2336"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2337"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2339"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2344"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2344"}, {"caller_nid": "pl_plan_create_plan_full", "callee": "attach_plan_stops_to_item", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2345"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2363"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2363"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2367"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2367"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2367"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2372"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "assert_contract_selectable_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2374"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "PlPlan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2382"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "generate_uuid", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2383"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2397"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2400"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2402"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2417"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2421"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2421"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2421"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2430"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "resolve_hazard_flags_from_crm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2431"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "PlPlanProduct", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2436"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "generate_uuid", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2437"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2456"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2458"}, {"caller_nid": "pl_plan_create_from_contract", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2459"}, {"caller_nid": "pl_plan_get_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2474"}, {"caller_nid": "pl_plan_get_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2474"}, {"caller_nid": "pl_plan_get_plan", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2475"}, {"caller_nid": "pl_plan_get_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2478"}, {"caller_nid": "pl_plan_get_plan", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2478"}, {"caller_nid": "pl_plan_get_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2478"}, {"caller_nid": "pl_plan_get_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2478"}, {"caller_nid": "pl_plan_get_plan", "callee": "fetch_hazard_flags_map", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2487"}, {"caller_nid": "pl_plan_get_plan", "callee": "load_brand_qtys_by_plan_product_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2492"}, {"caller_nid": "pl_plan_get_plan", "callee": "resolve_hazard_flags_from_crm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2500"}, {"caller_nid": "pl_plan_get_plan", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2506"}, {"caller_nid": "pl_plan_get_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2507"}, {"caller_nid": "pl_plan_get_plan", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2509"}, {"caller_nid": "pl_plan_get_plan", "callee": "model_copy", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2513"}, {"caller_nid": "pl_plan_get_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2520"}, {"caller_nid": "pl_plan_get_plan", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2522"}, {"caller_nid": "pl_plan_get_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2524"}, {"caller_nid": "pl_plan_get_plan", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2524"}, {"caller_nid": "pl_plan_get_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2529"}, {"caller_nid": "pl_plan_get_plan", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2529"}, {"caller_nid": "pl_plan_get_plan", "callee": "attach_plan_stops_to_item", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2530"}, {"caller_nid": "pl_plan_get_plan", "callee": "user_can_view_archive_prices", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2531"}, {"caller_nid": "pl_plan_get_plan", "callee": "mask_plan_with_products_prices", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2532"}, {"caller_nid": "pl_plan_update_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2547"}, {"caller_nid": "pl_plan_update_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2547"}, {"caller_nid": "pl_plan_update_plan", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2548"}, {"caller_nid": "pl_plan_update_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2551"}, {"caller_nid": "pl_plan_update_plan", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2553"}, {"caller_nid": "pl_plan_update_plan", "callee": "getattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2553"}, {"caller_nid": "pl_plan_update_plan", "callee": "assert_can_save_as_draft", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2556"}, {"caller_nid": "pl_plan_update_plan", "callee": "validate_draft_min_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2557"}, {"caller_nid": "pl_plan_update_plan", "callee": "uses_multi_stop_payload", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2568"}, {"caller_nid": "pl_plan_update_plan", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2574"}, {"caller_nid": "pl_plan_update_plan", "callee": "items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2587"}, {"caller_nid": "pl_plan_update_plan", "callee": "setattr", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2588"}, {"caller_nid": "pl_plan_update_plan", "callee": "validate_plan_stops_write", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2609"}, {"caller_nid": "pl_plan_update_plan", "callee": "collect_stop_qty_warnings", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2617"}, {"caller_nid": "pl_plan_update_plan", "callee": "sync_plan_legacy_from_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2620"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2626"}, {"caller_nid": "pl_plan_update_plan", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2626"}, {"caller_nid": "pl_plan_update_plan", "callee": "validate_plan_stops_write", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2630"}, {"caller_nid": "pl_plan_update_plan", "callee": "collect_stop_qty_warnings", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2638"}, {"caller_nid": "pl_plan_update_plan", "callee": "sync_plan_legacy_from_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2639"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2646"}, {"caller_nid": "pl_plan_update_plan", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2646"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2651"}, {"caller_nid": "pl_plan_update_plan", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2651"}, {"caller_nid": "pl_plan_update_plan", "callee": "validate_plan_party_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2661"}, {"caller_nid": "pl_plan_update_plan", "callee": "replace_plan_contracts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2672"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2682"}, {"caller_nid": "pl_plan_update_plan", "callee": "load_plan_contracts_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2682"}, {"caller_nid": "pl_plan_update_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2691"}, {"caller_nid": "pl_plan_update_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2691"}, {"caller_nid": "pl_plan_update_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2691"}, {"caller_nid": "pl_plan_update_plan", "callee": "collect_hazard_product_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2700"}, {"caller_nid": "pl_plan_update_plan", "callee": "set", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2710"}, {"caller_nid": "pl_plan_update_plan", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2712"}, {"caller_nid": "pl_plan_update_plan", "callee": "resolve_hazard_flags_from_crm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2713"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2721"}, {"caller_nid": "pl_plan_update_plan", "callee": "model_copy", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2726"}, {"caller_nid": "pl_plan_update_plan", "callee": "resolve_plan_product_id_for_upsert", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2735"}, {"caller_nid": "pl_plan_update_plan", "callee": "apply_plan_product_fields", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2741"}, {"caller_nid": "pl_plan_update_plan", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2748"}, {"caller_nid": "pl_plan_update_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2749"}, {"caller_nid": "pl_plan_update_plan", "callee": "build_plan_product", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2751"}, {"caller_nid": "pl_plan_update_plan", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2761"}, {"caller_nid": "pl_plan_update_plan", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2762"}, {"caller_nid": "pl_plan_update_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2763"}, {"caller_nid": "pl_plan_update_plan", "callee": "collect_hazard_product_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2770"}, {"caller_nid": "pl_plan_update_plan", "callee": "clear_hazard_cert_ready", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2772"}, {"caller_nid": "pl_plan_update_plan", "callee": "calc_plan_total_amount", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2774"}, {"caller_nid": "pl_plan_update_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2777"}, {"caller_nid": "pl_plan_update_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2777"}, {"caller_nid": "pl_plan_update_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2777"}, {"caller_nid": "pl_plan_update_plan", "callee": "sync_transport_prefill_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2788"}, {"caller_nid": "pl_plan_update_plan", "callee": "clear_draft_transport_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2798"}, {"caller_nid": "pl_plan_update_plan", "callee": "replace_plan_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2806"}, {"caller_nid": "pl_plan_update_plan", "callee": "safe_upsert_prefs_from_plan_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2816"}, {"caller_nid": "pl_plan_update_plan", "callee": "resolve_follow_status_on_save", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2826"}, {"caller_nid": "pl_plan_update_plan", "callee": "sync_linked_dibang_dates_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2831"}, {"caller_nid": "pl_plan_update_plan", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2846"}, {"caller_nid": "pl_plan_update_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2846"}, {"caller_nid": "pl_plan_update_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2846"}, {"caller_nid": "pl_plan_update_plan", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2857"}, {"caller_nid": "pl_plan_update_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2857"}, {"caller_nid": "pl_plan_update_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2857"}, {"caller_nid": "pl_plan_update_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2866"}, {"caller_nid": "pl_plan_update_plan", "callee": "StopDibangOption", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2867"}, {"caller_nid": "pl_plan_update_plan", "callee": "bool", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2870"}, {"caller_nid": "pl_plan_update_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2874"}, {"caller_nid": "pl_plan_update_plan", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2874"}, {"caller_nid": "pl_plan_update_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2874"}, {"caller_nid": "pl_plan_update_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2874"}, {"caller_nid": "pl_plan_update_plan", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2880"}, {"caller_nid": "pl_plan_update_plan", "callee": "asc", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2880"}, {"caller_nid": "pl_plan_update_plan", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2884"}, {"caller_nid": "pl_plan_update_plan", "callee": "StopDibangOption", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2885"}, {"caller_nid": "pl_plan_update_plan", "callee": "bool", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2888"}, {"caller_nid": "pl_plan_update_plan", "callee": "upsert_stop_dibang_links", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2893"}, {"caller_nid": "pl_plan_update_plan", "callee": "rollback", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2903"}, {"caller_nid": "pl_plan_update_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2904"}, {"caller_nid": "pl_plan_update_plan", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2904"}, {"caller_nid": "pl_plan_update_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2905"}, {"caller_nid": "pl_plan_update_plan", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2906"}, {"caller_nid": "pl_plan_update_plan", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2907"}, {"caller_nid": "pl_plan_update_plan", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2912"}, {"caller_nid": "pl_plan_update_plan", "callee": "load_plan_stops_grouped", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2912"}, {"caller_nid": "pl_plan_update_plan", "callee": "attach_plan_stops_to_item", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2913"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2925"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2925"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2926"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "update_plan_product_certs", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2927"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2934"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2936"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2936"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2936"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2936"}, {"caller_nid": "pl_plan_patch_plan_product_certs", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2944"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2957"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2957"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2958"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "set_hazard_cert_ready", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2959"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2966"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2968"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2968"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2968"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2968"}, {"caller_nid": "pl_plan_patch_plan_hazard_cert_ready", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2976"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2989"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2989"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "set_plan_erp_entered", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2990"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2997"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2999"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2999"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2999"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L2999"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3007"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3009"}, {"caller_nid": "pl_plan_patch_plan_erp_entered", "callee": "load_plan_document_attachments_by_plan_ids", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3009"}, {"caller_nid": "pl_plan_build_driver_url", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3018"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3029"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3029"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3030"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "PlanArrangeInfoRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3032"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3043"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3043"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3043"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3054"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "plan_requires_site_link", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3056"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "build_site_records_for_arranged_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3057"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3065"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3065"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3065"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3078"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3078"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3078"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3086"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3086"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3086"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "append", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3094"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "build_transport_inventory_link_read", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3095"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "get_active_io_order_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3111"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3116"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "TransportIoOrderBrief", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3117"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "build_io_order_site_url", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3122"}, {"caller_nid": "pl_plan_get_plan_arrange_info", "callee": "PlanArrangeInfoRead", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3126"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3148"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3148"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3149"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3152"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3154"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3156"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3160"}, {"caller_nid": "pl_plan_mark_plan_wait_notice", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3161"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3172"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3172"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3173"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3176"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3178"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3182"}, {"caller_nid": "pl_plan_cancel_plan_wait_notice", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3183"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "get_user_menu_codes", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3210"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3212"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3214"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3216"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3221"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3221"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3222"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3226"}, {"caller_nid": "pl_plan_force_plan_follow_status", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3227"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3244"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3244"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3245"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3248"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3251"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3255"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3255"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3255"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "revoke_regeneratable_dibang_for_transport", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3265"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3272"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3272"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "revoke_site_links_for_transport", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3273"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "void_io_orders_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3282"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3286"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "normalize_optional_reason", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3287"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3294"}, {"caller_nid": "pl_plan_cancel_plan", "callee": "refresh", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3295"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "user_can_archive_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3312"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3313"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3314"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3314"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3315"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3318"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3320"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "apply_archive_stop_quantities", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3324"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "sync_plan_products_from_stop_archive", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3333"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "apply_archive_brand_qtys_only", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3337"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "apply_archive_product_quantities", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3345"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "apply_archive_freight", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3350"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "apply_archive_stop_feedback_attachments", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3360"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "record_plan_change", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3371"}, {"caller_nid": "pl_plan_archive_plan_draft", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3381"}, {"caller_nid": "pl_plan_archive_plan", "callee": "user_can_archive_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3392"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3393"}, {"caller_nid": "pl_plan_archive_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3394"}, {"caller_nid": "pl_plan_archive_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3394"}, {"caller_nid": "pl_plan_archive_plan", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3395"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3398"}, {"caller_nid": "pl_plan_archive_plan", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3404"}, {"caller_nid": "pl_plan_archive_plan", "callee": "order_by", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3404"}, {"caller_nid": "pl_plan_archive_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3404"}, {"caller_nid": "pl_plan_archive_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3404"}, {"caller_nid": "pl_plan_archive_plan", "callee": "validate_hazard_cert_ready_for_transport", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3413"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3417"}, {"caller_nid": "pl_plan_archive_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3422"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3428"}, {"caller_nid": "pl_plan_archive_plan", "callee": "collect_archive_line_overages", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3434"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3442"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_stop_quantities", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3450"}, {"caller_nid": "pl_plan_archive_plan", "callee": "sync_plan_products_from_stop_archive", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3458"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_brand_qtys_only", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3462"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_inventory_for_plan_stops", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3469"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3478"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_product_quantities", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3479"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_inventory_for_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3482"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_freight", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3490"}, {"caller_nid": "pl_plan_archive_plan", "callee": "int", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3493"}, {"caller_nid": "pl_plan_archive_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3495"}, {"caller_nid": "pl_plan_archive_plan", "callee": "apply_archive_stop_feedback_attachments", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3498"}, {"caller_nid": "pl_plan_archive_plan", "callee": "record_plan_change", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3513"}, {"caller_nid": "pl_plan_archive_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3523"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3534"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3534"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3535"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "apply_plan_driver_feedback", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3536"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "record_plan_change", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3543"}, {"caller_nid": "pl_plan_update_plan_driver_feedback", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3554"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3566"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3566"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3567"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "apply_plan_site_feedback", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3568"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3576"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "record_plan_change", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3577"}, {"caller_nid": "pl_plan_update_plan_site_feedback", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3588"}, {"caller_nid": "pl_plan_get_inbound_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3603"}, {"caller_nid": "pl_plan_get_inbound_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3603"}, {"caller_nid": "pl_plan_get_inbound_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3604"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3615"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3615"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3616"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3618"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3620"}, {"caller_nid": "pl_plan_save_inbound_slip_template", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3623"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3639"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3639"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3640"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "isoformat", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3641"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "get_delivery_slip_print_context", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3643"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3652"}, {"caller_nid": "pl_plan_get_print_delivery_slip", "callee": "str", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3652"}, {"caller_nid": "pl_plan_get_delivery_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3661"}, {"caller_nid": "pl_plan_get_delivery_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3661"}, {"caller_nid": "pl_plan_get_delivery_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3662"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3673"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3673"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3674"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3676"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3678"}, {"caller_nid": "pl_plan_save_delivery_slip_template", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3681"}, {"caller_nid": "pl_plan_get_subpack_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3695"}, {"caller_nid": "pl_plan_get_subpack_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3695"}, {"caller_nid": "pl_plan_get_subpack_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3696"}, {"caller_nid": "pl_plan_save_subpack_slip_template", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3707"}, {"caller_nid": "pl_plan_save_subpack_slip_template", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3707"}, {"caller_nid": "pl_plan_save_subpack_slip_template", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3708"}, {"caller_nid": "pl_plan_save_subpack_slip_template", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3710"}, {"caller_nid": "pl_plan_save_subpack_slip_template", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3713"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3722"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3722"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3723"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3725"}, {"caller_nid": "pl_plan_ensure_subpack_slip_no", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3728"}, {"caller_nid": "pl_plan_delete_plan", "callee": "get_tenant_no", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3743"}, {"caller_nid": "pl_plan_delete_plan", "callee": "to_tenant_user_dict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3743"}, {"caller_nid": "pl_plan_delete_plan", "callee": "_get_plan", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3744"}, {"caller_nid": "pl_plan_delete_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3747"}, {"caller_nid": "pl_plan_delete_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3749"}, {"caller_nid": "pl_plan_delete_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3751"}, {"caller_nid": "pl_plan_delete_plan", "callee": "assert_row_deletable_by_creator", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3753"}, {"caller_nid": "pl_plan_delete_plan", "callee": "user_info_from_context", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3753"}, {"caller_nid": "pl_plan_delete_plan", "callee": "update", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3757"}, {"caller_nid": "pl_plan_delete_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3757"}, {"caller_nid": "pl_plan_delete_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3757"}, {"caller_nid": "pl_plan_delete_plan", "callee": "update", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3763"}, {"caller_nid": "pl_plan_delete_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3763"}, {"caller_nid": "pl_plan_delete_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3763"}, {"caller_nid": "pl_plan_delete_plan", "callee": "commit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3769"}, {"caller_nid": "pl_plan_get_plan", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3779"}, {"caller_nid": "pl_plan_get_plan", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3779"}, {"caller_nid": "pl_plan_get_plan", "callee": "query", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3779"}, {"caller_nid": "pl_plan_get_plan", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3788"}, {"caller_nid": "pl_plan_get_plan", "callee": "assert_pl_row_in_scope", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py", "source_location": "L3789"}]} \ No newline at end of file diff --git a/backend/tests/test_crm_product_read_contract.py b/backend/tests/test_crm_product_read_contract.py new file mode 100644 index 000000000..db386517e --- /dev/null +++ b/backend/tests/test_crm_product_read_contract.py @@ -0,0 +1,24 @@ +"""CRM 产品读模型契约测试。""" +from __future__ import annotations + +from app.crud.crm.product import _product_row_to_dict +from app.models.crm_models import CrmProduct +from app.schemas.crm.product import ProductCreateBody, ProductUpdateBody + + +def test_product_read_contract_exposes_creator_for_delete_permission(): + row = CrmProduct( + id="product-1", + product_no="CP-001", + product_name="工业甲醇", + create_by="user-1", + ) + + payload = _product_row_to_dict(row) + + assert payload["createBy"] == "user-1" + + +def test_product_creator_stays_read_only_in_write_schemas(): + assert "create_by" not in ProductCreateBody.model_fields + assert "create_by" not in ProductUpdateBody.model_fields diff --git a/backend/tests/test_pl_plan_contract_gap_export.py b/backend/tests/test_pl_plan_contract_gap_export.py new file mode 100644 index 000000000..befe93971 --- /dev/null +++ b/backend/tests/test_pl_plan_contract_gap_export.py @@ -0,0 +1,199 @@ +"""合同完善导出:按段次×产品展开,缺口类型跟本行段。""" +from datetime import datetime + +from app.api.pl.plan import ( + CONTRACT_GAP_EXPORT_COLUMNS, + build_contract_gap_export_rows, +) +from app.schemas.pl.plan import ( + PlanContractGapRead, + PlanContractLink, + PlanDeliveryRead, + PlanLoadRead, + PlanStopProductRead, +) +from app.services.pl_internal_customer import INTERNAL_CUSTOMER_NAMES + +NOW = datetime(2026, 10, 11, 0, 0, 0) +INTERNAL = next(iter(INTERNAL_CUSTOMER_NAMES)) + + +def _stop_product(name: str, *, product_id: str) -> PlanStopProductRead: + return PlanStopProductRead( + id=f"sp-{product_id}", + planId="p1", + tenantNo="t1", + productId=product_id, + productNo=f"NO-{product_id}", + productName=name, + createTime=NOW, + updateTime=NOW, + ) + + +def _load(*, customer_name: str, contracts: list, products: list) -> PlanLoadRead: + return PlanLoadRead( + id="load1", + planId="p1", + tenantNo="t1", + customerName=customer_name, + products=products, + contracts=contracts, + createTime=NOW, + updateTime=NOW, + ) + + +def _delivery( + *, + stop_id: str, + seq: int, + customer_name: str, + delivery_time: str, + contracts: list, + products: list, +) -> PlanDeliveryRead: + return PlanDeliveryRead( + id=stop_id, + planId="p1", + tenantNo="t1", + seq=seq, + customerName=customer_name, + deliveryTime=delivery_time, + products=products, + contracts=contracts, + createTime=NOW, + updateTime=NOW, + ) + + +def _gap_item() -> PlanContractGapRead: + return PlanContractGapRead( + id="p1", + planNo="PL001", + planDate="2026-10-11", + planType="direct", + followStatus="arranged", + supplierName="供方甲", + customerName="需方乙", + supplierContractExempt=False, + demanderContractExempt=False, + ) + + +def test_contract_gap_export_columns_match_segment_rows(): + assert [column.field for column in CONTRACT_GAP_EXPORT_COLUMNS] == [ + "planNo", + "stopSegment", + "planDate", + "deliveryTimes", + "planType", + "followStatus", + "loadCustomer", + "deliveryCustomer", + "productName", + "supplierName", + "customerName", + "gapType", + ] + assert [column.title for column in CONTRACT_GAP_EXPORT_COLUMNS] == [ + "计划编号", + "段次", + "计划日期", + "送货时间", + "单据类型", + "跟进状态", + "装货客户", + "送货客户", + "产品名称", + "供方", + "需方", + "缺口类型", + ] + + +def test_build_contract_gap_export_rows_expands_multi_segment_products(): + """装货缺合同 + 两送货段(一段有合同、一段两产品缺合同)展开为 4 行。""" + load = _load( + customer_name="外部装货客户", + contracts=[], + products=[_stop_product("甲醇", product_id="prod-load")], + ) + delivery_ok = _delivery( + stop_id="d1", + seq=1, + customer_name="外部送货客户A", + delivery_time="2026-10-12", + contracts=[PlanContractLink(contractId="c1", contractNo="HT001")], + products=[_stop_product("甲醇", product_id="prod-d1")], + ) + delivery_gap = _delivery( + stop_id="d2", + seq=2, + customer_name="外部送货客户B", + delivery_time="2026-10-13", + contracts=[], + products=[ + _stop_product("乙醇", product_id="prod-d2a"), + _stop_product("丙酮", product_id="prod-d2b"), + ], + ) + + rows = build_contract_gap_export_rows( + [_gap_item()], + {"p1": (load, [delivery_ok, delivery_gap])}, + ) + + assert len(rows) == 4 + assert [row["stopSegment"] for row in rows] == ["装货", "送货 #1", "送货 #2", "送货 #2"] + assert [row["productName"] for row in rows] == ["甲醇", "甲醇", "乙醇", "丙酮"] + assert [row["gapType"] for row in rows] == ["缺供方合同", "", "缺需方合同", "缺需方合同"] + + load_row = rows[0] + assert load_row["loadCustomer"] == "外部装货客户" + assert load_row["deliveryCustomer"] == "" + assert load_row["deliveryTimes"] == "" + + ok_row = rows[1] + assert ok_row["loadCustomer"] == "" + assert ok_row["deliveryCustomer"] == "外部送货客户A" + assert ok_row["deliveryTimes"] == "2026-10-12" + + gap_row = rows[3] + assert gap_row["deliveryCustomer"] == "外部送货客户B" + assert gap_row["deliveryTimes"] == "2026-10-13" + assert gap_row["loadCustomer"] == "" + + for row in rows: + assert row["planNo"] == "PL001" + assert row["planDate"] == "2026-10-11" + assert row["planType"] == "直销单" + assert row["followStatus"] == "已安排" + assert row["supplierName"] == "供方甲" + assert row["customerName"] == "需方乙" + + +def test_build_contract_gap_export_rows_internal_side_has_empty_gap_type(): + """内置客户免合同:装货行缺口为空,外送段仍标缺需方合同。""" + load = _load( + customer_name=INTERNAL, + contracts=[], + products=[_stop_product("甲醇", product_id="prod-load")], + ) + delivery = _delivery( + stop_id="d1", + seq=1, + customer_name="外部送货客户", + delivery_time="2026-10-12T08:30:00", + contracts=[], + products=[_stop_product("甲醇", product_id="prod-d1")], + ) + + rows = build_contract_gap_export_rows( + [_gap_item()], + {"p1": (load, [delivery])}, + ) + + assert [row["stopSegment"] for row in rows] == ["装货", "送货 #1"] + assert [row["gapType"] for row in rows] == ["", "缺需方合同"] + assert rows[1]["deliveryTimes"] == "2026-10-12" diff --git a/backend/tests/test_pl_plan_product_certs.py b/backend/tests/test_pl_plan_product_certs.py new file mode 100644 index 000000000..33fe76fbb --- /dev/null +++ b/backend/tests/test_pl_plan_product_certs.py @@ -0,0 +1,77 @@ +"""证书保存状态保护:仅使用数据库边界替身,不连接业务数据库。""" +from types import SimpleNamespace +from unittest.mock import MagicMock + +import pytest +from fastapi import HTTPException + +from app.services import pl_plan_service as svc + + +@pytest.fixture +def cert_case(monkeypatch): + plan = SimpleNamespace( + archive_status="pending", follow_status="pending_arrange", + update_by="original", hazard_cert_ready=0, + ) + product = SimpleNamespace( + id="product-1", product_id="crm-1", product_name="测试危化品", + purchase_cert_url="old.pdf", transport_cert_url=None, + legal_use_cert_url=None, update_by="original", + ) + db = MagicMock() + plan_query, product_query = MagicMock(), MagicMock() + plan_query.filter.return_value.first.return_value = plan + product_query.filter.return_value.first.return_value = product + product_query.filter.return_value.all.return_value = [product] + db.query.side_effect = lambda model: plan_query if model is svc.PlPlan else product_query + monkeypatch.setattr(svc, "fetch_hazard_flags_map", lambda *args: {}) + monkeypatch.setattr(svc, "resolve_hazard_flags_from_crm", lambda *args, **kwargs: (True, False)) + auto_ready = MagicMock() + monkeypatch.setattr(svc, "maybe_auto_set_hazard_cert_ready", auto_ready) + item = SimpleNamespace( + id=product.id, purchase_cert_url=" new.pdf,other.pdf ", + transport_cert_url=" ", legal_use_cert_url=None, + ) + def save(): + return svc.update_plan_product_certs( + db, tenant_no="test-tenant", plan_id="plan-1", items=[item], user_id="editor" + ) + return SimpleNamespace( + plan=plan, product=product, db=db, save=save, + auto_ready=auto_ready, plan_query=plan_query, + ) + + +@pytest.mark.parametrize("state", ["cancelled", "archived", "missing"]) +def test_invalid_plan_rejected_before_any_certificate_write(cert_case, state): + c = cert_case + if state == "cancelled": + c.plan.follow_status = "cancelled" + elif state == "archived": + c.plan.archive_status = "archived" + else: + c.plan_query.filter.return_value.first.return_value = None + with pytest.raises(HTTPException) as error: + c.save() + assert error.value.status_code == (404 if state == "missing" else 400) + if state == "cancelled": + assert "已作废" in error.value.detail + assert c.product.purchase_cert_url == "old.pdf" + assert c.product.update_by == c.plan.update_by == "original" + assert c.plan.hazard_cert_ready == 0 + c.db.query.assert_called_once_with(svc.PlPlan) + c.db.commit.assert_not_called() + c.auto_ready.assert_not_called() + + +def test_active_plan_can_save_and_clear_certificate_urls(cert_case): + c = cert_case + assert c.save() == [c.product] + assert c.product.purchase_cert_url == "new.pdf,other.pdf" + assert c.product.transport_cert_url is None + assert c.product.legal_use_cert_url is None + assert c.product.update_by == c.plan.update_by == "editor" + c.db.commit.assert_called_once() + c.db.refresh.assert_called_once_with(c.product) + c.auto_ready.assert_called_once() diff --git a/bak/mobile-ui/shanxia-mp-attachment-demo.html b/bak/mobile-ui/shanxia-mp-attachment-demo.html new file mode 100644 index 000000000..d464be4ca --- /dev/null +++ b/bak/mobile-ui/shanxia-mp-attachment-demo.html @@ -0,0 +1,703 @@ + + + + + + 山峡化工 · H5 附件上传与回显 Demo + + + +
+ +
+ + +
+
+
+
+

A · 宫格缩略图 推荐

+ 图片直接看缩略图,PDF、Word 用类型角标。证照和附件混在一起时最好认。下载、删除都在格子上。 +
+
+
9:41山峡化工
+
+
+ ← +

客户资料

+ 编辑 +
+
+
+
+

资质附件

+

图片、PDF、Word 均可。单个不超过 20MB。

+
+ +
+ + + + 营业执照.jpg +
+
+ + + + 危化品经营许可证.pdf +
+
+ + + + 报价说明.docx +
+
+ + 上传中… +
+
+
+
+
+
+
查看附件
+
+

+
+ +
+
+
+
+
+ +
+
+

B · 文件行

+ 文件名、类型和大小放在一行。合同、证书这类长文件名更不容易被格子裁掉。点文件名查看,下载和删除是独立按钮。 +
+
+
9:41山峡化工
+
+
+ ← +

合同详情

+ 编辑 +
+
+
+
+

扫描件 / 附件

+

点文件名查看,下载不进入弹层。

+ +
+
+ + + +
+
+
PDF
+ + + +
+
+
DOC
+ + + +
+
+
PDF
+
合同扫描件.pdf上传中…
+
+
+
+
+
+
查看附件
+
+

+
+ +
+
+
+
+
+ +
+
+

C · 横滑附件卡

+ 虚线上传卡和已传文件同一行横滑,接近管理端附件卡。文件一多需要左右滑,手机上不如宫格一眼看全。 +
+
+
9:41山峡化工
+
+
+ ← +

危化品证

+ 编辑 +
+
+
+
+

证书附件

+

向左滑可看到更多文件。

+
+ +
+ + +
+ 营业执照.jpg + +
+
+
+ + +
+ 危化品经营许可证.pdf + +
+
+
+ + +
+ 报价说明.docx + +
+
+
+
PDF上传中…
+
合同扫描件.pdf
+
+
+
+
+
+
+
查看附件
+
+

+
+ +
+
+
+
+
+
+
+
+ + + diff --git a/bak/mobile-ui/shanxia-mp-crm-customer-list-card-demo.html b/bak/mobile-ui/shanxia-mp-crm-customer-list-card-demo.html new file mode 100644 index 000000000..656991243 --- /dev/null +++ b/bak/mobile-ui/shanxia-mp-crm-customer-list-card-demo.html @@ -0,0 +1,473 @@ + + + + + + 山峡化工 · 客户管理列表卡片美化 Demo + + + +
+ + +
+ +
+
+

现状(Current)

+ 绿强调条 + 灰绿 KV 底块,字段全展开,无折叠。 +
+
+
9:41▮▮▮
+
+
+ +

客户管理

+
+ +
+ 全部我的待跟进重点 +
+
+
+
+
+
+
杭州山峡精细化工有限公司
+
下次跟进 10-20 09:00
+
+ 正常 +
+
+ 生产企业 + A级 +
+
+
客户编号C20261018001
+
简称山峡精细
+
手机号138****6621
+
负责人王敏
+
下次跟进10-20 09:00
+
+
+ + + +
+
+
+
+
+
宁波东海物流有限公司
+
创建于 10-12 14:22
+
+ 待跟进 +
+
+ 贸易商 + B级 +
+
+
客户编号C20261012088
+
简称东海物流
+
手机号159****3308
+
负责人李强
+
下次跟进—
+
+
+ + + +
+
+

已加载 2 / 128

+
+
+
+ + +
+
+

方案 A · 扁平 + 展开 推荐

+ 去掉两块色底;类型/级别用轻 Chip;字段默认收起,对齐详情联系人卡。 +
+
+
9:41▮▮▮
+
+
+ +

客户管理

+
+ +
+ 全部我的待跟进重点 +
+
+
+
+
+
+
杭州山峡精细化工有限公司
+
C20261018001 · 王敏 · 10-20 09:00
+
+ 生产企业 + A级 +
+
+ 正常 +
+ +
+
简称山峡精细
+
手机号138****6621
+
负责人王敏
+
下次跟进10-20 09:00
+
+
+ + + +
+
+
+
+
+
宁波东海物流有限公司
+
C20261012088 · 李强 · —
+
+ 贸易商 + B级 +
+
+ 待跟进 +
+ +
+
简称东海物流
+
手机号159****3308
+
负责人李强
+
下次跟进—
+
+
+ + + +
+
+

已加载 2 / 128 · 点「展开」看字段

+
+
+
+ + +
+
+

方案 B · 极简摘要

+ 类型/级别并入一行摘要;默认只露 2 行关键信息,其余折叠。 +
+
+
9:41▮▮▮
+
+
+ +

客户管理

+
+ +
+ 全部我的待跟进重点 +
+
+
+
+
+
+
杭州山峡精细化工有限公司
+
生产企业 · A级 · 王敏 · 下次 10-20
+
+ 正常 +
+
+
手机号138****6621
+
简称山峡精细
+
+ +
+
客户编号C20261018001
+
负责人王敏
+
下次跟进10-20 09:00
+
+
+ + + +
+
+
+
+
+
宁波东海物流有限公司
+
贸易商 · B级 · 李强 · 下次 —
+
+ 待跟进 +
+
+
手机号159****3308
+
简称东海物流
+
+ +
+
客户编号C20261012088
+
负责人李强
+
下次跟进—
+
+
+ + + +
+
+

已加载 2 / 128 · 点「更多字段」

+
+
+
+
+ +
+ 实现落点: + web-admin/src/views/m/crm/customer/index.vue + + web-admin/src/styles/mp-webview.scss 中 + .mp-customer-list-card__emphasis / .mp-wv-card__kv 色块。
+ 展开交互可复用详情 Tab 已有的 .mp-customer-detail-card__toggle 节奏。 + 打开文件:bak/mobile-ui/shanxia-mp-crm-customer-list-card-demo.html +
+
+ + + + diff --git a/bak/mobile-ui/shanxia-mp-crm-pl-cert-style-align-demo.html b/bak/mobile-ui/shanxia-mp-crm-pl-cert-style-align-demo.html new file mode 100644 index 000000000..39717863f --- /dev/null +++ b/bak/mobile-ui/shanxia-mp-crm-pl-cert-style-align-demo.html @@ -0,0 +1,1683 @@ + + + + + + 山峡化工 · CRM + 危化品证 · 样式对齐 Demo + + + +
+ + + + +
+
9:41山峡 · Demo100%
+
+ + +
+
+
+ +

客户管理

+
+ +
+
+ + + + + + +
+
+
+ + + +
+
+ + + +
+
+ + + + +
+
+
+
+

共 128 位客户 · 已加载 20 位

+
+
+
+
苏州新材料有限公司
+ 正式客户 +
+
+
客户编号KH-20260301-018
+
联系人陈先生 138****2201
+
跟进人王销售
+
所属区域江苏 / 苏州
+
+
最近跟进 2026-10-16
+
+
+ + +
+
+
+
+
+
合肥化工贸易
+ 公海 +
+
+
客户编号KH-20260218-006
+
意向产品甲醇
+
所属区域安徽
+
+
创建 2026-02-18
+
+
+ +
+
+
+
+
+
南通物流合作方
+ 潜在 +
+
+
客户编号KH-20260112-003
+
手机号139****8800
+
+
创建 2026-01-12
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+ +
+
+ + +
+
+
+ +

产品管理

+
+ +
+
+ + + +
+
+
+ + + +
+
+ + + +
+
+ + + + +
+
+
+
+
+
+
+
工业甲醇
+ 启用 +
+
+
危化标识易制毒
+
规格型号M99.9
+
+
+
产品编号CP-000128
+
产品分类危化品 / 有机溶剂 / 甲醇
+
库存1,280 吨
+
+
更新 2026-10-12
+
+
+ +
+
+
+
+
+
双氧水 27.5%
+ 启用 +
+
+
危化标识易制爆
+
规格型号H2O2-27.5
+
+
+
产品编号CP-000096
+
产品分类危化品 / 氧化剂
+
+
更新 2026-09-28
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+ +

报价单管理

+
+ +
+
+ + + + + +
+
+
+ + + +
+
+ + + + + +
+
+ + + +
+
+
+
+
+
+
+
苏州新材料 · 甲醇季度报价
+ 审批中 +
+
报价金额
+
128,600.00
+
+
报价类型标准报价
+
客户苏州新材料有限公司
+
+
+
报价单号BJ-20261015-002
+
跟进人王销售
+
+
2026-10-15
+
+
+ + +
+
+
+
+
+
合肥化工 · 双氧水询价
+ 已通过 +
+
报价金额
+
56,000.00
+
+
报价单号BJ-20261010-018
+
客户合肥化工贸易
+
+
2026-10-10
+
+
+
+
+
+ +
+ +
+
+ + +
+
+
+ +

报价单审批

+
+ +
+
+ + + +
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+
+
+
+
苏州新材料 · 甲醇季度报价
+ 待审批 +
+
报价金额
+
128,600.00
+
+
报价单号BJ-20261015-002
+
申请人王销售
+
当前环节销售经理审批
+
+
提交 10-15 14:20
+
+
+ + +
+
+
+
+
+
南通物流 · 年度框架报价
+ 待审批 +
+
报价金额
+
980,000.00
+
+
报价单号BJ-20261014-009
+
申请人李经理
+
+
提交 10-14 09:05
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ +

合同管理

+
+ +
+
+ + + + + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + +
+
+
+
+
+
+
+
苏州新材料销售合同
+ 执行中 +
+
合同金额
+
860,000.00
+
+
合同类型销售合同
+
客户苏州新材料有限公司
+
+
+
合同编号HT-20261012-001
+
签约日期2026-10-12
+
+
2026-10-12
+
+
+ + +
+
+
+
+
+
合肥化工框架协议
+ 审批中 +
+
+
合同类型框架合同
+
有效期至2027-09-20
+
+
+
合同编号HT-20260920-015
+
客户合肥化工贸易
+
+
2026-09-20
+
+
+
+
+
+ +
+ +
+
+ + +
+
+
+ +

合同审批

+
+ +
+
+ + + +
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+
+
+
+
合肥化工框架协议
+ 待审批 +
+
+
合同类型框架合同
+
+
+
合同编号HT-20260920-015
+
申请人赵主管
+
当前环节法务审批
+
+
提交 09-20 11:30
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ +

危化品证上传

+
+
+ + + + + +
+
+ +
+
+ + + +
+
+ + + + + +
+
+ + + +
+
+
+
+

顺序:状态 Tab → 检索框 → 日期/齐备/更多。批量齐备仍用底栏。

+
+
+
+ +
YSJH20261016003
+ 待确认 +
+
+
线路苏州新材料 → 合肥化工贸易
+
证书缺口缺运输证
+
+
+
计划类型外采配送
+
车牌 / 人员苏 E·A12345 · 张师傅 / 李现场
+
+
2026-10-16
+
+
+ + + +
+
+
+
+
+ +
YSJH20261015011
+ 已齐备 +
+
+
线路南通物流 → 本公司仓库
+
+
+
计划类型自有配送
+
车牌 / 人员苏 A·B6688 · 王师傅
+
+
2026-10-15
+
+
+ + +
+
+
+
+

共 36 条计划 · 已加载 10 条 · 已选 1 项

+
+ +
+
+
+ 已选 1 项 + + + +
+
+ + +
+
+
+ +

报价详情

+
+
+
+ + + +
+
+
+
+
报价单号BJ-20261015-002
+
状态审批中
+
报价主题苏州新材料 · 甲醇季度报价
+
报价金额¥128,600.00
+
客户苏州新材料有限公司
+
报价类型标准报价
+
跟进人王销售
+
报价日期2026-10-15
+
当前环节销售经理审批
+
+
+
+
+
+
王
+
+
提交申请
+
王销售
+
2026-10-15 14:20
+
+
+
+
李
+
+
销售经理审批
+
待处理
+
+
+
+
+
+
+
报价附件
+
+
+ 报价单 +
+
+
+ PDF + 报价说明.pdf +
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+ +

新增客户

+
+
+
+ + + + +
+
+
+

基础信息

+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+

附件

+
附件图片 / 文件
+

样式对齐小程序「我的发票夹」:72×72 宫格;图片缩略图;非图片显示扩展名+文件名;右上角 × 删除;末位虚线「+」添加。

+
+
+ 门头照 + +
+
+
+ PDF + 营业执照.pdf +
+ +
+
+
+
+
+
+
+ + +
+
+ +
+ + +
+
+ +
+

与现状对照(落地时按此收敛)

+ +

参考实现:web-admin/src/views/m/pl/plan/index.vue + web-admin/src/styles/mp-webview.scss

+
+
+ + + + diff --git a/bak/mobile-ui/shanxia-mp-crm-product-list-card-demo.html b/bak/mobile-ui/shanxia-mp-crm-product-list-card-demo.html new file mode 100644 index 000000000..7072d844b --- /dev/null +++ b/bak/mobile-ui/shanxia-mp-crm-product-list-card-demo.html @@ -0,0 +1,494 @@ + + + + + + 山峡化工 · 产品管理列表卡 · 去色块 + 折叠 Demo + + + +
+ + +
+ + + +
+ +
+ +
+
+ 现状 两处色块 + 状态 Tab +
+
+
9:41Demo
+
+
+ +

产品管理

+
+
+ 全部 + 上架 + 下架 +
+ +
+
+ + + +
+
+
+
+
+
浓硫酸(工业级)
+
2026-10-12 14:20
+
+ 上架 +
+
+ 产品编号 + P-H2SO4-001 +
+
+
产品分类危化品 / 酸类 / 硫酸
+
规格型号98% · 吨罐
+
+ 危化标识 + + 易制毒 + 易制爆 + +
+
+
+ + + + +
+
+ +
+
+
+
氢氧化钠片碱
+
2026-10-08 09:05
+
+ 上架 +
+
+ 产品编号 + P-NaOH-218 +
+
+
产品分类基础化工 / 碱类
+
规格型号99% · 25kg袋
+
+
+ + + + +
+
+

共 2 条(示意)

+
+ +
+
+ + +
+
+ 方案 无色块 + 折叠展开 +
+
+
9:41Demo
+
+
+ +

产品管理

+
+ + +
+
+ + + +
+
+ +
+
+
+
+ 浓硫酸(工业级) + + 毒 + 爆 + +
+
上架 · P-H2SO4-001 · 2026-10-12 14:20
+
+ 上架 +
+
+
产品分类危化品 / 酸类 / 硫酸
+
规格型号98% · 吨罐
+
+ + +
+ + + + +
+
+ + +
+
+
+
氢氧化钠片碱
+
上架 · P-NaOH-218 · 2026-10-08 09:05
+
+ 上架 +
+
+
产品分类基础化工 / 碱类
+
规格型号99% · 25kg袋
+
+ + +
+ + + + +
+
+

共 2 条 · 仅上架产品(示意)

+
+ +
+
+
+ +
+

字段对照(Web 产品管理列表 → 移动卡)

+

+ 标题区:产品名称(旁贴「毒」「爆」小标,对齐 PC 名称列)+ 右上角状态 Tag「上架」; + meta 行:上架 · 编号 · 创建时间。
+ 预览(默认可见):产品分类、规格型号。
+ 展开:产品编号、品牌、别名、标准价(元)、状态。
+ 不含成本价(对齐 PC 默认可见列)。列表请求固定 status=on;下架后该卡从列表消失。 +

+
+
+ + + + diff --git a/bak/mobile-ui/shanxia-mp-loading-demo.html b/bak/mobile-ui/shanxia-mp-loading-demo.html new file mode 100644 index 000000000..00521293b --- /dev/null +++ b/bak/mobile-ui/shanxia-mp-loading-demo.html @@ -0,0 +1,615 @@ + + + + + + 山峡化工 · H5 通用加载效果 Demo + + + +
+ +
+ + + + +
+ +
+
+
+

A · 结构骨架 推荐

+ 占位和正式列表、详情、表单同结构。用户能认出即将出现的是卡片还是字段。翻页只在末尾补一张骨架卡。 +
+
+
9:41山峡化工
+ +
+
+
←

客户管理

+ +
客户类型 ▾客户级别 ▾更多
+
+
+

正在加载客户列表

+
+
+
+
+
+ +
+
+
←

客户管理

+ +
客户类型 ▾客户级别 ▾更多
+
+
+
+

安庆化轻贸易

KH20261018001 · 经销商
跟进中
+
负责人王敏
最近跟进昨天 16:20
+
+
+

正在加载更多

+
+
+ +
+
+
←

客户详情

+
+
+

正在加载客户详情

+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
←

客户管理

+ +
+
+
+
更多筛选
+
+

正在加载筛选项

+
+
+
+
+
+
+
+
+ +
+
+

B · 呼吸点

+ 把现在运输计划那套收成唯一组件:绿点、两行字、四条闪烁。列表、详情、弹层都用它,只改文案和尺寸。 +
+
+
9:41山峡化工
+
+
←

客户管理

+
+
+

正在加载客户列表

+

请稍候,正在获取客户数据…

+
+
+
+
+
+
←

客户管理

+ +
+
+
+

安庆化轻贸易

KH20261018001 · 经销商
跟进中
+
+

正在加载更多

+
+
+
+
←

客户详情

+
+
+

正在加载客户详情

+

请稍候,正在获取客户资料…

+
+
+
+
+
←

客户管理

+
+
+
选择产品
+
+
+

正在加载产品

+

请稍候…

+
+
+
+
+
+ +
+
+

C · 顶栏进度

+ 绿头底部一条白色不定进度。内容用很淡的骨架,已加载的卡片保持原样。适合觉得整页大加载太重的时候。 +
+
+
9:41山峡化工
+
+
+
←

客户管理

+ +
客户类型 ▾客户级别 ▾更多
+
+ +
+
+
+
+
+
+
+
←

客户管理

+ +
+ +
+
+

安庆化轻贸易

KH20261018001 · 经销商
跟进中
+
+
+

池州新材料

KH20261012018 · 终端
重点
+
+
+
+
+
←

客户详情

+ +
+
+
+
+
+
←

客户管理

+
+
+
更多筛选
+ +
+
+
+
+
+
+
+
+ +
+
+

D · 单一转圈

+ 全站只留一种绿色圆环。页面用 28px 纵向,翻页用 16px 横排,弹层用 22px。文案统一成「正在加载 + 对象名」。 +
+
+
9:41山峡化工
+
+
+
←

客户管理

+ +
客户类型 ▾客户级别 ▾更多
+
+
+ +

正在加载客户列表

+
+
+
+
+
←

客户管理

+ +
+
+
+

安庆化轻贸易

KH20261018001 · 经销商
跟进中
+
+

正在加载更多

+
+
+
+
←

编辑客户

+
+ +

正在加载客户资料

+
+
+
+
←

客户管理

+
+
+
选择产品
+
+ +

正在加载产品

+
+
+
+
+
+
+
+ + + diff --git a/docs/sql/migrations/2026-10-17-mini-crm-customer-webview-menus.sql b/docs/sql/migrations/2026-10-17-mini-crm-customer-webview-menus.sql new file mode 100644 index 000000000..fae70365c --- /dev/null +++ b/docs/sql/migrations/2026-10-17-mini-crm-customer-webview-menus.sql @@ -0,0 +1,42 @@ +-- 小程序 CRM 客户管理 H5 入口。仅新增/恢复移动菜单及相应角色绑定,不修改 Web 菜单。 +SET NAMES utf8mb4; +START TRANSACTION; + +INSERT INTO sys_menu ( + id, menu_name, parent_id, menu_type, path, component, perms, + is_frame, visible, status, tenant_no, order_num, remark, + create_by, create_dept_id, create_time, update_by, update_time, del_flag +) +VALUES + ('MINI_CRM_ROOT', 'CRM管理', '1', 'M', '/mini/crm', NULL, NULL, + 1, '1', '1', 'shanxia2.0', 2, '小程序CRM管理', 'system', '', NOW(), NULL, NOW(), 0), + ('MINI_CRM_CUSTOMER', '客户管理', 'MINI_CRM_ROOT', 'C', 'mp-webview', NULL, 'mini:crm:customer:list', + 1, '1', '1', 'shanxia2.0', 6, '小程序 WebView CRM 客户管理', 'system', '', NOW(), NULL, NOW(), 0) +ON DUPLICATE KEY UPDATE del_flag = 0, update_time = NOW(); + +-- 根据当前 Web 客户菜单权限查找角色,不依赖历史菜单 ID;补齐全部祖先。 +INSERT INTO sys_role_menu ( + id, role_id, menu_id, tenant_no, order_num, remark, + create_by, create_dept_id, create_time, update_by, update_time, del_flag +) +SELECT + MD5(CONCAT(r.id, '|', target.menu_id, '|mini-crm-customer-webview|v1')), + r.id, target.menu_id, r.tenant_no, 0, '小程序客户管理:随 Web crm:customer:list 补绑', + 'system', '', NOW(), NULL, NOW(), 0 +FROM sys_role r +CROSS JOIN ( + SELECT '1' AS menu_id UNION ALL SELECT 'MINI_CRM_ROOT' UNION ALL SELECT 'MINI_CRM_CUSTOMER' +) target +WHERE r.del_flag = 0 + AND EXISTS ( + SELECT 1 FROM sys_role_menu rm + JOIN sys_menu m ON m.id = rm.menu_id AND m.del_flag = 0 + WHERE rm.role_id = r.id AND rm.del_flag = 0 AND m.perms = 'crm:customer:list' + ) + AND NOT EXISTS ( + SELECT 1 FROM sys_role_menu existing + WHERE existing.role_id = r.id AND existing.menu_id = target.menu_id AND existing.del_flag = 0 + ) +ON DUPLICATE KEY UPDATE del_flag = 0, update_time = NOW(); + +COMMIT; diff --git a/docs/sql/migrations/2026-10-17-mini-pl-plan-cert-webview-menus.sql b/docs/sql/migrations/2026-10-17-mini-pl-plan-cert-webview-menus.sql new file mode 100644 index 000000000..d207cab04 --- /dev/null +++ b/docs/sql/migrations/2026-10-17-mini-pl-plan-cert-webview-menus.sql @@ -0,0 +1,77 @@ +-- 小程序运输管理 → 危化品证上传(独立 H5)。MySQL 5.7。 +-- 2026-10-17 已只读确认测试库:1(移动端) → MINI_PL_ROOT(运输管理)。 +-- 执行前备份 sys_menu / sys_role_menu,并确认目标库及下面的父级查询返回一行。 +-- 不新建/更改父级,不改变 Web 菜单和业务表,不额外授予业务写权限。 +SET NAMES utf8mb4; +START TRANSACTION; + +SELECT p.id, p.menu_name, p.parent_id, p.tenant_no +FROM sys_menu p +JOIN sys_menu root ON root.id = p.parent_id +WHERE p.id = 'MINI_PL_ROOT' AND p.parent_id = '1' + AND p.path = '/mini/pl' AND p.tenant_no = 'shanxia2.0' AND p.del_flag = 0 + AND root.path = '/mini' AND root.parent_id = '0' + AND root.tenant_no = p.tenant_no AND root.del_flag = 0; + +INSERT INTO sys_menu ( + id, menu_name, parent_id, menu_type, path, component, perms, + is_frame, visible, status, tenant_no, order_num, remark, + create_by, create_dept_id, create_time, update_by, update_time, del_flag +) +SELECT + '329823eb-e3af-49b2-b656-08f2c2a713f3', '危化品证上传', p.id, 'C', 'mp-webview', NULL, + 'mini:pl:plan-cert:list', 1, '1', '1', p.tenant_no, 5, + '小程序 WebView 危化品证上传', 'system', '', NOW(), NULL, NOW(), 0 +FROM sys_menu p +JOIN sys_menu root ON root.id = p.parent_id +WHERE p.id = 'MINI_PL_ROOT' AND p.parent_id = '1' + AND p.path = '/mini/pl' AND p.tenant_no = 'shanxia2.0' AND p.del_flag = 0 + AND root.path = '/mini' AND root.parent_id = '0' + AND root.tenant_no = p.tenant_no AND root.del_flag = 0 +ON DUPLICATE KEY UPDATE visible = '1', status = '1', del_flag = 0, update_time = NOW(); + +-- 随已有 Web 列表权限角色补齐移动根、运输目录、叶子;不依赖历史 Web 菜单 ID。 +INSERT INTO sys_role_menu ( + id, role_id, menu_id, tenant_no, order_num, remark, + create_by, create_dept_id, create_time, update_by, update_time, del_flag +) +SELECT + MD5(CONCAT(r.id, '|', target.menu_id, '|mini-pl-plan-cert-webview|v1')), + r.id, target.menu_id, r.tenant_no, 0, '小程序危化品证上传:随 Web 列表权限补绑', + 'system', '', NOW(), NULL, NOW(), 0 +FROM sys_role r +CROSS JOIN ( + SELECT '1' AS menu_id UNION ALL SELECT 'MINI_PL_ROOT' + UNION ALL SELECT '329823eb-e3af-49b2-b656-08f2c2a713f3' +) target +WHERE r.del_flag = 0 AND r.tenant_no = 'shanxia2.0' + AND EXISTS ( + SELECT 1 FROM sys_menu leaf + JOIN sys_menu p ON p.id = leaf.parent_id + JOIN sys_menu root ON root.id = p.parent_id + WHERE leaf.id = '329823eb-e3af-49b2-b656-08f2c2a713f3' + AND leaf.perms = 'mini:pl:plan-cert:list' AND leaf.del_flag = 0 + AND leaf.tenant_no = r.tenant_no + AND p.id = 'MINI_PL_ROOT' AND p.parent_id = '1' AND p.path = '/mini/pl' + AND p.tenant_no = r.tenant_no AND p.del_flag = 0 + AND root.path = '/mini' AND root.parent_id = '0' + AND root.tenant_no = r.tenant_no AND root.del_flag = 0 + ) + AND EXISTS ( + SELECT 1 FROM sys_role_menu web + JOIN sys_menu m ON m.id = web.menu_id AND m.del_flag = 0 + WHERE web.role_id = r.id AND web.del_flag = 0 + AND web.tenant_no = r.tenant_no AND m.tenant_no = r.tenant_no + AND m.perms = 'pl:plan-cert:list' + ) + AND NOT EXISTS ( + SELECT 1 FROM sys_role_menu existing + WHERE existing.role_id = r.id AND existing.menu_id = target.menu_id + AND existing.tenant_no = r.tenant_no AND existing.del_flag = 0 + ) +ON DUPLICATE KEY UPDATE del_flag = 0, update_time = NOW(); + +COMMIT; + +SELECT id, menu_name, parent_id, perms, visible, status, del_flag +FROM sys_menu WHERE id = '329823eb-e3af-49b2-b656-08f2c2a713f3'; diff --git a/docs/superpowers/plans/2026-10-15-mp-webview-crm-product.md b/docs/superpowers/plans/2026-10-15-mp-webview-crm-product.md new file mode 100644 index 000000000..144cb6fa5 --- /dev/null +++ b/docs/superpowers/plans/2026-10-15-mp-webview-crm-product.md @@ -0,0 +1,683 @@ +# 小程序 WebView · CRM 产品管理 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:** 在小程序工作台开放「CRM管理 → 产品管理」,通过既有 `mp-webview` 壳打开 `web-admin` `/#/m/crm/product*`,提供与桌面产品管理同等核心能力(列表/详情/增改删/单条上下架/页内分类维护),不含导入导出与批量上下架。 + +**Architecture:** 复用运输计划 WebView 模板(ticket → exchange → `MpWebviewShell`)。新建移动端产品页,样式对齐 `/#/m/pl/plan*`(`mp-webview.scss` 三墙 Token)。业务 API 全部复用 `@/api/crm/product`。桌面 `ProductFormDialog` 增加 `variant="page"` 供 H5 全屏复用;分类维护做独立移动页(不硬套桌面 `ProductCategoryMaintainPanel` 表格)。菜单 SQL 幂等写入 `MINI_CRM_*`,并给已有 `crm:product:list` 的角色自动补绑。 + +**Tech Stack:** Vue 3 · Vue Router hash · Element Plus · Pinia · uni-app web-view · MySQL `sys_menu`/`sys_role_menu` · Node test(`pnpm exec tsx --test`) + +**Spec:** `docs/superpowers/specs/2026-10-15-mp-webview-crm-product-design.md` + +--- + +## 文件结构 + +| 路径 | 职责 | +|------|------| +| `web-admin/src/utils/mp-crm-product-card.ts` | 列表卡片展示字段、状态筛选映射(可单测) | +| `web-admin/src/utils/mp-crm-product-card.test.ts` | 纯函数单测 | +| `web-admin/src/utils/mp-webview.ts` | 增加 `MP_CRM_PRODUCT_LIST_PATH` 常量 | +| `web-admin/src/views/m/crm/product/index.vue` | 列表(搜索/状态筛选/卡片/Speed Dial) | +| `web-admin/src/views/m/crm/product/detail.vue` | 详情 + 底栏编辑/上下架/删除 | +| `web-admin/src/views/m/crm/product/form.vue` | 路由壳,挂载 `ProductFormDialog variant="page"` | +| `web-admin/src/views/m/crm/product/categories.vue` | 分类树维护(移动端) | +| `web-admin/src/components/business/product-form-dialog/index.vue` | 增加 `variant: 'dialog' \| 'page'` | +| `web-admin/src/router/routes/staticRoutes.ts` | 注册 `/m/crm/product*`(catch-all 前) | +| `miniprogram/config/workbench-menus.js` | CRM `visible: true`;产品 `enabled` + code + perms | +| `miniprogram/config/api.js` | `WORKBENCH_ROUTE_MAP['crm-product-webview']` | +| `docs/sql/migrations/2026-10-15-mini-crm-product-webview-menus.sql` | 菜单 + 角色补绑 | +| `docs/web-admin-mp-webview-modules.md` | 补充 CRM 产品对照行 | + +**明确不改:** `mp-webview.vue` 鉴权协议、后端产品业务 API、桌面 `/#/crm/product` 默认行为(仅表单组件增加可选 `variant`,默认仍为 `dialog`)。 + +--- + +### Task 1: 列表卡片纯函数 + 单测 + +**Files:** +- Create: `web-admin/src/utils/mp-crm-product-card.ts` +- Create: `web-admin/src/utils/mp-crm-product-card.test.ts` + +- [ ] **Step 1: 写失败单测** + +```ts +// web-admin/src/utils/mp-crm-product-card.test.ts +import assert from 'node:assert/strict' +import { describe, it } from 'node:test' +import { + MP_PRODUCT_STATUS_FILTERS, + buildProductListQuery, + buildProductCard, + productStatusLabel, + productStatusTagType +} from './mp-crm-product-card' + +describe('MP_PRODUCT_STATUS_FILTERS', () => { + it('defaults on first and includes all/off', () => { + assert.equal(MP_PRODUCT_STATUS_FILTERS[0].value, 'on') + assert.deepEqual( + MP_PRODUCT_STATUS_FILTERS.map((x) => x.value), + ['on', 'all', 'off'] + ) + }) +}) + +describe('buildProductListQuery', () => { + it('defaults statusIn on and passes keyword/page', () => { + assert.deepEqual( + buildProductListQuery({ page: 1, pageSize: 20, statusFilter: 'on', keyword: ' 酸 ' }), + { page: 1, pageSize: 20, statusIn: 'on', keyword: '酸' } + ) + }) + it('omits statusIn when filter is all', () => { + const q = buildProductListQuery({ page: 2, pageSize: 10, statusFilter: 'all', keyword: '' }) + assert.equal(q.page, 2) + assert.equal(q.statusIn, undefined) + assert.equal('keyword' in q, false) + }) + it('sets statusIn off', () => { + assert.equal( + buildProductListQuery({ page: 1, pageSize: 20, statusFilter: 'off', keyword: '' }).statusIn, + 'off' + ) + }) +}) + +describe('buildProductCard', () => { + it('maps fields and tags', () => { + const card = buildProductCard({ + id: 'p1', + productNo: 'SX001', + productName: '硫酸', + categoryPath: '化工 / 酸类', + model: '98%', + status: 'on', + isToxic: 1, + isExplosive: 0 + }) + assert.equal(card.id, 'p1') + assert.equal(card.productNo, 'SX001') + assert.equal(card.statusLabel, '上架') + assert.equal(card.statusTagType, 'success') + assert.equal(card.showToxic, true) + assert.equal(card.showExplosive, false) + }) +}) + +describe('productStatusTagType', () => { + it('maps on→success off→info', () => { + assert.equal(productStatusTagType('on'), 'success') + assert.equal(productStatusTagType('off'), 'info') + assert.equal(productStatusLabel('on'), '上架') + assert.equal(productStatusLabel('off'), '下架') + }) +}) +``` + +- [ ] **Step 2: 跑测确认失败** + +```bash +cd web-admin && pnpm exec tsx --test src/utils/mp-crm-product-card.test.ts +``` + +Expected: 无法解析 `./mp-crm-product-card` 或 FAIL + +- [ ] **Step 3: 实现纯函数** + +```ts +// web-admin/src/utils/mp-crm-product-card.ts +export type MpProductStatusFilter = 'on' | 'all' | 'off' + +export const MP_PRODUCT_STATUS_FILTERS: Array<{ value: MpProductStatusFilter; label: string }> = [ + { value: 'on', label: '上架' }, + { value: 'all', label: '全部' }, + { value: 'off', label: '下架' } +] + +export function productStatusLabel(status?: string): string { + if (status === 'off') return '下架' + if (status === 'on') return '上架' + return status || '—' +} + +export function productStatusTagType(status?: string): 'success' | 'info' | 'warning' { + if (status === 'on') return 'success' + if (status === 'off') return 'info' + return 'warning' +} + +export function buildProductListQuery(input: { + page: number + pageSize: number + statusFilter: MpProductStatusFilter + keyword: string +}): Record { + const params: Record = { + page: input.page, + pageSize: input.pageSize + } + if (input.statusFilter === 'on' || input.statusFilter === 'off') { + params.statusIn = input.statusFilter + } + const kw = String(input.keyword || '').trim() + if (kw) params.keyword = kw + return params +} + +export function buildProductCard(row: { + id: string + productNo?: string + productName?: string + categoryPath?: string + categoryName?: string + model?: string + status?: string + isToxic?: number + isExplosive?: number +}) { + return { + id: row.id, + productNo: row.productNo || '—', + productName: row.productName || '—', + categoryPath: row.categoryPath || row.categoryName || '—', + model: row.model || '—', + status: row.status || '', + statusLabel: productStatusLabel(row.status), + statusTagType: productStatusTagType(row.status), + showToxic: Number(row.isToxic) === 1, + showExplosive: Number(row.isExplosive) === 1 + } +} +``` + +- [ ] **Step 4: 跑测确认通过** + +```bash +cd web-admin && pnpm exec tsx --test src/utils/mp-crm-product-card.test.ts +``` + +Expected: 全部 pass + +- [ ] **Step 5: Commit** + +```bash +git add web-admin/src/utils/mp-crm-product-card.ts web-admin/src/utils/mp-crm-product-card.test.ts +git commit -m "$(cat <<'EOF' +feat(web-admin): add mp CRM product card query helpers. + +EOF +)" +``` + +--- + +### Task 2: 菜单 SQL(移动端 CRM + 产品 + 角色补绑) + +**Files:** +- Create: `docs/sql/migrations/2026-10-15-mini-crm-product-webview-menus.sql` + +- [ ] **Step 1: 写入完整幂等 SQL** + +```sql +-- 小程序:CRM管理 → 产品管理(WebView) +-- 给已有 Web 产品管理菜单 CRM00000000000000000000000000003(crm:product:list)的角色自动补绑 +SET NAMES utf8mb4; + +INSERT INTO `sys_menu` ( + `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, + `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, + `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag` +) +SELECT + 'MINI_CRM_ROOT', 'CRM管理', '1', 'M', '/mini/crm', NULL, NULL, + 1, '1', '1', 'shanxia2.0', 2, '小程序CRM管理', + 'system', '', NOW(), NULL, NOW(), 0 +FROM DUAL +WHERE NOT EXISTS ( + SELECT 1 FROM `sys_menu` WHERE `id` = 'MINI_CRM_ROOT' AND `del_flag` = 0 +); + +INSERT INTO `sys_menu` ( + `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, + `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, + `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag` +) +SELECT + 'MINI_CRM_PRODUCT', '产品管理', 'MINI_CRM_ROOT', 'C', 'mp-webview', NULL, + 'mini:crm:product:list', + 1, '1', '1', 'shanxia2.0', 1, '小程序 WebView CRM 产品管理', + 'system', '', NOW(), NULL, NOW(), 0 +FROM DUAL +WHERE NOT EXISTS ( + SELECT 1 FROM `sys_menu` WHERE `id` = 'MINI_CRM_PRODUCT' AND `del_flag` = 0 +); + +INSERT INTO `sys_role_menu` ( + `id`, `role_id`, `menu_id`, `tenant_no`, `order_num`, `remark`, + `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag` +) +SELECT + MD5(CONCAT(r.id, '|', m.menu_id, '|mini-crm-product-webview|v1')), + r.id, + m.menu_id, + IFNULL(NULLIF(r.tenant_no, ''), 'shanxia2.0'), + 0, + '小程序CRM产品管理:随 Web 产品权限补绑', + 'system', '', NOW(), NULL, NOW(), 0 +FROM `sys_role` r +JOIN `sys_role_menu` web + ON web.role_id = r.id + AND web.menu_id = 'CRM00000000000000000000000000003' + AND web.del_flag = 0 +JOIN ( + SELECT '1' AS menu_id UNION ALL + SELECT 'MINI_CRM_ROOT' UNION ALL + SELECT 'MINI_CRM_PRODUCT' +) m +WHERE r.del_flag = 0 + AND NOT EXISTS ( + SELECT 1 FROM `sys_role_menu` x + WHERE x.role_id = r.id AND x.menu_id = m.menu_id AND x.del_flag = 0 + ); +``` + +- [ ] **Step 2: Commit(本 Task 只交 SQL;测试/生产库实施时执行)** + +```bash +git add docs/sql/migrations/2026-10-15-mini-crm-product-webview-menus.sql +git commit -m "$(cat <<'EOF' +docs(sql): add miniprogram CRM product webview menus and role bind. + +EOF +)" +``` + +--- + +### Task 3: 静态路由 + 路径常量 + +**Files:** +- Modify: `web-admin/src/utils/mp-webview.ts` +- Modify: `web-admin/src/router/routes/staticRoutes.ts` + +- [ ] **Step 1: 增加列表路径常量** + +在 `mp-webview.ts` 的 `MP_PLAN_LIST_PATH` 旁增加: + +```ts +export const MP_CRM_PRODUCT_LIST_PATH = '/m/crm/product' +``` + +- [ ] **Step 2: 在 catch-all 之前注册路由(顺序:list → new → categories → :id/edit → :id)** + +```ts + { + path: '/m/crm/product', + name: 'MpCrmProductList', + component: () => import('@views/m/crm/product/index.vue'), + meta: { title: '产品管理', isHideTab: true, isMpWebview: true } + }, + { + path: '/m/crm/product/new', + name: 'MpCrmProductNew', + component: () => import('@views/m/crm/product/form.vue'), + meta: { title: '新增产品', isHideTab: true, isMpWebview: true } + }, + { + path: '/m/crm/product/categories', + name: 'MpCrmProductCategories', + component: () => import('@views/m/crm/product/categories.vue'), + meta: { title: '产品分类', isHideTab: true, isMpWebview: true } + }, + { + path: '/m/crm/product/:id/edit', + name: 'MpCrmProductEdit', + component: () => import('@views/m/crm/product/form.vue'), + meta: { title: '编辑产品', isHideTab: true, isMpWebview: true } + }, + { + path: '/m/crm/product/:id', + name: 'MpCrmProductDetail', + component: () => import('@views/m/crm/product/detail.vue'), + meta: { title: '产品详情', isHideTab: true, isMpWebview: true } + }, +``` + +本步可先建空壳 vue(仅 `MpWebviewShell` + 标题),或与 Task 4–7 同批落地页面;**不得**把路由放在 `/:pathMatch(.*)*` 之后。 + +- [ ] **Step 3: Commit** + +```bash +git add web-admin/src/utils/mp-webview.ts web-admin/src/router/routes/staticRoutes.ts +git commit -m "$(cat <<'EOF' +feat(web-admin): register /m/crm/product static routes. + +EOF +)" +``` + +--- + +### Task 4: 移动端列表页 + +**Files:** +- Create: `web-admin/src/views/m/crm/product/index.vue` + +对照:`web-admin/src/views/m/pl/plan/index.vue`(Header / filter / card / speed-dial / `goBack` → 工作台)。 + +- [ ] **Step 1: 实现列表页骨架与数据加载** + +关键行为: + +1. `MpWebviewShell @ready` 后再拉列表 +2. `fetchProductList(buildProductListQuery(...))`;解析 `res.list` / `res.total`(与桌面一致) +3. 分类全路径:先 `fetchCategoryTree`,用 `buildPathLabelMapFromTreeRoots` 或扁平 + `buildTreePathLabelFromFlat`(`@/utils/tree-path`,分隔符 ` / `)填到卡片 `categoryPath` +4. 状态筛选面板用 `MP_PRODUCT_STATUS_FILTERS`;默认 `on` +5. 搜索框 enter / 清除后 `reload` +6. 卡片点击 → `router.push(\`/m/crm/product/${id}\`)` +7. Speed Dial:新增 → `/m/crm/product/new`;产品分类 → `/m/crm/product/categories` +8. 返回:`goMpWebviewWorkbench()`(与运输计划列表相同,来自 `@/utils/mp-webview`) +9. `import '@/styles/mp-webview.scss'` +10. **不要**出现导入/导出/批量上下架/多选 + +列表卡片模板要点: + +```vue +
+
{{ card.productName }}
+
{{ card.productNo }} · {{ card.model }}
+
{{ card.categoryPath }}
+
+ {{ card.statusLabel }} + 易制毒 + 易制爆 +
+
+``` + +分页:首版可用「加载更多」或底部分页;与运输计划现网一致即可(若运输计划是一次拉满/滚加载,产品跟同样模式;否则 `page`/`pageSize` + 触底加载)。 + +- [ ] **Step 2: 本地验证** + +```bash +cd web-admin && pnpm dev +``` + +浏览器打开(需已登录桌面或按现网 mp 调试方式)`/#/m/crm/product`,确认无权限/有权限两种表现、默认只见上架、搜索可用。 + +- [ ] **Step 3: Commit** + +```bash +git add web-admin/src/views/m/crm/product/index.vue +git commit -m "$(cat <<'EOF' +feat(web-admin): add mp webview CRM product list page. + +EOF +)" +``` + +--- + +### Task 5: 详情页(编辑 / 单条上下架 / 删除) + +**Files:** +- Create: `web-admin/src/views/m/crm/product/detail.vue` + +对照:`web-admin/src/views/m/pl/plan/detail.vue` 的 header + section + 底栏;字段对齐桌面 `product-view-dialog` / `crm/product` 查看区。 + +- [ ] **Step 1: 实现详情** + +1. `fetchProductDetail({ id })` +2. 分区展示:基础信息(编号/名称/拼音/分类全路径/型号/条码/税率/库存/预警/状态/毒爆)、描述备注、图片(逗号拆 URL 预览)、品牌列表、别名列表 +3. 底栏: + - 编辑 → `/m/crm/product/:id/edit` + - 上架/下架:当前 `on` 则显示「下架」,否则「上架」;确认后 `fetchUpdateProductStatus({ ids: [id], status: 'on'|'off' })` 成功后刷新 + - 删除:`:disabled="!canDeleteByCreator(detail)"`,提示用现有 `CREATOR_DELETE_TIP`;确认后 `fetchDeleteProduct({ id })`,成功回列表 +4. 返回列表:`router.push(MP_CRM_PRODUCT_LIST_PATH)` +5. 加载中用运输计划同款 skeleton class + +- [ ] **Step 2: 手工验证上下架与删除权限** + +- [ ] **Step 3: Commit** + +```bash +git add web-admin/src/views/m/crm/product/detail.vue +git commit -m "$(cat <<'EOF' +feat(web-admin): add mp webview CRM product detail actions. + +EOF +)" +``` + +--- + +### Task 6: ProductFormDialog `variant="page"` + form 路由壳 + +**Files:** +- Modify: `web-admin/src/components/business/product-form-dialog/index.vue` +- Create: `web-admin/src/views/m/crm/product/form.vue` + +对照:`PlPlanFormDialog` 的 `variant` / `isPageVariant`;`views/m/pl/plan/form.vue`。 + +- [ ] **Step 1: 给 ProductFormDialog 增加 variant(默认 dialog,桌面行为不变)** + +```ts +const props = withDefaults( + defineProps<{ + modelValue: boolean + productId?: string | null + variant?: 'dialog' | 'page' + }>(), + { variant: 'dialog' } +) +const isPageVariant = computed(() => props.variant === 'page') +``` + +模板: + +- `variant=dialog`:保持现有 `el-dialog` +- `variant=page`:不渲染 dialog 外壳;根节点为 `div.mp-product-form-page`(全宽、底栏 sticky);`label-position="top"`;栅格改为单列(`form-grid-1` 或覆盖 `form-grid-3` 为 1 列);页内提供取消/确定底栏(图标 Close/Check) +- `visible`:page 模式下 `modelValue` 可恒为 `true`;`@close`/`success` 事件保留 +- 打开时仍加载详情 / 分类树;提交逻辑不变(`fetchCreateProduct` / `fetchUpdateProduct`,含 brands、aliases、images) +- page 模式下「维护分类」可改为 `router.push('/m/crm/product/categories')`(若桌面有分类入口按钮则分支;没有则仅靠 Speed Dial / 表单旁链) + +桌面调用处**不要**传 `variant`,保持 dialog。 + +- [ ] **Step 2: 实现 form.vue 壳** + +```vue + +``` + +- `productId`:`MpCrmProductNew` → `undefined`;edit → `route.params.id` +- 成功:回详情或列表(新增建议进详情 `id`;若接口返回 id 用返回值,否则回列表) +- `import '@/styles/mp-webview.scss'` + +- [ ] **Step 3: 验证全字段可保存(含图片、品牌、别名)** + +- [ ] **Step 4: Commit** + +```bash +git add web-admin/src/components/business/product-form-dialog/index.vue web-admin/src/views/m/crm/product/form.vue +git commit -m "$(cat <<'EOF' +feat(web-admin): add page variant for product form in mp webview. + +EOF +)" +``` + +--- + +### Task 7: 分类维护移动页 + +**Files:** +- Create: `web-admin/src/views/m/crm/product/categories.vue` + +- [ ] **Step 1: 实现移动端分类树** + +不要直接嵌桌面 `ProductCategoryMaintainPanel`(表格过重)。实现: + +1. `fetchCategoryTree` 展示可展开树卡片(本级名称;缩进表示层级) +2. 顶栏:返回产品列表 +「新增」 +3. 节点操作:新增子级 / 编辑 / 删除(删除用 `canDeleteByCreator` + `fetchDeleteCategory`) +4. 新增/编辑:Bottom Sheet 或页内表单(字段与桌面分类表单一致:名称、父级、状态等——对照 `product-category-maintain-panel` 提交字段) +5. 成功后刷新树;返回 `MP_CRM_PRODUCT_LIST_PATH` 或 `router.back()` + +API: + +- `fetchCategoryTree` / `fetchCreateCategory` / `fetchUpdateCategory` / `fetchDeleteCategory` + +- [ ] **Step 2: 手工验证增删改后,产品表单树选可见新节点** + +- [ ] **Step 3: Commit** + +```bash +git add web-admin/src/views/m/crm/product/categories.vue +git commit -m "$(cat <<'EOF' +feat(web-admin): add mp webview CRM product category page. + +EOF +)" +``` + +--- + +### Task 8: 小程序工作台入口 + +**Files:** +- Modify: `miniprogram/config/workbench-menus.js` +- Modify: `miniprogram/config/api.js` + +- [ ] **Step 1: 打开 CRM 模块并配置产品菜单** + +将 CRM 块改为: + +```js +{ + key: 'crm', + title: 'CRM 管理', + desc: '产品管理', + iconText: 'CRM', + visible: true, + menus: [ + { + name: '产品管理', + enabled: true, + code: 'crm-product-webview', + icon: '📦', + perms: 'mini:crm:product:list' + } + // 其它 CRM 叶子本期可删除或保留 enabled:false;若保留且无 code,须确保过滤器不展示 + ] +} +``` + +建议本期 **只保留产品管理一项** enabled,避免灰卡噪音;其它菜单可暂时从数组移除或 `enabled: false` 且无 perms(过滤器应隐藏)。 + +- [ ] **Step 2: WORKBENCH_ROUTE_MAP** + +在 `miniprogram/config/api.js`: + +```js +'crm-product-webview': + PAGE_PATHS.mpWebview + '?path=' + encodeURIComponent('/m/crm/product') +``` + +- [ ] **Step 3: Commit** + +```bash +git add miniprogram/config/workbench-menus.js miniprogram/config/api.js +git commit -m "$(cat <<'EOF' +feat(miniprogram): enable CRM product webview workbench entry. + +EOF +)" +``` + +--- + +### Task 9: 接入文档更新 + 回归清单 + +**Files:** +- Modify: `docs/web-admin-mp-webview-modules.md` + +- [ ] **Step 1: 在「运输计划对照」旁增加 CRM 产品对照** + +```markdown +## CRM 产品对照 + +- 列表 `/m/crm/product`,详情 `/:id`,表单 `/new` `/:id/edit`,分类 `/categories` +- 工作台 code `crm-product-webview`,perms `mini:crm:product:list` +- 业务 API:现有 `/web/crm/products/*`、`/web/crm/product-categories/*` +- 不做:导入/导出/批量上下架 +``` + +- [ ] **Step 2: 回归(对照 spec §10)** + +在测试库执行 Task 2 SQL 后: + +1. 有 Web 产品权的角色:小程序工作台可见「CRM管理 → 产品管理」 +2. 进入后列表与桌面同账号数据一致(默认上架) +3. 搜索、状态筛选、详情、新增、编辑、单条上下架、删除(非创建人不可删) +4. 分类维护后表单可选 +5. 图片/品牌/别名保存回显 +6. 401 回小程序,不到桌面登录 +7. 移动端无导入/导出/批量上下架 +8. 桌面 `/#/crm/product` 仍正常(dialog 形态) + +- [ ] **Step 3: Commit** + +```bash +git add docs/web-admin-mp-webview-modules.md +git commit -m "$(cat <<'EOF' +docs: document CRM product as mp webview module. + +EOF +)" +``` + +--- + +## Spec 覆盖自检 + +| Spec 项 | Task | +|---------|------| +| 嵌套 H5 / 复用壳 | 3–8(不改 ticket 协议) | +| 列表+详情+增改删+单条上下架 | 4, 5, 6 | +| 不做导入导出批量 | 4 明确禁止;手工回归 | +| 全字段表单 | 6 | +| 页内分类 CRUD | 7 | +| 三墙样式对齐运输计划 | 4–7 import `mp-webview.scss` | +| 菜单 MINI_CRM_* + 角色补绑 | 2 | +| 工作台 visible + route map | 8 | +| 双权限 | 2 + 8 + 现有 API | +| 发版说明 | 9 + spec §9 | + +--- + +## 执行说明 + +实施前建议在隔离 worktree(`using-git-worktrees`)。每 Task 完成后跑对应单测/手工点,再 commit。后端无新接口;本地需能访问现有 CRM 产品 API。 diff --git a/docs/superpowers/plans/2026-10-15-pl-segment-export-extend.md b/docs/superpowers/plans/2026-10-15-pl-segment-export-extend.md new file mode 100644 index 000000000..6338ec8a5 --- /dev/null +++ b/docs/superpowers/plans/2026-10-15-pl-segment-export-extend.md @@ -0,0 +1,288 @@ +# 运输计划相关列表导出扩展 · 段次×产品行 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:** 危化品证、运输归档、合同完善导出对齐列表段次×产品行(方案 A);出库单已完成仅验收。 + +**Architecture:** 复用基线 `_iter_segment_product_slots` / `_format_stop_segment_label`;归档改造 `build_plan_archive_export_rows` 为段次多行 + `planQty`/`actualQty`/`unitPrice`/`amount`;合同完善 `export_contract_gaps` 对缺口计划做段次展开;证件仅前端注入 `stopSegment`。 + +**Tech Stack:** Python/FastAPI、pytest、Vue 3 + +**Spec:** `docs/superpowers/specs/2026-10-15-pl-segment-export-extend-design.md` + +**Do NOT git commit unless user explicitly asks.** + +--- + +## File map + +| 文件 | 职责 | +|------|------| +| `web-admin/src/views/pl/plan-cert/index.vue` | 导出列注入 `stopSegment` | +| `backend/app/api/pl/plan.py` | `PLAN_ARCHIVE_EXPORT_COLUMNS`、`ARCHIVE_PRICE_EXPORT_FIELDS`、`CONTRACT_GAP_EXPORT_COLUMNS`、`export_contract_gaps` | +| `backend/app/services/pl_plan_archive_export.py` | 段次展开替换配对宽表默认路径 | +| `backend/tests/test_pl_plan_archive_export.py` | 归档段次导出用例 | +| `backend/tests/test_pl_plan_contract_gap_export.py`(新建或扩现有) | 合同完善段次导出用例 | +| `web-admin/src/views/pl/plan-archive/index.vue` | 导出可见列映射对齐新 field(`stopSegment`、去掉旧宽列 prop) | +| `web-admin/src/views/pl/plan-contract/index.vue` | `contractGapExportColumns` 对齐新列 | + +--- + +### Task 1: 危化品证上传 — 注入 stopSegment + +**Files:** +- Modify: `web-admin/src/views/pl/plan-cert/index.vue` + +- [ ] **Step 1: 改 `planCertExportColumns`** + +对照运输计划列表写法,在 `planNo` 后插入 `stopSegment`: + +```typescript +const planCertExportColumns = computed(() => { + const skip = new Set([ + 'loadCustomer', + 'deliveryCustomer', + 'loadAddressTime', + 'deliveryAddressTime' + ]) + const cols = visibleColumns.value + .filter((col) => !skip.has(col)) + .map((col) => PLAN_CERT_EXPORT_COLUMN_FIELD_MAP[col] || col) + if (!cols.includes('planNo')) cols.unshift('planNo') + const planNoIdx = cols.indexOf('planNo') + if (!cols.includes('stopSegment')) { + cols.splice(planNoIdx + 1, 0, 'stopSegment') + } + return cols +}) +``` + +- [ ] **Step 2: 自检** — 读文件确认 splice 存在;无需后端改动。 + +--- + +### Task 2: 归档导出 — 失败测试(段次×产品) + +**Files:** +- Modify: `backend/tests/test_pl_plan_archive_export.py` + +- [ ] **Step 1: 新增/改写主用例为段次多行** + +将 `test_build_plan_archive_export_rows_pair_mode_and_single_side` 的「默认 stop_kind=None → 1 行配对」改为期望: + +```python +# stop_kind=None → 段次展开:装货 1 行 + 送货 1 行 = 2 行 +rows = build_plan_archive_export_rows(..., stop_kind=None) +assert len(rows) == 2 +assert [r["stopSegment"] for r in rows] == ["装货", "送货 #2"] +assert rows[0]["loadCustomer"] == internal +assert rows[0]["deliveryCustomer"] == "" +assert rows[0]["planQty"] == ... # load product plan_qty +assert rows[0]["actualQty"] == Decimal("10") # inbound +assert rows[0]["unitPrice"] == Decimal("100") +assert rows[1]["deliveryCustomer"] == "外部客户" +assert rows[1]["loadCustomer"] == "" +assert rows[1]["actualQty"] == Decimal("9") +# 不得再有 loadPlanQty + deliveryPlanQty 同排有值的配对语义 +assert "loadPlanQty" not in rows[0] or rows[0].get("loadPlanQty") is None # 更好:列定义已无此 field,行 dict 可不含 +``` + +`stop_kind="load"` / `"delivery"` 仍只输出对应侧行(可用 `stopSegment` 断言,兼容旧 `stopKind` 可删)。 + +- [ ] **Step 2: 改写依赖配对的测试** + +- `test_append_paired_product_rows_*`:若配对函数保留仅供内部/删除,则删除或改为测新 append helper。 +- 品牌/别名用例改为走 `build_plan_archive_export_rows` 段次路径断言。 + +- [ ] **Step 3: 跑测确认 RED** + +```bash +cd backend && . venv/bin/activate && PYTHONPATH=. pytest tests/test_pl_plan_archive_export.py -v --tb=line +``` + +--- + +### Task 3: 归档导出 — 实现段次列与行构建 + +**Files:** +- Modify: `backend/app/api/pl/plan.py`(`PLAN_ARCHIVE_EXPORT_COLUMNS`、`ARCHIVE_PRICE_EXPORT_FIELDS`) +- Modify: `backend/app/services/pl_plan_archive_export.py` + +- [ ] **Step 1: 替换 `PLAN_ARCHIVE_EXPORT_COLUMNS`** + +```python +PLAN_ARCHIVE_EXPORT_COLUMNS = [ + ExportColumn(title="序号", field="rowNo"), + ExportColumn(title="计划编号", field="planNo"), + ExportColumn(title="段次", field="stopSegment"), + ExportColumn(title="合同编号", field="contractNo"), + ExportColumn(title="计划日期", field="planDate"), + ExportColumn(title="归档状态", field="archiveStatus"), + ExportColumn(title="跟进状态", field="followStatus"), + ExportColumn(title="单据类型", field="planType"), + ExportColumn(title="装货客户", field="loadCustomer"), + ExportColumn(title="装货地址", field="loadAddress"), + ExportColumn(title="装货时间", field="loadTime"), + ExportColumn(title="送货客户", field="deliveryCustomer"), + ExportColumn(title="送货地址", field="deliveryAddress"), + ExportColumn(title="送货时间", field="deliveryTime"), + ExportColumn(title="产品名称", field="productName"), + ExportColumn(title="品牌", field="brandName"), + ExportColumn(title="别名", field="aliasName"), + ExportColumn(title="型号/规格", field="model"), + ExportColumn(title="包装", field="packageSpec"), + ExportColumn(title="单位", field="unit", dict_type="crm_product_unit"), + ExportColumn(title="计划量", field="planQty"), + ExportColumn(title="实际量", field="actualQty"), + ExportColumn(title="单价(元)", field="unitPrice"), + ExportColumn(title="金额(元)", field="amount"), + ExportColumn(title="车牌号", field="licensePlate"), + ExportColumn(title="运费单位", field="freightType"), + ExportColumn(title="运费单价", field="freightPrice"), + ExportColumn(title="运费金额", field="freightAmount"), + ExportColumn(title="ERP", field="erpEntered"), + ExportColumn(title="备注", field="remark"), +] +``` + +`ARCHIVE_PRICE_EXPORT_FIELDS` 保留 `unitPrice`/`amount`/`freightPrice`/`freightAmount`;可移除已删除的 `loadUnitPrice` 等(过滤仍安全)。 + +- [ ] **Step 2: 重写 `build_plan_archive_export_rows` 默认路径** + +伪逻辑: + +```python +from app.api.pl.plan import _iter_segment_product_slots, _format_stop_segment_label +# 避免循环 import:把 _iter_segment_product_slots / _format_stop_segment_label +# 抽到 app/services/pl/plan_list_export_segments.py 更干净(推荐本 Task 内抽取) +``` + +**推荐抽取**(若 `plan.py` ↔ `pl_plan_archive_export.py` 循环导入): + +- Create: `backend/app/services/pl/plan_list_export_segments.py` + - `iter_segment_product_slots` + - `format_stop_segment_label` +- Update `plan.py` 改为从该模块 import(保持 `_iter_segment_product_slots` 别名或直接替换调用) +- Archive/contract 从该模块 import + +对每个 plan: + +1. `plan_common = _plan_common_export_fields(...)` +2. 取 stops;legacy 无段 → 旧 `_append_legacy_plan_product_rows` 但补 `stopSegment=""`、`planQty`/`actualQty` +3. 有段:`slots = iter_segment_product_slots(load, deliveries)`;若 `stop_kind=="load"` 只保留 load;`=="delivery"` 只保留 delivery +4. 每槽位一行: + - `stopSegment = format_stop_segment_label(kind, seq)` + - 装货行:填 loadCustomer/Address/Time,delivery 侧空;送货行相反 + - `contractNo` = 本段合同 label(`format_stop_contract_export_label`) + - 产品 identity + `planQty`/`actualQty`/`unitPrice`/`amount` 用现有 `_get_stop_archive_*` +5. `stop_customer_keywords`:保留——装或送客户匹配即保留该行(按行侧客户过滤) + +可删除或停用 `_append_paired_product_rows`(若测试不再引用)。 + +- [ ] **Step 3: 测试全绿** + +```bash +cd backend && . venv/bin/activate && PYTHONPATH=. pytest tests/test_pl_plan_archive_export.py tests/test_pl_plan_list_export.py -v --tb=line +``` + +- [ ] **Step 4: 前端归档导出列** + +`plan-archive/index.vue`:导出 columns 映射增加 `stopSegment`;若前端曾请求 `loadPlanQty` 等,改为 `planQty`/`actualQty`/`unitPrice`/`amount`(与列表 prop 一致)。找到构建 export columns 的 computed,对齐新 `PLAN_ARCHIVE_EXPORT_COLUMNS`。 + +--- + +### Task 4: 合同完善导出 — 测试 + 实现 + +**Files:** +- Create/Modify: `backend/tests/test_pl_plan_contract_gap_export.py`(或扩现有相关测) +- Modify: `backend/app/api/pl/plan.py`(`CONTRACT_GAP_EXPORT_COLUMNS`、`export_contract_gaps`) +- Modify: `web-admin/src/views/pl/plan-contract/index.vue` + +- [ ] **Step 1: 写失败测试** + +对 `export_contract_gaps` 的行构建逻辑抽函数更易测,例如: + +```python +def build_contract_gap_export_rows(db, tenant_no, gap_items, stops_by_plan) -> list[dict]: + ... +``` + +测试:一计划,装货缺合同 + 两送货段有产品 → 多行;装货行 `gapType=="缺供方合同"`(或与现文案一致的短标签);送货行若无缺口则 `gapType==""`;`stopSegment` 正确。 + +缺口判定复用 `stop_contract_gap(customer_name, len(contracts))`(`pl_plan_contract_gap.py`)。 + +- [ ] **Step 2: 更新列定义** + +```python +CONTRACT_GAP_EXPORT_COLUMNS = [ + ExportColumn(title="计划编号", field="planNo"), + ExportColumn(title="段次", field="stopSegment"), + ExportColumn(title="计划日期", field="planDate"), + ExportColumn(title="送货时间", field="deliveryTimes"), + ExportColumn(title="单据类型", field="planType"), + ExportColumn(title="跟进状态", field="followStatus"), + ExportColumn(title="装货客户", field="loadCustomer"), + ExportColumn(title="送货客户", field="deliveryCustomer"), + ExportColumn(title="产品名称", field="productName"), + ExportColumn(title="供方", field="supplierName"), + ExportColumn(title="需方", field="customerName"), + ExportColumn(title="缺口类型", field="gapType"), +] +``` + +- [ ] **Step 3: 实现 `export_contract_gaps`** + +1. 仍 `list_plan_contract_gaps(...)` 得 items(含 plan id) +2. `load_plan_stops_grouped` for those ids +3. 对每个 gap item / plan:展开 slots;填计划级字段 + 段字段 + 产品名 + `gapType` +4. followStatus/planType 中文标签保持现有 + +- [ ] **Step 4: 前端 `contractGapExportColumns`** + +```typescript +const contractGapExportColumns = [ + 'planNo', + 'stopSegment', + 'planDate', + 'deliveryTimes', + 'planType', + 'followStatus', + 'loadCustomer', + 'deliveryCustomer', + 'productName', + 'supplierName', + 'customerName', + 'gapType' +] +``` + +- [ ] **Step 5: 跑测** + +```bash +cd backend && . venv/bin/activate && PYTHONPATH=. pytest tests/test_pl_plan_contract_gap_export.py tests/test_pl_plan_list_export.py tests/test_pl_plan_archive_export.py -v --tb=line +``` + +--- + +### Task 5: 收尾 + +- [ ] **Step 1: 全量相关测** + +```bash +cd backend && . venv/bin/activate && PYTHONPATH=. pytest tests/test_pl_plan_list_export.py tests/test_pl_plan_archive_export.py tests/test_pl_plan_contract_gap_export.py -v +``` + +- [ ] **Step 2: Spec 对照** E1–E6 均有落点;更新 graphify(改过的 backend/web-admin) + +- [ ] **Step 3: 验收清单(人工)** + +- 证件 / 归档 / 合同完善 / 出库单各导出一次一装多送计划 + +--- + +## Self-review + +1. Spec E1–E6 均有 Task。 +2. 循环 import 风险已用「抽取 `plan_list_export_segments.py`」处理。 +3. 价格字段过滤与 zip 同源行模型已写明。 +4. Commit 步骤省略(用户未要求不提交)。 diff --git a/docs/superpowers/plans/2026-10-15-plan-list-segment-export.md b/docs/superpowers/plans/2026-10-15-plan-list-segment-export.md new file mode 100644 index 000000000..6991a639f --- /dev/null +++ b/docs/superpowers/plans/2026-10-15-plan-list-segment-export.md @@ -0,0 +1,497 @@ +# 运输计划 / 库存列表导出 · 段次×产品行 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:** 让运输计划列表与库存入库/出库导出的 Excel 行模型对齐列表展平(先装货产品行,再各送货段产品行),每行带「段次」与本段计划量/实际量。 + +**Architecture:** 仍走现有 plan 导出 API;改造 `_build_plan_list_export_rows`,按 `stops_by_plan` 段×产品展开(对齐前端 `flattenPlanArchivePairRows`)。复用归档侧已有语义:`_stop_kind_label` / `_get_stop_archive_actual_qty`(或同名内联)。不改归档配对宽表。 + +**Tech Stack:** Python / FastAPI、pytest、Vue 3(`plan/index.vue` 导出列) + +**Spec:** `docs/superpowers/specs/2026-10-15-plan-list-segment-export-design.md` + +--- + +## File map + +| 文件 | 职责 | +|------|------| +| `backend/tests/test_pl_plan_list_export.py` | 段次展开、占位、legacy、列过滤用例 | +| `backend/app/api/pl/plan.py` | `PLAN_EXPORT_COLUMNS` + `_build_plan_list_export_rows` + stop 字段 helper | +| `web-admin/src/views/pl/plan/index.vue` | `planExportColumns` 固定注入 `stopSegment`(库存页复用同一组件) | + +可选(若 `plan.py` 内联过长):`backend/app/services/pl/plan_list_export_rows.py` 抽出展开逻辑;默认优先内联以最小改动为准。 + +--- + +### Task 1: 失败测试 — 一装多送段次展开 + +**Files:** +- Modify: `backend/tests/test_pl_plan_list_export.py` + +- [ ] **Step 1: 追加一装多送用例(期望当前失败)** + +在 `test_pl_plan_list_export.py` 末尾追加(可复用文件内已有 patch 模式): + +```python +def test_build_plan_list_export_rows_expands_stop_segments(): + """一装多送:先装货产品行,再各送货段产品行;侧栏字段按行填写。""" + plan = SimpleNamespace( + id="p-multi", + plan_no="PO20261009016", + follow_status="arranged", + plan_date="2026-10-11", + plan_type="inbound", + supplier_name="供方", + customer_name="需方", + license_plate="皖A12345", + trailer_no=None, + driver_name="司机", + transport_status="arranged", + archive_status="unarchived", + erp_entered=0, + remark="", + products=[], + ) + db = MagicMock() + query = MagicMock() + db.query.return_value = query + query.filter.return_value = query + query.order_by.return_value = query + # 有段结构时不应依赖计划级产品展开;返回空列表即可 + query.all.return_value = [] + + load_product = SimpleNamespace( + id="lp1", + plan_product_id="pp1", + product_id="prod1", + product_name="尿素别名", + model="工业级", + package_spec="吨袋", + unit="ton", + plan_qty=30, + inbound_qty=29, + outbound_qty=None, + brand_mode=None, + brand_name=None, + ) + del1_product = SimpleNamespace( + id="dp1", + plan_product_id="pp1", + product_id="prod1", + product_name="尿素别名", + model="工业级", + package_spec="吨袋", + unit="ton", + plan_qty=20, + inbound_qty=None, + outbound_qty=19, + brand_mode=None, + brand_name=None, + ) + del2_product = SimpleNamespace( + id="dp2", + plan_product_id="pp1", + product_id="prod1", + product_name="尿素别名", + model="工业级", + package_spec="吨袋", + unit="ton", + plan_qty=10, + inbound_qty=None, + outbound_qty=9, + brand_mode=None, + brand_name=None, + ) + load_stop = SimpleNamespace( + customer_name="装货客户A", + address="装货路1号", + load_time="2026-10-11", + generate_dibang=1, + dibang_direction="outbound", + contracts=[SimpleNamespace(contract_no="HT-L")], + products=[load_product], + ) + delivery1 = SimpleNamespace( + seq=1, + customer_name="送货客户B1", + address="送货路B1", + delivery_time="2026-10-12", + generate_dibang=1, + dibang_direction="inbound", + contracts=[SimpleNamespace(contract_no="HT-B1")], + products=[del1_product], + ) + delivery2 = SimpleNamespace( + seq=2, + customer_name="送货客户B2", + address="送货路B2", + delivery_time="2026-10-13", + generate_dibang=0, + dibang_direction=None, + contracts=[SimpleNamespace(contract_no="HT-B2")], + products=[del2_product], + ) + + fake_dump = { + "planNo": "PO20261009016", + "belongsCompany": "shanxia", + "followStatus": "arranged", + "planDate": "2026-10-11", + "planType": "inbound", + "supplierName": "供方", + "customerName": "需方", + "licensePlate": "皖A12345", + "trailerNo": None, + "personnelSummary": "司机张三", + "followUserName": "跟进人李四", + "driverName": "司机", + "transportStatus": "arranged", + "archiveStatus": "unarchived", + "erpEntered": 0, + "remark": "", + "products": [], + } + + with patch( + "app.api.pl.plan.PlanWithProducts.model_validate", + return_value=MagicMock(model_dump=MagicMock(return_value=dict(fake_dump))), + ), patch( + "app.api.pl.plan.load_crm_product_alias_maps", + return_value=({"prod1": "尿素"}, {"prod1": ["尿素别名"]}), + ): + rows = _build_plan_list_export_rows( + db, + tenant_no="t1", + plans=[plan], + stops_by_plan={"p-multi": (load_stop, [delivery1, delivery2])}, + ) + + assert len(rows) == 3 + assert [r["stopSegment"] for r in rows] == ["装货", "送货 #1", "送货 #2"] + assert [r["planQty"] for r in rows] == [30, 20, 10] + assert [r["actualQty"] for r in rows] == [29, 19, 9] + assert rows[0]["loadCustomer"] == "装货客户A" + assert rows[0]["deliveryCustomer"] == "" + assert rows[0]["productContract"] == "HT-L" + assert rows[1]["loadCustomer"] == "" + assert rows[1]["deliveryCustomer"] == "送货客户B1" + assert rows[1]["deliveryTimes"] == "2026-10-12" + assert rows[1]["productContract"] == "HT-B1" + assert rows[2]["deliveryCustomer"] == "送货客户B2" + assert rows[2]["deliveryDibang"] == "" + assert rows[0]["productName"] == "尿素" +``` + +- [ ] **Step 2: 运行确认失败** + +```bash +cd backend && source venv/bin/activate && pytest tests/test_pl_plan_list_export.py::test_build_plan_list_export_rows_expands_stop_segments -v +``` + +Expected: FAIL(当前按计划级产品展开,行数/字段不符;或无 `stopSegment`) + +- [ ] **Step 3: 追加空产品占位与 legacy 用例** + +```python +def test_build_plan_list_export_rows_empty_delivery_products_placeholder(): + plan = SimpleNamespace(id="p-empty", plan_no="PL-E", products=[]) + # …同模式 fake_dump / patches… + load_stop = SimpleNamespace( + customer_name="装A", + address="L", + load_time="2026-10-11", + generate_dibang=0, + dibang_direction=None, + contracts=[], + products=[ + SimpleNamespace( + id="lp", + plan_product_id=None, + product_id="prod1", + product_name="尿素", + model="", + package_spec="", + unit="ton", + plan_qty=5, + inbound_qty=None, + outbound_qty=None, + ) + ], + ) + delivery = SimpleNamespace( + seq=1, + customer_name="送B", + address="D", + delivery_time="2026-10-12", + generate_dibang=0, + dibang_direction=None, + contracts=[], + products=[], # 空 → 占位一行 + ) + # stops_by_plan={"p-empty": (load_stop, [delivery])} + # assert len(rows)==2; rows[1]["stopSegment"]=="送货 #1"; rows[1]["productName"]==""; rows[1]["planQty"] is None + + +def test_build_plan_list_export_rows_legacy_without_stops(): + """无段结构:回退计划级产品;stopSegment 为空。""" + # 复用现有 test_build_plan_list_export_rows_expands_products_with_crm_names 的产品 mock + # stops_by_plan={"p1": (None, [])} 或缺省 + # assert rows[0]["stopSegment"] == "" + # assert rows[0]["planQty"] == 10 # 计划级 quantity +``` + +(实现时把占位/legacy 写成完整可运行断言,勿留注释占位。) + +- [ ] **Step 4: 运行整文件确认新用例失败、旧用例仍绿或一并待修** + +```bash +cd backend && source venv/bin/activate && pytest tests/test_pl_plan_list_export.py -v +``` + +--- + +### Task 2: 实现列定义与按段 stop 字段 helper + +**Files:** +- Modify: `backend/app/api/pl/plan.py`(约 `PLAN_EXPORT_COLUMNS`、`_apply_plan_list_export_stop_fields`) + +- [ ] **Step 1: `PLAN_EXPORT_COLUMNS` 在 `planNo` 后插入段次** + +```python +PLAN_EXPORT_COLUMNS = [ + ExportColumn(title="计划编号", field="planNo"), + ExportColumn(title="段次", field="stopSegment"), + ExportColumn(title="归属公司", field="belongsCompany"), + # …其余保持不变… +] +``` + +- [ ] **Step 2: 将整单拼接的 `_apply_plan_list_export_stop_fields` 改为按单侧填写** + +替换为(或新增并改调用方): + +```python +def _format_stop_segment_label(kind: str, delivery_seq: Optional[int] = None) -> str: + if kind == "load": + return "装货" + return f"送货 #{delivery_seq or 1}" + + +def _apply_plan_list_export_segment_stop_fields( + data: dict, + *, + kind: str, + load_read: Any = None, + delivery_read: Any = None, + delivery_seq: Optional[int] = None, +) -> None: + """按当前导出行所属段填写装/送侧字段;对侧留空。""" + data["stopSegment"] = _format_stop_segment_label(kind, delivery_seq) + data["loadCustomer"] = "" + data["deliveryCustomer"] = "" + data["loadAddressTime"] = "" + data["deliveryAddressTime"] = "" + data["deliveryTimes"] = "" + data["productContract"] = "" + data["loadDibang"] = "" + data["deliveryDibang"] = "" + + if kind == "load" and load_read is not None: + data["loadCustomer"] = (getattr(load_read, "customer_name", None) or "").strip() + data["loadAddressTime"] = _format_stop_address_time( + getattr(load_read, "address", None), + getattr(load_read, "load_time", None), + ) + data["loadDibang"] = _format_stop_dibang_label(load_read) + data["productContract"] = " / ".join(_collect_stop_contract_nos([load_read])) + return + + if kind == "delivery" and delivery_read is not None: + data["deliveryCustomer"] = ( + getattr(delivery_read, "customer_name", None) or "" + ).strip() + data["deliveryAddressTime"] = _format_stop_address_time( + getattr(delivery_read, "address", None), + getattr(delivery_read, "delivery_time", None), + ) + data["deliveryTimes"] = _format_export_date_text( + getattr(delivery_read, "delivery_time", None) + ) + data["deliveryDibang"] = _format_stop_dibang_label(delivery_read) + data["productContract"] = " / ".join( + _collect_stop_contract_nos([delivery_read]) + ) +``` + +可删除或保留旧 `_apply_plan_list_export_stop_fields`(若无引用则删除,避免死代码)。 + +- [ ] **Step 3: Commit(若用户要求提交再执行;否则跳过本步)** + +```bash +git add backend/app/api/pl/plan.py backend/tests/test_pl_plan_list_export.py +git commit -m "$(cat <<'EOF' +feat(pl): add stopSegment column helpers for list export + +Prepare segment-scoped stop fields for plan/stock list Excel export. +EOF +)" +``` + +--- + +### Task 3: 重写 `_build_plan_list_export_rows` 段次展开 + +**Files:** +- Modify: `backend/app/api/pl/plan.py`(`_build_plan_list_export_rows`) + +- [ ] **Step 1: 实现展开逻辑(最小可用)** + +核心行为: + +1. 构建计划公共 `data`(与现有相同:`PlanWithProducts` dump、标签、车牌、ERP 是/否)。 +2. `load_read, delivery_reads = stops_by_plan.get(plan.id, (None, []))`。 +3. **若** `load_read is None and not delivery_reads`:走 **legacy**——查 `products_by_plan`,按计划级产品展开;每行 `stopSegment=""`;`planQty`/`actualQty` 用计划级 `quantity`/`actual_qty`;stop 侧字段清空或留空。 +4. **否则**(有段): + - 批量加载计划级产品,仅用于品牌 lookup(`plan_product_id` / `product_id` → `brand_mode`/`brand_name`),对齐归档 `_lookup_plan_product` + `_format_plan_list_export_brand`。 + - CRM 别名:收集段产品 `product_id` 调用 `load_crm_product_alias_maps`。 + - 装货:`products = list(load_read.products or []) or [None]`(空则占位);每项一行,`kind=load`。 + - 送货:若 `delivery_reads` 为空,视为 `[None]` 占位一段(与列表 `deliveries.length ? … : [null]` 一致);否则按顺序;每段 `products or [None]`;`delivery_seq = delivery.seq or index+1`。 + - 每行: + - `row = dict(data)` + - `_apply_plan_list_export_segment_stop_fields(...)` + - 若 `product is None`:产品列空,`planQty`/`actualQty` = `None` + - 否则:`resolve_product_display_names`;`planQty = product.plan_qty`;`actualQty = product.inbound_qty if kind=="load" else product.outbound_qty`(对齐列表 `getRowActualQty`) + - 品牌:经 plan product lookup 后 `_format_plan_list_export_brand` + +参考片段(伪代码): + +```python +def _iter_segment_product_slots(load_read, delivery_reads): + if load_read is not None: + load_products = list(getattr(load_read, "products", None) or []) or [None] + for product in load_products: + yield ("load", load_read, None, None, product) + deliveries = list(delivery_reads or []) or ([None] if load_read is not None else []) + for index, delivery in enumerate(deliveries): + seq = getattr(delivery, "seq", None) if delivery is not None else (index + 1) + if seq is None: + seq = index + 1 + products = list(getattr(delivery, "products", None) or []) if delivery else [] + if not products: + products = [None] + for product in products: + yield ("delivery", None, delivery, seq, product) +``` + +注意:仅有送货无装货时仍展开送货段;仅有装货无送货时,`deliveries = [None]` 出送货占位行(与列表一致)。 + +- [ ] **Step 2: 跑测试至全绿** + +```bash +cd backend && source venv/bin/activate && pytest tests/test_pl_plan_list_export.py -v +``` + +Expected: PASS(含旧用例;旧用例 `stops_by_plan` 有单装单送时需改为段展开——**更新** `test_build_plan_list_export_rows_expands_products_with_crm_names`: + +- 给 `load_stop` / `delivery_stop` 挂上 `products=[product_as_stop]`(字段用 `plan_qty`/`inbound_qty`/`outbound_qty`) +- 断言 `stopSegment`、装货行/送货行侧栏空非空 +- 或拆成「有段单装单送」+ 保留 legacy 断言 + +- [ ] **Step 3: 归档导出回归(确认未误伤)** + +```bash +cd backend && source venv/bin/activate && pytest tests/test_pl_plan_archive_export.py -v --tb=line +``` + +Expected: PASS + +- [ ] **Step 4: Commit(用户要求时)** + +```bash +git commit -m "$(cat <<'EOF' +feat(pl): expand plan list export by stop segment and product + +Align Excel rows with flattenPlanArchivePairRows for stock and plan lists. +EOF +)" +``` + +--- + +### Task 4: 前端导出列注入「段次」 + +**Files:** +- Modify: `web-admin/src/views/pl/plan/index.vue`(`planExportColumns`) + +说明:列表无「段次」可见列;导出按可见列过滤时会被丢掉。固定在导出列中注入,保证入库/出库/计划列表 Excel 都有该列。 + +- [ ] **Step 1: 修改 `planExportColumns`** + +```typescript +const planExportColumns = computed(() => { + const skip = new Set(['arrangeCopy', 'planAttachments']) + const cols = [...visibleColumns.value] + .filter((col) => !skip.has(col)) + .map((col) => PLAN_EXPORT_COLUMN_FIELD_MAP[col] || col) + if (!cols.includes('planNo')) cols.unshift('planNo') + // 导出专用:列表无此列,始终紧挨计划编号 + const planNoIdx = cols.indexOf('planNo') + if (!cols.includes('stopSegment')) { + cols.splice(planNoIdx + 1, 0, 'stopSegment') + } + return cols +}) +``` + +- [ ] **Step 2: 手动验收要点** + +1. 打开运输计划列表、入库单、出库单,各导出一次(筛选含一装多送计划更佳)。 +2. Excel:计划编号后有「段次」;一装多送多行;装货行送货客户空、送货行装货客户空;计划量为本段。 +3. 文件名仍为 `入库单_*.xlsx` / `出库单_*.xlsx` / `计划列表_*.xlsx`。 + +- [ ] **Step 3: Commit(用户要求时)** + +```bash +git commit -m "$(cat <<'EOF' +feat(web-admin): always include stopSegment in plan list export columns + +Ensure stock inbound/outbound and plan list Excel show segment labels. +EOF +)" +``` + +--- + +### Task 5: 收尾核对 + +- [ ] **Step 1: 对照 spec 清单** + +| Spec 项 | 对应 Task | +|---------|-----------| +| D1 段次×产品多行 | Task 3 | +| D2 三入口共用 | 同一 API + Task 4 | +| D3 段次列文案 | Task 2–3 | +| D4 侧栏按行、不拼接 | Task 2–3 | +| D5 计划字段重复 | Task 3 | +| D6 归档不改 | Task 3 回归 | +| D7 文件名不变 | 已有逻辑 + 旧测 | +| 空产品占位 / legacy | Task 1+3 | +| 实际量 inbound/outbound | Task 3 | + +- [ ] **Step 2: 最终测试** + +```bash +cd backend && source venv/bin/activate && pytest tests/test_pl_plan_list_export.py tests/test_pl_plan_archive_export.py -v +``` + +Expected: 全部 PASS + +--- + +## Self-review (plan author) + +1. **Spec coverage:** D1–D7、占位、legacy、实际量语义、前端注入均有 Task。 +2. **No placeholders:** 测试与 helper 给出可粘贴代码;legacy/占位在 Task 1 Step 3 要求写成完整断言。 +3. **Types:** field 统一 `stopSegment`;实际量装货 `inbound_qty`、送货 `outbound_qty`。 +4. **Commits:** 标为「用户要求时」以符合仓库「未明确要求不提交」规则。 diff --git a/docs/superpowers/plans/2026-10-16-web-admin-version-refresh.md b/docs/superpowers/plans/2026-10-16-web-admin-version-refresh.md new file mode 100644 index 000000000..d344ec616 --- /dev/null +++ b/docs/superpowers/plans/2026-10-16-web-admin-version-refresh.md @@ -0,0 +1,718 @@ +# web-admin 发版后强制刷新 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:** 生产环境的 web-admin 在仍打开旧标签页时,发现新构建就弹出不可关闭的「立即刷新」。 + +**Architecture:** 每次 `pnpm build` 用「短 git hash + 构建时间戳」生成 `buildId`,注入 `__APP_BUILD_ID__` 并写入 `dist/version.json`。运行时只在生产环境拉取该文件(`cache: 'no-store'` + `?t=`),`buildId` 不同则 `ElMessageBox.alert` 强制刷新。纯判断与调度放在可单测模块;浏览器和弹窗只在很薄的启动函数里接线。 + +**Tech Stack:** Vite 7 · Vue 3 · Element Plus `ElMessageBox`(`src/types/import/auto-imports.d.ts` 已全局声明,`.ts` 里不要手写 import)· Node test(`pnpm exec tsx --test`) + +**Spec:** `docs/superpowers/specs/2026-10-16-web-admin-version-refresh-design.md` + +--- + +## 文件结构 + +| 路径 | 职责 | +|------|------| +| `web-admin/scripts/app-build-meta.ts` | 生成 `buildId`、拼 `version.json` 文本、写入 `outDir/version.json` | +| `web-admin/scripts/app-build-meta.test.ts` | 上述纯函数与写文件 | +| `web-admin/src/utils/app-update.ts` | URL、是否提示、文案、30 秒防抖、调度器(依赖注入,无 DOM) | +| `web-admin/src/utils/app-update.test.ts` | 调度器与文案 | +| `web-admin/src/utils/check-app-update.ts` | 生产环境接线:`fetch`、`ElMessageBox`、`location.reload`、可见性 | +| `web-admin/src/env.d.ts` | 声明 `__APP_BUILD_ID__` | +| `web-admin/vite.config.ts` | `define` 注入 `buildId`;`apply: 'build'` 插件写出 `dist/version.json` | +| `web-admin/src/main.ts` | `app.mount` 之后调用 `startAppUpdateCheck()` | + +**明确不改:** 后端、Nginx 配置、`VITE_VERSION` 的人工升版流程、小程序更新、未保存表单拦截。`index.html` / `version.json` 的短缓存仍由现有发布方式保证(规格第 6 节)。 + +--- + +### Task 1: 构建指纹与 version.json 文本 + +**Files:** +- Create: `web-admin/scripts/app-build-meta.ts` +- Test: `web-admin/scripts/app-build-meta.test.ts` + +- [ ] **Step 1: Write the failing test** + +```ts +// web-admin/scripts/app-build-meta.test.ts +import assert from 'node:assert/strict' +import fs from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import { describe, it } from 'node:test' +import { + createAppBuildMeta, + readGitShort, + versionJsonText, + writeVersionJson +} from './app-build-meta.ts' + +describe('createAppBuildMeta', () => { + it('joins git short hash and timestamp', () => { + assert.deepEqual(createAppBuildMeta('3.0.2', 1730000000000, 'a1b2c3d'), { + version: '3.0.2', + buildId: 'a1b2c3d-1730000000000' + }) + }) + + it('uses nogit when the hash is empty', () => { + assert.equal(createAppBuildMeta('3.0.2', 5, ' ').buildId, 'nogit-5') + }) + + it('changes buildId when the timestamp changes', () => { + const a = createAppBuildMeta('3.0.2', 1, 'abc') + const b = createAppBuildMeta('3.0.2', 2, 'abc') + assert.notEqual(a.buildId, b.buildId) + }) +}) + +describe('readGitShort', () => { + it('trims command output', () => { + assert.equal(readGitShort(() => 'abc123\n'), 'abc123') + }) + + it('returns nogit when the command throws or is blank', () => { + assert.equal( + readGitShort(() => { + throw new Error('no git') + }), + 'nogit' + ) + assert.equal(readGitShort(() => ' '), 'nogit') + }) +}) + +describe('version.json', () => { + it('writes pretty json with a trailing newline', () => { + const text = versionJsonText({ version: '3.0.2', buildId: 'abc-1' }) + assert.equal(text, '{\n "version": "3.0.2",\n "buildId": "abc-1"\n}\n') + }) + + it('writes dist/version.json', () => { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'app-ver-')) + writeVersionJson(dir, { version: '3.0.3', buildId: 'def-9' }) + const raw = fs.readFileSync(path.join(dir, 'version.json'), 'utf8') + assert.deepEqual(JSON.parse(raw), { version: '3.0.3', buildId: 'def-9' }) + }) +}) +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `cd web-admin && pnpm exec tsx --test scripts/app-build-meta.test.ts` + +Expected: FAIL with cannot find module `./app-build-meta.ts` + +- [ ] **Step 3: Write minimal implementation** + +```ts +// web-admin/scripts/app-build-meta.ts +import fs from 'node:fs' +import path from 'node:path' + +export type AppBuildMeta = { + version: string + buildId: string +} + +export function readGitShort(run: () => string): string { + try { + const text = run().trim() + return text || 'nogit' + } catch { + return 'nogit' + } +} + +export function createAppBuildMeta(version: string, nowMs: number, gitShort: string): AppBuildMeta { + const hash = gitShort.trim() || 'nogit' + return { version, buildId: `${hash}-${nowMs}` } +} + +export function versionJsonText(meta: AppBuildMeta): string { + return `${JSON.stringify({ version: meta.version, buildId: meta.buildId }, null, 2)}\n` +} + +export function writeVersionJson(outDir: string, meta: AppBuildMeta): void { + fs.mkdirSync(outDir, { recursive: true }) + fs.writeFileSync(path.join(outDir, 'version.json'), versionJsonText(meta), 'utf8') +} +``` + +- [ ] **Step 4: Run test to verify it passes** + +Run: `cd web-admin && pnpm exec tsx --test scripts/app-build-meta.test.ts` + +Expected: PASS + +- [ ] **Step 5: Commit** + +```bash +git add web-admin/scripts/app-build-meta.ts web-admin/scripts/app-build-meta.test.ts +git commit -m "$(cat <<'EOF' +test: add web-admin build id and version.json helpers. + +EOF +)" +``` + +--- + +### Task 2: 更新判断与调度器 + +**Files:** +- Create: `web-admin/src/utils/app-update.ts` +- Test: `web-admin/src/utils/app-update.test.ts` + +- [ ] **Step 1: Write the failing test** + +```ts +// web-admin/src/utils/app-update.test.ts +import assert from 'node:assert/strict' +import { describe, it } from 'node:test' +import { + APP_UPDATE_POLL_MS, + APP_UPDATE_VISIBILITY_DEBOUNCE_MS, + formatUpdateMessage, + shouldPromptUpdate, + shouldSkipVisibilityCheck, + startAppUpdateChecker, + versionJsonUrl +} from './app-update.ts' + +function flush() { + return new Promise((resolve) => setImmediate(resolve)) +} + +describe('versionJsonUrl', () => { + it('appends a cache-busting query on the base url', () => { + assert.equal(versionJsonUrl('/', 5), '/version.json?t=5') + assert.equal(versionJsonUrl('/admin/', 5), '/admin/version.json?t=5') + assert.equal(versionJsonUrl('/admin', 5), '/admin/version.json?t=5') + }) +}) + +describe('shouldPromptUpdate', () => { + it('prompts only when remote buildId is a different non-empty string', () => { + assert.equal(shouldPromptUpdate('a-1', { buildId: 'b-2' }), true) + assert.equal(shouldPromptUpdate('a-1', { buildId: 'a-1' }), false) + assert.equal(shouldPromptUpdate('a-1', { buildId: '' }), false) + assert.equal(shouldPromptUpdate('a-1', { buildId: 2 }), false) + assert.equal(shouldPromptUpdate('a-1', {}), false) + assert.equal(shouldPromptUpdate('a-1', null), false) + }) +}) + +describe('formatUpdateMessage', () => { + it('includes escaped versions when remote version is a non-empty string', () => { + const text = formatUpdateMessage('3.0.2', '3.0.3') + assert.match(text, /系统已发布更新/) + assert.match(text, /当前 v3\.0\.2/) + assert.match(text, /最新 v3\.0\.3/) + }) + + it('omits the version line when remote version is missing or blank', () => { + assert.doesNotMatch(formatUpdateMessage('3.0.2', ''), /当前 v/) + assert.doesNotMatch(formatUpdateMessage('3.0.2', ' '), /当前 v/) + assert.equal(formatUpdateMessage('3.0.2', null), formatUpdateMessage('3.0.2', undefined)) + }) + + it('escapes html in version strings', () => { + const text = formatUpdateMessage('3<0', '3>1') + assert.match(text, /v3<0/) + assert.match(text, /v3>1/) + assert.doesNotMatch(text, /v3<0/) + }) +}) + +describe('shouldSkipVisibilityCheck', () => { + it('skips only when the gap is under 30 seconds', () => { + assert.equal(APP_UPDATE_VISIBILITY_DEBOUNCE_MS, 30_000) + assert.equal(shouldSkipVisibilityCheck(1_000, 1_000 + 29_999), true) + assert.equal(shouldSkipVisibilityCheck(1_000, 1_000 + 30_000), false) + }) +}) + +describe('startAppUpdateChecker', () => { + it('does nothing outside production', async () => { + let fetches = 0 + const stop = startAppUpdateChecker({ + isProd: false, + localBuildId: 'a-1', + localVersion: '3.0.2', + baseUrl: '/', + now: () => 1, + fetchRemote: async () => { + fetches += 1 + return { buildId: 'b-2', version: '3.0.3' } + }, + onReload: () => {}, + alertUpdate: async () => {}, + setInterval: () => 1, + clearInterval: () => {}, + subscribeVisible: () => () => {} + }) + await flush() + assert.equal(fetches, 0) + stop() + }) + + it('polls every 10 minutes and stays quiet when buildId matches', async () => { + let fetches = 0 + const timers: Array<{ fn: () => void; ms: number }> = [] + startAppUpdateChecker({ + isProd: true, + localBuildId: 'a-1', + localVersion: '3.0.2', + baseUrl: '/', + now: () => 10, + fetchRemote: async (url) => { + fetches += 1 + assert.equal(url, '/version.json?t=10') + return { buildId: 'a-1', version: '3.0.2' } + }, + onReload: () => {}, + alertUpdate: async () => { + throw new Error('should not alert') + }, + setInterval: (fn, ms) => { + timers.push({ fn, ms }) + return timers.length + }, + clearInterval: () => {}, + subscribeVisible: () => () => {} + }) + await flush() + assert.equal(fetches, 1) + assert.equal(timers.length, 1) + assert.equal(timers[0].ms, APP_UPDATE_POLL_MS) + assert.equal(APP_UPDATE_POLL_MS, 600_000) + }) + + it('alerts once, reloads once, and stops later checks when buildId differs', async () => { + let fetches = 0 + let reloads = 0 + const alerts: string[] = [] + let cleared = 0 + let unsubscribed = 0 + let visible: (() => void) | null = null + const timers: Array<{ fn: () => void }> = [] + startAppUpdateChecker({ + isProd: true, + localBuildId: 'a-1', + localVersion: '3.0.2', + baseUrl: '/', + now: () => 10, + fetchRemote: async () => { + fetches += 1 + return { buildId: 'b-2', version: '3.0.3' } + }, + onReload: () => { + reloads += 1 + }, + alertUpdate: async (message) => { + alerts.push(message) + }, + setInterval: (fn) => { + timers.push({ fn }) + return 1 + }, + clearInterval: () => { + cleared += 1 + }, + subscribeVisible: (handler) => { + visible = handler + return () => { + unsubscribed += 1 + } + } + }) + await flush() + assert.equal(alerts.length, 1) + assert.match(alerts[0], /最新 v3\.0\.3/) + assert.equal(reloads, 1) + assert.equal(cleared, 1) + assert.equal(unsubscribed, 1) + visible?.() + timers[0]?.fn() + await flush() + assert.equal(fetches, 1) + assert.equal(reloads, 1) + }) + + it('keeps polling when fetch fails or the payload is unusable', async () => { + const urls = ['throw', 'bad', 'empty'] + let fetches = 0 + let alerts = 0 + const timers: Array<{ fn: () => void }> = [] + startAppUpdateChecker({ + isProd: true, + localBuildId: 'a-1', + localVersion: '3.0.2', + baseUrl: '/', + now: () => 10, + fetchRemote: async () => { + fetches += 1 + const kind = urls[fetches - 1] + if (kind === 'throw') throw new Error('offline') + if (kind === 'bad') return { nope: true } + return { buildId: '' } + }, + onReload: () => { + throw new Error('should not reload') + }, + alertUpdate: async () => { + alerts += 1 + }, + setInterval: (fn) => { + timers.push({ fn }) + return 1 + }, + clearInterval: () => { + throw new Error('should not stop') + }, + subscribeVisible: () => () => {} + }) + await flush() + timers[0].fn() + await flush() + timers[0].fn() + await flush() + assert.equal(fetches, 3) + assert.equal(alerts, 0) + }) + + it('skips a visible-tab check inside 30 seconds and runs one after that', async () => { + let now = 1_000_000 + let fetches = 0 + let visible: (() => void) | null = null + startAppUpdateChecker({ + isProd: true, + localBuildId: 'a-1', + localVersion: '3.0.2', + baseUrl: '/', + now: () => now, + fetchRemote: async () => { + fetches += 1 + return { buildId: 'a-1' } + }, + onReload: () => {}, + alertUpdate: async () => {}, + setInterval: () => 1, + clearInterval: () => {}, + subscribeVisible: (handler) => { + visible = handler + return () => {} + } + }) + await flush() + assert.equal(fetches, 1) + now = 1_000_000 + 10_000 + visible?.() + await flush() + assert.equal(fetches, 1) + now = 1_000_000 + 30_000 + visible?.() + await flush() + assert.equal(fetches, 2) + }) +}) +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `cd web-admin && pnpm exec tsx --test src/utils/app-update.test.ts` + +Expected: FAIL with cannot find module `./app-update.ts` + +- [ ] **Step 3: Write minimal implementation** + +```ts +// web-admin/src/utils/app-update.ts +export const APP_UPDATE_POLL_MS = 10 * 60 * 1000 +export const APP_UPDATE_VISIBILITY_DEBOUNCE_MS = 30 * 1000 + +const UPDATE_BODY = '系统已发布更新,当前页面仍在使用旧功能。请刷新后继续操作。' + +export type RemoteVersion = { + version?: unknown + buildId?: unknown +} | null + +export type AppUpdateCheckerDeps = { + isProd: boolean + localBuildId: string + localVersion: string + baseUrl: string + now: () => number + fetchRemote: (url: string) => Promise + onReload: () => void + alertUpdate: (message: string) => Promise + setInterval: (fn: () => void, ms: number) => ReturnType + clearInterval: (id: ReturnType) => void + subscribeVisible: (handler: () => void) => () => void +} + +export function versionJsonUrl(baseUrl: string, nowMs: number): string { + const base = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/` + return `${base}version.json?t=${nowMs}` +} + +export function shouldPromptUpdate(localBuildId: string, remote: unknown): boolean { + if (!remote || typeof remote !== 'object') return false + const buildId = (remote as { buildId?: unknown }).buildId + return typeof buildId === 'string' && buildId.length > 0 && buildId !== localBuildId +} + +function escapeHtml(value: string): string { + return value.replace(/&/g, '&').replace(//g, '>') +} + +export function formatUpdateMessage(localVersion: string, remoteVersion: unknown): string { + if (typeof remoteVersion !== 'string' || !remoteVersion.trim()) return UPDATE_BODY + const current = escapeHtml(localVersion) + const latest = escapeHtml(remoteVersion.trim()) + return `${UPDATE_BODY}
当前 v${current} / 最新 v${latest}` +} + +export function shouldSkipVisibilityCheck(lastStartedAt: number, nowMs: number): boolean { + return nowMs - lastStartedAt < APP_UPDATE_VISIBILITY_DEBOUNCE_MS +} + +export function startAppUpdateChecker(deps: AppUpdateCheckerDeps): () => void { + if (!deps.isProd) return () => {} + + let prompted = false + let reloading = false + let inFlight = false + let lastStartedAt = 0 + let timer: ReturnType | null = null + let unsubscribe = () => {} + + const stop = () => { + if (timer != null) deps.clearInterval(timer) + timer = null + unsubscribe() + unsubscribe = () => {} + } + + const check = async () => { + if (prompted || inFlight) return + inFlight = true + lastStartedAt = deps.now() + try { + const remote = await deps.fetchRemote(versionJsonUrl(deps.baseUrl, lastStartedAt)) + if (!shouldPromptUpdate(deps.localBuildId, remote)) return + prompted = true + stop() + const version = + remote && typeof remote === 'object' ? (remote as { version?: unknown }).version : undefined + await deps.alertUpdate(formatUpdateMessage(deps.localVersion, version)) + if (reloading) return + reloading = true + deps.onReload() + } catch { + // 下一轮再试 + } finally { + inFlight = false + } + } + + const checkFromVisibility = () => { + if (prompted) return + const now = deps.now() + if (lastStartedAt !== 0 && shouldSkipVisibilityCheck(lastStartedAt, now)) return + void check() + } + + void check() + timer = deps.setInterval(() => { + void check() + }, APP_UPDATE_POLL_MS) + unsubscribe = deps.subscribeVisible(checkFromVisibility) + return stop +} +``` + +- [ ] **Step 4: Run test to verify it passes** + +Run: `cd web-admin && pnpm exec tsx --test src/utils/app-update.test.ts` + +Expected: PASS(5 组 describe 全部通过) + +- [ ] **Step 5: Commit** + +```bash +git add web-admin/src/utils/app-update.ts web-admin/src/utils/app-update.test.ts +git commit -m "$(cat <<'EOF' +test: add web-admin stale-tab update checker. + +EOF +)" +``` + +--- + +### Task 3: 构建注入与生产环境弹窗 + +**Files:** +- Modify: `web-admin/vite.config.ts`(`define` 与 `plugins`) +- Modify: `web-admin/src/env.d.ts`(`__APP_VERSION__` 声明旁) +- Create: `web-admin/src/utils/check-app-update.ts` +- Modify: `web-admin/src/main.ts`(`app.mount('#app')` 之后) + +- [ ] **Step 1: Declare the build id** + +在 `web-admin/src/env.d.ts` 现有行旁增加: + +```ts +declare const __APP_VERSION__: string // 版本号 +declare const __APP_BUILD_ID__: string // 构建指纹:短 git hash + 构建时间戳 +``` + +- [ ] **Step 2: Inject the same build id and write version.json on build** + +`web-admin/vite.config.ts` 顶部增加: + +```ts +import { execSync } from 'node:child_process' +import { createAppBuildMeta, readGitShort, writeVersionJson } from './scripts/app-build-meta' +``` + +`path` 已从 `'path'` 导入。在 `export default ({ mode }) => {` 里、`defineConfig` 之前: + +```ts + const gitShort = readGitShort(() => + execSync('git rev-parse --short HEAD', { + stdio: ['ignore', 'pipe', 'ignore'] + }).toString() + ) + const appBuildMeta = createAppBuildMeta(VITE_VERSION || '', Date.now(), gitShort) +``` + +把现有 `define` 改成同时注入两个常量(仍使用同一次算出的 `appBuildMeta`): + +```ts + define: { + __APP_VERSION__: JSON.stringify(VITE_VERSION), + __APP_BUILD_ID__: JSON.stringify(appBuildMeta.buildId), + global: 'globalThis' + }, +``` + +在 `plugins` 数组最前面加入仅生产构建写文件的插件(`closeBundle` 时 `dist` 已存在): + +```ts + { + name: 'emit-version-json', + apply: 'build', + closeBundle() { + writeVersionJson(path.resolve(root, 'dist'), appBuildMeta) + } + }, +``` + +`root` 已是 `process.cwd()`。不要在 `apply: 'serve'` 时写 `version.json`。 + +- [ ] **Step 3: Wire the browser** + +```ts +// web-admin/src/utils/check-app-update.ts +import { startAppUpdateChecker } from './app-update' + +/** 生产环境检查 dist/version.json,发现新 buildId 后强制刷新。 */ +export function startAppUpdateCheck(): () => void { + return startAppUpdateChecker({ + isProd: import.meta.env.PROD, + localBuildId: __APP_BUILD_ID__, + localVersion: __APP_VERSION__, + baseUrl: import.meta.env.BASE_URL, + now: () => Date.now(), + fetchRemote: async (url) => { + const res = await fetch(url, { cache: 'no-store' }) + if (!res.ok) throw new Error(String(res.status)) + return res.json() + }, + onReload: () => { + location.reload() + }, + alertUpdate: async (message) => { + await ElMessageBox.alert(message, '发现新版本', { + confirmButtonText: '立即刷新', + showClose: false, + closeOnClickModal: false, + closeOnPressEscape: false, + showCancelButton: false, + dangerouslyUseHTMLString: true + }) + }, + setInterval: (fn, ms) => window.setInterval(fn, ms), + clearInterval: (id) => window.clearInterval(id), + subscribeVisible: (handler) => { + const listener = () => { + if (document.visibilityState === 'visible') handler() + } + document.addEventListener('visibilitychange', listener) + return () => document.removeEventListener('visibilitychange', listener) + } + }) +} +``` + +`ElMessageBox` 使用自动导入,不要写 `import { ElMessageBox } from 'element-plus'`。 + +`web-admin/src/main.ts` 在 `app.mount('#app')` 之后: + +```ts +import { startAppUpdateCheck } from './utils/check-app-update' +``` + +该 import 与文件顶部其它 import 放在一起。调用: + +```ts +app.mount('#app') +startAppUpdateCheck() +``` + +- [ ] **Step 4: Run unit tests again** + +Run: `cd web-admin && pnpm exec tsx --test scripts/app-build-meta.test.ts src/utils/app-update.test.ts` + +Expected: PASS + +不在此步骤跑完整 `pnpm build`(该构建内存占用大)。指纹与写文件已由 Task 1 覆盖;`vite.config.ts` 只负责把同一 `appBuildMeta` 注入并在 `closeBundle` 调用 `writeVersionJson`。 + +- [ ] **Step 5: Commit** + +```bash +git add web-admin/vite.config.ts web-admin/src/env.d.ts web-admin/src/utils/check-app-update.ts web-admin/src/main.ts +git commit -m "$(cat <<'EOF' +feat(web-admin): force a refresh when a newer build is deployed. + +EOF +)" +``` + +--- + +## 规格对照 + +| 规格 | 任务 | +|------|------| +| `version` + `buildId`(hash-时间戳,空 hash 为 `nogit`) | Task 1、Task 3 | +| 每次构建 `buildId` 变化 | Task 1 `timestamp changes` | +| 生产环境才检查;`pnpm dev` 不请求 | Task 2 `does nothing outside production`;Task 3 `import.meta.env.PROD` | +| 立即查、每 10 分钟、可见且距上次 ≥ 30 秒再查 | Task 2 | +| 失败 / 非 2xx / 坏 JSON / 空 `buildId` 不打断 | Task 2;Task 3 `!res.ok` 抛错进入 catch | +| 强制弹窗文案、版本行、只刷新一次、弹出后停止监听 | Task 2、Task 3 `ElMessageBox` 选项 | +| `cache: 'no-store'` 与 `?t=` | Task 2 URL、Task 3 fetch | +| 不改 Nginx | 无任务 | + +## 手工验证(实现合并前) + +1. `pnpm dev` 打开管理端,网络面板没有 `version.json`。 +2. 若需要看真实弹窗:把 `check-app-update.ts` 里临时将 `isProd` 设为 `true`,并在 `public/` 放一份 `buildId` 不同的 `version.json`(验证完还原,不要提交这处临时改动)。切走标签页超过 30 秒再回来应弹窗;点「立即刷新」会重载。遮罩点击和 Esc 不能关掉弹窗。 diff --git a/docs/superpowers/plans/2026-10-17-mp-crm-style-align.md b/docs/superpowers/plans/2026-10-17-mp-crm-style-align.md new file mode 100644 index 000000000..0b80328af --- /dev/null +++ b/docs/superpowers/plans/2026-10-17-mp-crm-style-align.md @@ -0,0 +1,64 @@ +# 小程序 CRM 六界面统一样式 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:** 按工作台 WebView 标准统一 CRM 六个菜单入口及其直接详情页,同时完整保留现有业务能力。 + +**Architecture:** 先修订视觉权威并建立局部共用展示原语,再按共享实现分组迁移报价、合同、产品、客户。共用层只负责结构与显示,API、权限和审批状态机继续留在业务模块。 + +**Tech Stack:** Vue 3、TypeScript、SCSS、Element Plus、Playwright、Node test/tsx、uni-app WebView。 + +--- + +### Task 1:视觉权威与共用 DOM 契约 + +**Files:** `openspec/.../ui-conventions/spec.md`, `docs/miniprogram-ui-spec-sanqiang.md`, style-align Demo, `web-admin/src/components/mp/`, `web-admin/src/styles/mp-webview.scss`, new DOM test. + +- [x] 写失败测试,断言普通详情头、无 ticket、状态 Tab、三栏筛选、More 红点、expense-card 层级、浅底状态、44px 命中和72px附件。 +- [x] 新增小型展示组件/样式 modifier,不改变 API 或业务状态;不得全局把旧筛选条改为三列。 +- [x] 运行 DOM 契约测试,确认共用原语通过,并对现有非 CRM 消费者做截图冒烟。 + +### Task 2:报价管理与报价审批 + +**Files:** `web-admin/src/views/m/crm/quote/MpQuoteList.vue`, `detail.vue`, related tests. + +- [x] 写管理/审批 mode 的失败测试:列表顺序、Tab、三栏筛选、金额卡、独立详情普通头、Tab、审批时间轴和动作权限。 +- [x] 用同一共享列表实现两个入口的新骨架,保留 `from=approve`、当前用户过滤、分页与 Speed Dial 差异。 +- [x] 详情删除动态顶栏摘要,将编号/状态/金额移入正文;增加字段 Tab 与时间轴。 +- [x] 跑 quote 纯函数、浏览器路由/交互、375/414 截图并修复回归。 + +### Task 3:合同管理与合同审批 + +**Files:** `web-admin/src/views/m/crm/contract/MpContractList.vue`, `detail.vue`, related tests. + +- [x] 写失败测试覆盖列表骨架、金额卡、多选后批量底栏、单/批审批部分成功、独立详情和72px附件。 +- [x] 迁移共享列表和详情,保留管理/审批入口差异、审批人选择与全部业务限制。 +- [x] 将文本附件/隐藏上传改为移动附件宫格,不改变存储字段和上传 API。 +- [x] 跑 contract 纯函数、浏览器测试与375/414截图。 + +### Task 4:产品管理 + +**Files:** `web-admin/src/views/m/crm/product/index.vue`, `detail.vue`, related tests. + +- [x] 写失败测试覆盖全部/上架/下架 Tab、三栏筛选、无金额 expense-card、双项 Speed Dial、独立详情普通头和详情 Tab。 +- [x] 迁移列表与详情,保留分类全路径、上下架、创建者删除限制、分类入口和图片功能。 +- [x] 跑 product 纯函数、浏览器测试与375/414截图。 + +### Task 5:客户管理 + +**Files:** `web-admin/src/views/m/crm/customer/index.vue`, `detail.vue`, `CustomerFilters.vue`, attachments, `customer.scss`, `scripts/test-mp-crm-customer.mjs`. + +- [x] 将现有 Playwright 用例改为新骨架的失败断言,继续覆盖四视图、完整筛选、跟进/联系人/商机/合同/开票/日志、公海、删除与失败重试。 +- [x] 移除两行工具条;将新增迁入 Speed Dial、筛选接入三栏/More、卡片改为 expense-card。 +- [x] 详情使用普通固定标题,保留七个业务 Tab;客户证件与跟进附件改72px宫格。 +- [x] 跑 customer model、Playwright、375/414截图。 + +### Task 6:全量验证与交付 + +**Files:** CRM delivery/issues docs, SQL issue record, graph outputs. + +- [x] 执行四组纯逻辑测试、六入口浏览器回归、目标 lint/stylelint、构建和类型基线对比。 +- [x] 检查六个菜单权限、WebView 映射、详情直达/返回、401/ticket 和双权限场景;不写真实数据库。 +- [x] 记录全量 SQL 缺少 `MINI_CRM_*`、旧 migration 软删除幂等、过期 e2e 文档等非本轮界面问题,不顺手修改未授权系统。 +- [x] 更新 frontend/miniprogram/root 图谱,逐项审计目标后再声明完成。 + diff --git a/docs/superpowers/plans/2026-10-17-mp-webview-crm-customer.md b/docs/superpowers/plans/2026-10-17-mp-webview-crm-customer.md new file mode 100644 index 000000000..85e23bb5c --- /dev/null +++ b/docs/superpowers/plans/2026-10-17-mp-webview-crm-customer.md @@ -0,0 +1,17 @@ +# 小程序 H5 客户管理实施计划 + +目标:按照同日需求文档完成客户管理移动迁移,排除导出,保留 Web 行为。 + +架构:在现有 H5 工程新增独立客户页面与局部组件,调用既有 CRM API。复用 WebView、鉴权、字典和附件能力。 + +- [x] 核对 Web 实际入口、详情关联模块、表单字段和移动参考样式。 +- [x] 新建 `views/m/crm/customer/model.ts` 与测试:表单字段、旧证件兼容、响应归一化、精确 ID、时间转换、创建后开票失败的可重试流程。 +- [x] 新建 `CustomerFields.vue`、`CustomerAttachments.vue`、`InvoiceFields.vue`:手机表单与证件卡片。 +- [x] 新建 `index.vue`、`CustomerFilters.vue`:四种视图、筛选排序、字段显示、分页与批量动作。 +- [x] 新建 `form.vue`:全字段、校验、查重、默认负责人、首次开票及失败重试。 +- [x] 新建 `detail.vue` 及相关面板:跟进、联系人、开票、商机/合同、操作日志;补齐关联商机详情动作。 +- [x] 注册 H5 静态路由、小程序工作台映射;新增菜单与权限 SQL;更新接入文档。 +- [x] 执行单测、浏览器交互、构建、类型基线对比、ESLint、小程序配置语法及图谱更新;字段一致性脚本缺失已记录并人工核对 payload。 +- [x] 对照需求检查差异,完成只读代码评审、问题记录与交付说明。未执行生产发布及真机验收。 + +测试重点:ID 不转 Number、空附件清除、旧附件字段不覆盖新值、分页失败不跳页、搜索竞态不覆盖新结果、上传时不能提交、客户创建成功但开票失败重试不重复创建客户。 diff --git a/docs/superpowers/plans/2026-10-17-mp-webview-pl-plan-cert.md b/docs/superpowers/plans/2026-10-17-mp-webview-pl-plan-cert.md new file mode 100644 index 000000000..910321acc --- /dev/null +++ b/docs/superpowers/plans/2026-10-17-mp-webview-pl-plan-cert.md @@ -0,0 +1,72 @@ +# 危化品证上传移动 H5 Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox syntax for tracking. + +**Goal:** 将 Web 危化品证上传完整迁移为小程序运输管理下的移动 H5,移除导出,保留五个 Tab 与全部其他业务能力。 + +**Architecture:** 新增独立 `views/m/pl/plan-cert/` 模块,读取既有 API、规则和展示工具,不修改 Web 页面或共享逻辑。页面壳、底部筛选、附件组件复用既有移动模式;独立菜单 SQL 只补入口与祖先角色授权。 + +**Tech Stack:** Vue 3、TypeScript、Element Plus、SCSS、uni-app WebView、Node test/tsx、Playwright、MySQL 5.7 菜单 SQL。 + +## Task 0:用户反馈第三次校准(2026-10-17) + +**Files:** `openspec/changes/zkxw-engineering-standards/specs/ui-conventions/spec.md`, `docs/miniprogram-ui-spec-sanqiang.md`, `bak/mobile-ui/shanxia-mp-crm-pl-cert-style-align-demo.html`, `web-admin/src/router/routes/staticRoutes.ts`, `web-admin/scripts/mp-pl-plan-cert-entry.test.mjs`, `web-admin/scripts/test-mp-pl-plan-cert.mjs`, `web-admin/src/views/m/pl/plan-cert/index.vue`, `detail.vue`, `CertDetail.vue`, `CertUpload.vue`, `CertFilters.vue`, `cert.scss`, `docs/web-admin-mp-webview-modules.md`, delivery/issues docs。 + +- [x] **Step 1:写失败测试。** 入口测试断言 `/m/pl/plan-cert/:id` 映射 `detail.vue`;浏览器测试断言列表使用标准 `mp-wv-header`(17px 标题、单胶囊搜索、无副标题/独立搜索按钮)、列表卡横向 x=0/宽=viewport、查看后 URL 进入独立详情、页面不存在“计划详情”Sheet/`ticket-*`、三 Tab 存在;筛选/上传 Sheet 底栏两个按钮各约 96px、间距 ≥12px、整体水平居中、字号14px、触达 ≥44px。运行并确认因当前结构失败。 +- [x] **Step 2:更新视觉权威。** OpenSpec、UI 规范和 Demo 将详情 SHALL 改为“独立路由 + 普通绿顶栏 + Tab + 信息卡 + 底栏”,删除通用票根要求;为危化品证补“无顶部特殊区、列表全宽、Sheet 按钮居中适宽”场景,Code review 清单同步。 +- [x] **Step 3:标准化列表。** `index.vue` 复用 `mp-wv-header` 和单个胶囊 search input,移除自定义副标题/搜索按钮;保留搜索→状态Tab→三栏筛选顺序。目标列表区用局部 full-bleed 布局取消双重水平留白,提示文字自行加内边距;不改其他页面。 +- [x] **Step 4:创建独立详情。** 新增 `detail.vue` 与动态路由;把现有详情内容从 `MpBottomSheet` 容器迁入独立 `MpWebviewShell` 页面,删除票根,保留三 Tab、所有字段、运输复制、合同关联、反馈、证书与附件。详情自行加载权限/ID/数据,并编排上传、齐备、取消齐备和原位刷新;列表与关联计划统一 `router.push`。 +- [x] **Step 5:修正 Sheet 底栏。** 只在 plan-cert 的 `CertFilters.vue`、`CertUpload.vue`/模块样式中使用居中 action group;按钮 `flex:0 0 96px`、间距12px、14px字体、44px命中高度,避免共享 `MpBottomSheet` 全局回归。 +- [x] **Step 6:回归功能。** 保留五 Tab、查询筛选、分页、批量、上传预览/下载/删除、保存重试、权限、状态限制、合同和复制动作;独立详情新增直达/刷新/路由ID切换测试。运行 E2E 确认由红转绿。 +- [ ] **Step 7:验证与交付。** 执行 model/入口测试、目标 ESLint/Stylelint/Prettier、生产构建、类型基线对比,查看 375/414px 列表/详情/Sheet/附件截图;更新交付与问题文档并更新 frontend/miniprogram/root 图谱。 + +## Task 1:独立移动模块(实现子任务) + +Files (new, only): `web-admin/src/views/m/pl/plan-cert/model.ts`, `model.test.ts`, `index.vue`, `CertFilters.vue`, `CertUpload.vue`, `CertDetail.vue`, `CertAttachments.vue`, `PlanCard.vue`, `cert.scss`; 可将详情内运输复制和段次展示拆成同目录单一职责组件。 + +- [x] 先写 model 测试并执行 `cd web-admin && pnpm exec tsx --test src/views/m/pl/plan-cert/model.test.ts`,确认缺失实现导致失败。 +- [x] 建立查询与操作纯函数: + ```ts + buildCertQuery(tab, keyword, filters, page, pageSize) + canUploadCert(plan) // archiveStatus !== archived && followStatus !== cancelled + eligibleReadyPlans(plans, ready) // 含危化品、可操作且当前状态不同 + certPayload(products) // 仅 id、purchaseCertUrl、transportCertUrl、legalUseCertUrl + ``` + 测试五 Tab `hasHazardProduct=1`、未上传 `certUploadStatus=incomplete/hazardCertReady=0`、默认 followStatus 排除 cancelled、Tab 冲突优先、显式已取消筛选、空/多 URL 保留和去除无关字段、归档/已取消及批量跳过。 +- [x] 实现列表:五个固定顺序文字 Tab,关键词、日期快捷、全部字段筛选、排序、刷新、分页重试、可展开卡片、多选和清除选中。请求版本号拒绝过期响应;只有成功后更新分页;Tab/查询变化清空选中。按 Web 配对行工具过滤卡片段次,保留全部原列信息。 +- [x] 实现筛选面板:直接读 Web `columnFilterDefs`,enum 静态选项/动态 facet,datetime 范围、number 操作符映射到 queryKeyPrefix,text 映射 queryKey;应用前校验范围。复用 Web 装送客户/合同侧别参数转换,不改原文件。 +- [x] 实现上传面板:每次打开取最新详情并 enrich 危化属性;使用共享 getRequiredCertSlots、AttachmentUploadField;暴露上传中检查,保存前必须检查全部实例;允许空附件,不自动齐备;保存失败保留内容;上传 PATCH 只提交产品证书字段。 +- [x] 实现详情和卡片附件:显示全部段次/产品及数量、基本信息、车辆、运输回传、运费、备注、证书和合同关联;仅保留 Web 本菜单原操作。复制给司机/现场及磅单二维码沿用 usePlPlanArrangeActions,不引入新增计划/作废/安排运输。 +- [x] 权限先获取 `fetchGetMenuCodes()`,上传/齐备分别判断 Web 按钮权限;失败关闭写入口。提交二次确认,批量逐条处理并汇报成功/失败/跳过,完成后刷新当前详情及列表。 +- [x] module 样式只在本模块 `.cert-module` / `.cert-*` 及挂载期间的弹层范围内,三墙绿、44px 触达、375/414px 不横向溢出,附件同列换行。所有新增 Vue API/Element 组件使用已有自动导入。 +- [x] 执行 model 测试、目标 ESLint/Prettier,报告结果及发现但未改的其他模块问题。 +- [x] 独立规格审查通过后进行代码质量审查,修复本次新增问题。 + +## Task 2:入口和菜单(主任务集成) + +Files: `web-admin/src/router/routes/staticRoutes.ts`, `miniprogram/config/api.js`, `miniprogram/config/workbench-menus.js`, `docs/sql/migrations/2026-10-17-mini-pl-plan-cert-webview-menus.sql`, `docs/miniprogram-ui-spec-sanqiang.md`, `docs/web-admin-mp-webview-modules.md`。 + +- [x] 先新增 `web-admin/scripts/mp-pl-plan-cert-entry.test.mjs`,断言路由、工作台所属组、映射和 SQL 不修改 Web 菜单,运行 node test 验证缺入口失败。 +- [x] 只读确认测试库移动端运输父菜单;绝不打印连接密码,不写数据库。 +- [x] 路由接入: + ```ts + { path: '/m/pl/plan-cert', name: 'MpPlPlanCert', + component: () => import('@/views/m/pl/plan-cert/index.vue'), + meta: { title: '危化品证上传', isHideTab: true, isMpWebview: true } } + ``` +- [x] 工作台加入 `{name:'危化品证上传', enabled:true, code:'pl-plan-cert-webview', icon:'📑', perms:'mini:pl:plan-cert:list'}`;路由映射 `PAGE_PATHS.mpWebview + '?path=' + encodeURIComponent('/m/pl/plan-cert')`。 +- [x] SQL 使用实际查到的移动根/运输父菜单关系,不新建同名父级;事务中新增移动叶子并对有 Web 列表权限角色补祖先,保持幂等、租户隔离、仅本模块菜单。未授权不执行。 +- [x] 写移动页面结构规范、模块路径/权限/首次发布说明,复跑入口测试与 node --check 两个 mini 配置。 + +## Task 3:集成验证、审查、交付 + +Files: `web-admin/scripts/test-mp-pl-plan-cert.mjs`, `docs/superpowers/specs/2026-10-17-mp-pl-plan-cert-delivery.md`, `docs/superpowers/specs/2026-10-17-mp-pl-plan-cert-existing-issues.md`。 + +- [x] 参考客户测试建立仅在 API 边界模拟的浏览器测试,页面模块使用真实代码;拦截 `/api/` 请求,不误拦截 `/src/api/`,未知业务写请求直接失败。 +- [x] 测试五 Tab 参数、全字段筛选代表路径、关键词日期、分页失败重试、选中重置、单/批齐备和取消、无权限、归档/取消限制、详情关联信息、附件选择/上传等待/删除/保存失败与重试,断言没有导出按钮。 +- [x] 截图375和414宽度的列表/筛选/详情/附件,检查无横向溢出、关键信息可见、附件卡片一致。 +- [x] `pnpm build`、`pnpm exec vue-tsc --noEmit`、新增测试与目标 lint;类型检查如失败和前序675错误基线比较,新增错误必须清零,不修其他模块错误。 +- [x] 对实施前保存的 Web/后端/共享组件 SHA256 作逐项比较,证明未改用户禁止范围。 +- [x] 规格审查→代码质量审查→修复→复测,记录真实结果,不以模拟测试代替真机验收。 +- [x] `./scripts/update-graph.sh frontend`、`graphify update miniprogram`、`graphify update .` 更新对应图谱;图谱体量限制或缺少工具如实记录。 +- [x] 交付文档覆盖完整需求、执行命令结果、待发布/SQL步骤和既有问题。不提交/推送混有用户更改的工作区,不写生产库。 diff --git a/docs/superpowers/plans/2026-10-18-mp-crm-customer-detail-tabs.md b/docs/superpowers/plans/2026-10-18-mp-crm-customer-detail-tabs.md new file mode 100644 index 000000000..80b7f9a60 --- /dev/null +++ b/docs/superpowers/plans/2026-10-18-mp-crm-customer-detail-tabs.md @@ -0,0 +1,83 @@ +# 客户详情四 Tab UI 对齐 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:** 将客户详情中商机/合同/开票/操作日志四个 Tab 的列表对齐联系人范式,详情弹层对齐资料 Tab。 + +**Architecture:** `InvoicePanel` 独立先改;`RelatedPanel` 按 `kind` 统一列表卡 + 三栏筛选,合同改为弹层查看;复用 `mp-customer-detail-card` 与联系人 teleport 约定;不改 API。 + +**Tech Stack:** Vue 3 + Vant 4 + SCSS(三墙绿);参考 `ContactPanel.vue`。 + +**Spec:** `docs/superpowers/specs/2026-10-18-mp-crm-customer-detail-tabs-design.md` + +--- + +## File map + +| File | Responsibility | +|------|----------------| +| `web-admin/src/views/m/crm/customer/InvoicePanel.vue` | 开票列表骨架 + 展开操作 + 表单 teleport | +| `web-admin/src/views/m/crm/customer/RelatedPanel.vue` | 商机/合同/日志列表 + 资料风弹层 | +| `web-admin/src/views/m/crm/customer/customer.scss` | 相关 panel 筛选/卡样式(复用 contact 节奏) | +| `docs/superpowers/specs/2026-10-18-mp-crm-customer-detail-tabs-design.md` | 状态改为已确认 | + +不强制新建共用组件;`LocalFilters.vue` 本轮仅从上述两文件解除引用,文件保留。 + +--- + +### Task 1: 规格状态 + InvoicePanel 列表骨架 + +**Files:** +- Modify: `docs/superpowers/specs/2026-10-18-mp-crm-customer-detail-tabs-design.md`(状态行) +- Modify: `web-admin/src/views/m/crm/customer/InvoicePanel.vue` +- Modify: `web-admin/src/views/m/crm/customer/customer.scss`(如需 `.mp-customer-invoice-panel` 复用 contact-dd) + +- [x] **Step 1:** 规格状态改为「已确认」。 +- [x] **Step 2:** 重写 `InvoicePanel` template/script: + - 根 `section.mp-customer-invoice-panel`(或复用 `mp-customer-contact-panel` 类结构) + - 操作栏:新增 + 刷新 + - `input.mp-wv-search` 占位「单位名称 / 税号 / 银行」 + - `van-dropdown-menu`:`isDefault`(全部/默认/非默认)、`taxFilter`(全部/有税号/无税号)、更多 Sheet(单位名/税号/地址/法人/代理人/电话/银行/账号文本,来自 `invoiceFields` 除已在快捷的) + - 卡片:`mp-customer-detail-card`,标题 `companyName`,Tag 默认/非默认,摘要 `taxNo · bankName`,默认收叠,展开 `invoiceFields` 行 + 设默认/编辑/删除 + - 编辑/新增 popup、`defaultOpen` picker 均 `teleport="body"` + - 去掉 `LocalFilters` 与列表态 `InvoiceFields`/`van-cell-group` +- [x] **Step 3:** 手工核对:筛选逻辑客户端过滤;`save`/`setDefault`/`remove`/`load` API 不变。 +- [ ] **Step 4:** Commit(若用户要求再提交;默认本会话可暂不 commit) + +### Task 2: RelatedPanel 列表骨架(三 kind) + +**Files:** +- Modify: `web-admin/src/views/m/crm/customer/RelatedPanel.vue` +- Modify: `web-admin/src/views/m/crm/customer/customer.scss` + +- [x] **Step 1:** 列表区改为联系人式:检索 + 两快捷 + 更多 + 扁平卡 + 展开字段 +「查看」;保留加载更多与 `total`。 +- [x] **Step 2:** 按 kind 配置快捷/占位/卡摘要(见 spec §4.1–4.4);更多 Sheet 字段映射现有 `buildDetail*ColumnFilterDefs` 的 text/datetime/number/enum(可用简化:text 用 van-field,enum 用 picker,日期可先文本包含匹配以控范围)。 +- [x] **Step 3:** 去掉列表态 `LocalFilters`、`van-field` 标签检索、`van-cell-group` 列表。 + +### Task 3: RelatedPanel 详情弹层资料风 + 合同不跳转 + +**Files:** +- Modify: `web-admin/src/views/m/crm/customer/RelatedPanel.vue` + +- [x] **Step 1:** 合同 `open`:取消 `router.push`;打开弹层,`detail = row`,标题「合同详情」。 +- [x] **Step 2:** 弹层 DOM 对齐资料:`section.mp-wv-section` + `h3` + `CustomerFields`;`teleport="body"`;日志加请求参数 section。 +- [x] **Step 3:** 商机:保留 `OpportunityActions` + 跟进/阶段;子项改为 `mp-customer-detail-card` 可收叠。 + +### Task 4: 验收与图谱 + +- [x] **Step 1:** 确认 `LocalFilters` 是否仍被引用;仅 Invoice/Related 解除即可。 +- [x] **Step 2:** `./scripts/update-graph.sh frontend`(或 `graphify update`)。 +- [x] **Step 3:** 对照 spec §7 自检清单。 + +--- + +## Spec coverage + +| Spec | Task | +|------|------| +| §3 共用列表骨架 | 1–2 | +| §4.3 开票 | 1 | +| §4.1/4.2/4.4 商机合同日志列表 | 2 | +| §4.1–4.2/4.4 弹层 + 合同不跳转 | 3 | +| §5 DOM 契约 | 3 | +| §7 验收 | 4 | diff --git a/docs/superpowers/plans/2026-10-18-mp-crm-customer-list-card.md b/docs/superpowers/plans/2026-10-18-mp-crm-customer-list-card.md new file mode 100644 index 000000000..345ea5cb9 --- /dev/null +++ b/docs/superpowers/plans/2026-10-18-mp-crm-customer-list-card.md @@ -0,0 +1,13 @@ +# 客户管理列表卡(全量 Web 列)Implementation Plan + +> 已在同会话落地(2026-10-18)。 + +**Goal:** 客户列表卡对齐产品卡范式;固定展示 Web 客户管理全部列;去掉「显示字段」配置。 + +**Done:** +- [x] `model.ts`:`CUSTOMER_LIST_CARD_FIELDS` + 新 meta / split +- [x] `model.test.ts` 更新并通过 +- [x] `index.vue`:固定预览/展开;meta 改为状态·编号·时间 +- [x] `CustomerFilters.vue`:去掉显示字段 +- [x] `mp-webview.scss`:客户卡 toggle 去虚线 +- [x] Spec:`docs/superpowers/specs/2026-10-18-mp-crm-customer-list-card-design.md` diff --git a/docs/superpowers/plans/2026-10-18-mp-crm-product-align-customer.md b/docs/superpowers/plans/2026-10-18-mp-crm-product-align-customer.md new file mode 100644 index 000000000..ceb9b3951 --- /dev/null +++ b/docs/superpowers/plans/2026-10-18-mp-crm-product-align-customer.md @@ -0,0 +1,17 @@ +# 产品管理对齐客户样式 Implementation Plan + +> **For agentic workers:** Use executing-plans / subagent-driven-development. Steps use checkbox syntax. + +**Goal:** 产品 H5 整模块视觉交互对齐客户管理(方案 A)。 + +**Architecture:** 列表绿头内 Tab/三栏;详情 sticky van-tabs;表单外壳 Vant loading;分类 Vant popup。API 不变。 + +**Tech Stack:** Vue 3 + Vant + 三墙绿;参考 customer index/detail。 + +--- + +- [x] Task 1: 规格 `docs/superpowers/specs/2026-10-18-mp-crm-product-align-customer-design.md` +- [x] Task 2: 列表 `index.vue` + `product.scss` + `mp-webview.scss` 共用列表样式 +- [x] Task 3: 详情 `detail.vue` +- [x] Task 4: 表单外壳 `form.vue` +- [x] Task 5: 分类 `categories.vue` diff --git a/docs/superpowers/plans/2026-10-18-mp-crm-product-list-card.md b/docs/superpowers/plans/2026-10-18-mp-crm-product-list-card.md new file mode 100644 index 000000000..85532282e --- /dev/null +++ b/docs/superpowers/plans/2026-10-18-mp-crm-product-list-card.md @@ -0,0 +1,555 @@ +# 产品管理列表卡(去色块 + 折叠)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:** 小程序 WebView 产品管理列表去掉状态 Tab 与双色块,固定只查上架,卡片对齐 PC 默认可见列并用客户列表式「更多字段」折叠。 + +**Architecture:** 在 `mp-crm-product-card.ts` 集中查询固定 `statusIn=on`、卡片 meta/预览/展开字段与品牌别名价格格式化;`index.vue` 去掉 Tab、改 DOM;`mp-webview.scss` 将产品卡样式改为客户卡扁平结构。不改后端契约。 + +**Tech Stack:** Vue 3 + Vant(WebView)+ TypeScript;node:test 单测;三墙 Token。 + +**Spec:** `docs/superpowers/specs/2026-10-18-mp-crm-product-list-card-design.md` + +**Demo:** `bak/mobile-ui/shanxia-mp-crm-product-list-card-demo.html` + +--- + +## File map + +| File | Responsibility | +|------|----------------| +| `web-admin/src/utils/mp-crm-product-card.ts` | 查询固定上架;卡片模型(meta、preview、extra、格式化) | +| `web-admin/src/utils/mp-crm-product-card.test.ts` | 上述行为单测 | +| `web-admin/src/views/m/crm/product/index.vue` | 去 Tab;折叠卡 DOM;expandedIds | +| `web-admin/src/styles/mp-webview.scss` | 删除产品色块样式;加产品扁平卡样式 | +| `web-admin/src/utils/money-format.ts` | 复用 `formatMoneyDisplay`(只读,不改) | + +--- + +### Task 1: 单测驱动 — 查询固定上架 + 卡片字段拆分 + +**Files:** +- Modify: `web-admin/src/utils/mp-crm-product-card.test.ts` +- Modify: `web-admin/src/utils/mp-crm-product-card.ts` + +- [x] **Step 1: 重写失败测试** + +将 `mp-crm-product-card.test.ts` 替换为: + +```ts +import assert from 'node:assert/strict' +import { describe, it } from 'node:test' +import { + buildProductListQuery, + buildProductCard, + productStatusLabel, + productStatusTagType +} from './mp-crm-product-card' + +describe('buildProductListQuery', () => { + it('always sets statusIn on (list is on-shelf only)', () => { + assert.deepEqual( + buildProductListQuery({ + page: 1, + pageSize: 20, + keyword: ' 酸 ', + categoryId: 'cat-1', + model: ' 98% ', + priceMin: 10, + priceMax: 30 + }), + { + page: 1, + pageSize: 20, + statusIn: 'on', + keyword: '酸', + categoryId: 'cat-1', + model: '98%', + priceMin: 10, + priceMax: 30 + } + ) + }) + + it('omits blank keyword and blank category/model', () => { + const q = buildProductListQuery({ page: 2, pageSize: 10, keyword: ' ' }) + assert.deepEqual(q, { page: 2, pageSize: 10, statusIn: 'on' }) + }) +}) + +describe('buildProductCard', () => { + it('builds meta, preview, extra without cost; formats brands/aliases/price', () => { + const card = buildProductCard({ + id: 'p1', + productNo: 'SX001', + productName: '硫酸', + categoryPath: '化工 / 酸类', + model: '98%', + status: 'on', + isToxic: 1, + isExplosive: 0, + createTime: '2026-10-17 09:00:00', + images: '/fixture/product.png', + createBy: 'user-1', + brands: [{ brandName: '山峡' }, { brandName: '华恒' }], + aliases: [{ aliasName: 'H2SO4' }], + price: 1280 + }) + assert.equal(card.id, 'p1') + assert.equal(card.productName, '硫酸') + assert.equal(card.statusLabel, '上架') + assert.equal(card.statusTagType, 'success') + assert.equal(card.showToxic, true) + assert.equal(card.showExplosive, false) + assert.equal(card.metaLine, '上架 · SX001 · 2026-10-17 09:00:00') + assert.deepEqual(card.previewFields, [ + { key: 'categoryPath', label: '产品分类', value: '化工 / 酸类' }, + { key: 'model', label: '规格型号', value: '98%' } + ]) + assert.deepEqual( + card.extraFields.map((f) => f.key), + ['productNo', 'brands', 'aliases', 'price', 'status'] + ) + assert.equal(card.extraFields.find((f) => f.key === 'brands')?.value, '山峡、华恒') + assert.equal(card.extraFields.find((f) => f.key === 'aliases')?.value, 'H2SO4') + assert.equal(card.extraFields.find((f) => f.key === 'price')?.value, '¥1,280.00') + assert.equal(card.extraFields.find((f) => f.key === 'status')?.value, '上架') + assert.equal(card.extraFields.some((f) => f.key === 'cost'), false) + assert.equal(card.createBy, 'user-1') + }) + + it('uses em dash for empty brands/aliases/price/model', () => { + const card = buildProductCard({ + id: 'p2', + productName: '片碱', + status: 'on' + }) + assert.equal(card.metaLine, '上架 · — · —') + assert.equal(card.previewFields[0].value, '—') + assert.equal(card.previewFields[1].value, '—') + assert.equal(card.extraFields.find((f) => f.key === 'brands')?.value, '—') + assert.equal(card.extraFields.find((f) => f.key === 'price')?.value, '—') + }) +}) + +describe('productStatusTagType', () => { + it('maps on→success off→info', () => { + assert.equal(productStatusTagType('on'), 'success') + assert.equal(productStatusTagType('off'), 'info') + assert.equal(productStatusLabel('on'), '上架') + assert.equal(productStatusLabel('off'), '下架') + }) +}) +``` + +- [x] **Step 2: 跑测确认失败** + +Run(在 `web-admin` 目录): + +```bash +pnpm exec tsx --test src/utils/mp-crm-product-card.test.ts +``` + +Expected: FAIL(`statusFilter` 仍为旧 API / 无 `metaLine` 等) + +- [x] **Step 3: 实现 `mp-crm-product-card.ts`** + +完整替换为: + +```ts +import { formatMoneyDisplay } from '@/utils/money-format' + +export type ProductBrandLike = { brandName?: string } +export type ProductAliasLike = { aliasName?: string } + +export type ProductCardField = { key: string; label: string; value: string } + +export function productStatusLabel(status?: string): string { + if (status === 'off') return '下架' + if (status === 'on') return '上架' + return status || '—' +} + +export function productStatusTagType(status?: string): 'success' | 'info' | 'warning' { + if (status === 'on') return 'success' + if (status === 'off') return 'info' + return 'warning' +} + +function dash(value?: string | null): string { + const t = String(value ?? '').trim() + return t || '—' +} + +export function formatProductBrandsForCard(brands?: ProductBrandLike[]): string { + if (!brands?.length) return '—' + const names = brands.map((b) => String(b.brandName || '').trim()).filter(Boolean) + return names.length ? names.join('、') : '—' +} + +export function formatProductAliasesForCard(aliases?: ProductAliasLike[]): string { + if (!aliases?.length) return '—' + const names = aliases.map((a) => String(a.aliasName || '').trim()).filter(Boolean) + return names.length ? names.join('、') : '—' +} + +export function formatProductPriceForCard(value?: number | string | null): string { + if (value === null || value === undefined || value === '') return '—' + const num = Number(value) + if (Number.isNaN(num) || num === 0) return '—' + return `¥${formatMoneyDisplay(num)}` +} + +/** 产品管理列表固定只查上架 */ +export function buildProductListQuery(input: { + page: number + pageSize: number + keyword: string + categoryId?: string + model?: string + priceMin?: number + priceMax?: number +}): Record { + const params: Record = { + page: input.page, + pageSize: input.pageSize, + statusIn: 'on' + } + const kw = String(input.keyword || '').trim() + if (kw) params.keyword = kw + const categoryId = String(input.categoryId || '').trim() + if (categoryId) params.categoryId = categoryId + const model = String(input.model || '').trim() + if (model) params.model = model + if (input.priceMin !== undefined && Number.isFinite(input.priceMin)) + params.priceMin = input.priceMin + if (input.priceMax !== undefined && Number.isFinite(input.priceMax)) + params.priceMax = input.priceMax + return params +} + +export function buildProductCard(row: { + id: string + productNo?: string + productName?: string + categoryPath?: string + categoryName?: string + model?: string + status?: string + isToxic?: number + isExplosive?: number + createTime?: string + images?: string + createBy?: string + brands?: ProductBrandLike[] + aliases?: ProductAliasLike[] + price?: number | string | null +}) { + const productNo = dash(row.productNo) + const statusLabel = productStatusLabel(row.status || 'on') + const createTime = dash(row.createTime) + const categoryPath = dash(row.categoryPath || row.categoryName) + const model = dash(row.model) + const coverImage = String(row.images || '') + .split(',') + .map((item) => item.trim()) + .find(Boolean) + + const previewFields: ProductCardField[] = [ + { key: 'categoryPath', label: '产品分类', value: categoryPath }, + { key: 'model', label: '规格型号', value: model } + ] + const extraFields: ProductCardField[] = [ + { key: 'productNo', label: '产品编号', value: productNo }, + { key: 'brands', label: '品牌', value: formatProductBrandsForCard(row.brands) }, + { key: 'aliases', label: '别名', value: formatProductAliasesForCard(row.aliases) }, + { key: 'price', label: '标准价(元)', value: formatProductPriceForCard(row.price) }, + { key: 'status', label: '状态', value: statusLabel } + ] + + return { + id: row.id, + productNo, + productName: dash(row.productName) === '—' ? '—' : String(row.productName || '').trim() || '—', + categoryPath, + model, + status: row.status || '', + statusLabel, + statusTagType: productStatusTagType(row.status || 'on'), + showToxic: Number(row.isToxic) === 1, + showExplosive: Number(row.isExplosive) === 1, + createTime: row.createTime || '', + coverImage: coverImage || '', + createBy: row.createBy || '', + metaLine: `${statusLabel} · ${productNo} · ${createTime}`, + previewFields, + extraFields + } +} +``` + +- [x] **Step 4: 跑测确认通过** + +```bash +pnpm exec tsx --test src/utils/mp-crm-product-card.test.ts +``` + +Expected: PASS + +注:若 `@/` 别名在 tsx 测试中解析失败,改为相对导入 `./money-format`(同目录层级:`import { formatMoneyDisplay } from './money-format'`)。 + +--- + +### Task 2: 列表页 DOM — 去 Tab + 折叠卡 + +**Files:** +- Modify: `web-admin/src/views/m/crm/product/index.vue` + +- [x] **Step 1: 更新 script 导入与状态** + +删除对 `MP_PRODUCT_STATUS_FILTERS`、`MpProductStatusFilter` 的导入与使用。 + +- 删除 `statusFilter` ref、`onStatusChange` +- `requestSnapshot` / `fetchPage` / `onShellReady` 去掉 statusFilter +- `buildProductListQuery` 调用去掉 `statusFilter` +- 增加: + +```ts +const expandedIds = ref>(new Set()) + +function isExpanded(id: string) { + return expandedIds.value.has(String(id)) +} +function toggleExpand(id: string, e?: Event) { + e?.stopPropagation() + const key = String(id) + const next = new Set(expandedIds.value) + if (next.has(key)) next.delete(key) + else next.add(key) + expandedIds.value = next +} +``` + +- `reload` / `fetchPage(true)` 时清空:`expandedIds.value = new Set()` +- `ProductRow` 增加可选:`brands?: Array<{ brandName?: string }>`、`aliases?: Array<{ aliasName?: string }>`、`price?: number | string` + +- [x] **Step 2: 更新模板 header** + +删除整个 `#before-search` 的 `van-tabs` 块。`MpBusinessHeader` 仅保留搜索与 `#after-search` 下拉。 + +- [x] **Step 3: 更新卡片模板** + +将 `article.mp-product-list-card` 内 head 以下至 actions 之前替换为(对齐客户列表): + +```vue +
+
+
+
+ {{ card.productName }} + 毒 + 爆 +
+
{{ card.metaLine }}
+
+
+ {{ + card.statusLabel + }} +
+ +
+
+ {{ field.label }} + {{ field.value }} +
+
+ + + +
+
+ {{ field.label }} + {{ field.value }} +
+
+``` + +保留原有 `mp-wv-card-actions` 四按钮不变。 + +- [x] **Step 4: 手动冒烟检查点** + +打开 `/#/m/crm/product`:无状态 Tab;卡无绿/灰色块;可展开更多字段含品牌/别名/标准价;下架后卡消失。 + +--- + +### Task 3: 样式 — 去色块、对齐客户扁平卡 + +**Files:** +- Modify: `web-admin/src/styles/mp-webview.scss` + +- [x] **Step 1: 替换产品列表卡样式块** + +删除注释 `/* 产品列表:保留强调条 + KV 色块 */` 起至该段结束的 `.mp-product-list .mp-product-list-card { ... }` 整块,改为: + +```scss +/* 产品列表:扁平摘要 + 预览 / 展开(无色块,对齐客户列表) */ +.mp-product-list .mp-product-list-card { + .mp-product-list-card__meta { + margin-top: 4px; + font-size: 12px; + line-height: 1.5; + color: #6b7b74; + } + + .mp-wv-card__no .mp-product-hazard { + margin-left: 6px; + vertical-align: middle; + } + + .mp-product-list-card__preview { + display: flex; + flex-direction: column; + gap: 4px; + margin-top: 8px; + } + + .mp-product-list-card__line { + display: flex; + gap: 10px; + justify-content: space-between; + font-size: 13px; + color: #223b33; + + > span:first-child { + color: #6b7b74; + font-size: 12px; + } + + > span:last-child { + font-weight: 500; + text-align: right; + } + } + + .mp-product-list-card__toggle { + display: flex; + gap: 4px; + align-items: center; + justify-content: center; + width: 100%; + margin-top: 10px; + padding: 8px 0 2px; + font-size: 13px; + font-weight: 600; + color: #087f57; + background: none; + border: 0; + border-top: 1px dashed #dcebe4; + cursor: pointer; + } + + .mp-product-list-card__toggle-icon { + font-size: 11px; + line-height: 1; + } + + .mp-product-list-card__extra { + margin-top: 8px; + } + + .mp-product-list-card__row { + display: flex; + gap: 12px; + align-items: flex-start; + padding: 4px 0; + font-size: 13px; + line-height: 1.45; + + > span:first-child { + flex: 0 0 auto; + min-width: 5em; + color: #6b7b74; + white-space: nowrap; + } + + > span:last-child { + flex: 1; + min-width: 0; + color: #1f2a26; + text-align: right; + word-break: break-word; + } + } +} +``` + +- [x] **Step 2: 确认 `product.scss` 无需状态 Tab 残留依赖** + +已从 `mp-webview.scss` 移除无引用的 `.mp-product-view-tabs` 选择器;`product.scss` 的 `.mp-product-tag-row` 仍被详情页使用,保留。 + +--- + +### Task 4: 图谱更新 + 验证 + +**Files:** +- Run: `./scripts/update-graph.sh frontend` 或 `graphify update .`(按仓库惯例) + +- [x] **Step 1: 再跑单测** + +```bash +cd web-admin && pnpm exec tsx --test src/utils/mp-crm-product-card.test.ts +``` + +Expected: PASS + +- [x] **Step 2: 更新知识图谱** + +```bash +./scripts/update-graph.sh frontend +``` + +或在仓库根目录:`graphify update .`(若脚本要求在子目录则用脚本)。 + +- [x] **Step 3: 完成核对(对照 spec §5.3)** + +- [x] 无状态 Tab +- [x] 无绿底编号条 / 灰底 KV +- [x] 预览分类+型号;展开含编号/品牌/别名/标准价/状态;无成本价 +- [x] 毒/爆小标 + 右上上架 Tag +- [x] 查询固定上架 + +--- + +## Spec coverage check + +| Spec 项 | Task | +|---------|------| +| 去状态 Tab / 固定上架 | Task 1 + 2 | +| 去双色块 | Task 2 + 3 | +| PC 默认列字段(无成本价) | Task 1 | +| 折叠交互 | Task 2 + 3 | +| meta `上架 · 编号 · 时间` | Task 1 | +| 验证清单 | Task 4 | + +## Commit note + +按用户仓库规则:**未明确要求则不自动 git commit**。任务完成后由用户决定是否提交。 diff --git a/docs/superpowers/plans/2026-10-18-mp-crm-quote-flat-card.md b/docs/superpowers/plans/2026-10-18-mp-crm-quote-flat-card.md new file mode 100644 index 000000000..63ff79601 --- /dev/null +++ b/docs/superpowers/plans/2026-10-18-mp-crm-quote-flat-card.md @@ -0,0 +1,27 @@ +# 报价单 WebView 扁平卡对齐 Implementation Plan + +> **For agentic workers:** 按任务顺序落地;本会话由用户授权跳过逐步确认。 + +**Goal:** 将报价单管理/审批列表与详情、表单外壳、确认弹窗对齐客户/产品扁平卡规范。 + +**Architecture:** 扩展 `mp-crm-quote-card.ts` 输出 preview/extra;`MpQuoteList` 改 Vant Tab + 三栏 + 扁平卡;详情确认走 `showCrmConfirmDialog`;样式复用 `mp-webview.scss` 客户/产品卡段。 + +**Tech Stack:** Vue 3、Vant、`mp-wv-*`、三墙 Token + +--- + +### Task 1: 卡片模型与单测 + +**Files:** `web-admin/src/utils/mp-crm-quote-card.ts`、`mp-crm-quote-card.test.ts` + +### Task 2: MpQuoteList 换皮 + +**Files:** `web-admin/src/views/m/crm/quote/MpQuoteList.vue`、`mp-webview.scss`、`scripts/test-mp-crm-quote-dom.mjs` + +### Task 3: 详情确认 + 表单外壳 + +**Files:** `detail.vue`、`form.vue` + +### Task 4: 验证 + +Run: `pnpm exec tsx --test src/utils/mp-crm-quote-card.test.ts`;`node scripts/test-mp-crm-quote-dom.mjs` diff --git a/docs/superpowers/specs/2026-10-15-mp-webview-crm-product-design.md b/docs/superpowers/specs/2026-10-15-mp-webview-crm-product-design.md new file mode 100644 index 000000000..89935c5f5 --- /dev/null +++ b/docs/superpowers/specs/2026-10-15-mp-webview-crm-product-design.md @@ -0,0 +1,227 @@ +# 小程序 WebView · CRM 产品管理 — 设计文档 + +> **日期**: 2026-10-15 +> **状态**: 待实现 +> **方案**: 复用运输计划 WebView 模板;在 `web-admin` 新增 `/#/m/crm/product*`;工作台开放「CRM管理 → 产品管理」 +> **权威接入清单**: `docs/web-admin-mp-webview-modules.md` +> **样式参考**: `/#/m/pl/plan*`(三墙 Token,`mp-webview.scss`) + +## 1. 目标 + +在微信小程序中提供与 Web 管理端 **CRM管理 → 产品管理**(`/#/crm/product`)同等核心能力(列表 / 详情 / 新增编辑 / 删除 / 单条上下架 / 产品内分类维护),以 **WebView 加载 H5** 落地: + +- 业务改动优先只发 `web-admin` 静态资源 +- 不复制鉴权、不新建第二个 `web-view` 壳页 +- 移动端视觉对齐「运输计划」H5,不套桌面 Fresh Mint + +## 2. 已确认决策 + +| # | 项 | 决策 | +|---|-----|------| +| D1 | 接入方式 | **方案 1:嵌套 H5**(同运输计划),不写原生 `pages/crm/*` | +| D2 | 功能范围 | 列表 + 查看详情 + 新增/编辑 + 删除 + **单条**上下架 | +| D3 | 明确不做 | 导入、导出、批量上架、批量下架;桌面列头 facet / 列显隐 | +| D4 | 表单字段 | **全字段对齐 Web**:编号/名称/拼音/分类/型号/条码/税率/库存/预警/状态/易制毒爆/图片/描述/备注 + 品牌子表 + 别名子表 | +| D5 | 产品分类 | **产品页内**一并做分类增删改(树选 + 维护入口);不单独占工作台菜单 | +| D6 | H5 落点 | `web-admin` `/#/m/crm/product*`,复用现有 `/web/crm/products/*` 与 `product-categories/*` | +| D7 | 视觉 | 三墙绿 `#0a9f6d` / `#087f57`(`mp-webview.scss`),对齐运输计划骨架;**不**用管理端 `#10b981` 作主色 | +| D8 | 菜单 | `sys_menu`:移动端根下建「CRM管理」→「产品管理」;工作台硬编码打开 CRM 模块与产品入口 | +| D9 | 角色绑定 | 已有 Web `crm:product:list`(菜单 id `CRM00000000000000000000000000003`)的角色,**自动补绑**移动端父菜单与产品菜单 | +| D10 | 双权限 | 入口 `mini:crm:product:list`;业务 API 仍校验现有 Web 产品鉴权 | + +## 3. 非目标 + +- 不把桌面 `el-table` / 多选工具栏原样塞进 WebView +- 不改产品后端业务规则、租户隔离与数据权限语义 +- 本期不开放 CRM 其它叶子(线索/客户/合同等仍灰卡或 `enabled: false`) +- 不新建独立 `mobile-h5` 工程,不新增第二个 `mp-webview` 页面 +- 不输出独立 HTML Demo 文件(样式直接对齐现网 `/m/pl/plan`) + +## 4. 架构 + +```text +小程序工作台「CRM管理」→「产品管理」 + → pages/common/mp-webview?path=/m/crm/product + 1) POST /api/web/auth/mp-webview-ticket (小程序 Bearer) + 2) web-view src = {WEB_ORIGIN}/?mpTicket=…#/m/crm/product?mpTicket=… + 3) H5:MpWebviewShell → POST /api/web/auth/mp-webview-exchange + 4) 之后与桌面同账号调用 /web/crm/products/*、product-categories/* +``` + +```text +┌─────────────┐ ticket ┌────────────────────────┐ JWT ┌────────────┐ +│ miniprogram│ ──────────────► │ web-admin /#/m/crm/… │ ───────────► │ FastAPI │ +│ mp-webview │ ◄────────────── │ MpWebviewShell │ ◄─────────── │ 既有 CRM │ +└─────────────┘ 401→reLaunch └────────────────────────┘ 租户/权限 └────────────┘ +``` + +**边界** + +| 单元 | 职责 | 依赖 | +|------|------|------| +| `pages/common/mp-webview` | 取票、拼 URL、承载 ``(**已有,不改协议**) | 小程序 token、`WEB_ORIGIN` | +| `MpWebviewShell` | 无侧栏、安全区、401 桥接(已有) | 换票、`wx.miniProgram` | +| `/#/m/crm/product*` | 产品移动端 UI | 现有 `api/crm/product`、分类 API、上传 | +| 工作台 | 入口可见性与跳转 | `workbench-menus.js` + `WORKBENCH_ROUTE_MAP` + `menu-codes` | +| 菜单 SQL | 移动端目录/叶子 + 角色补绑 | `sys_menu` / `sys_role_menu` | + +## 5. H5 路由与页面 + +### 5.1 静态路由 + +在 `web-admin/src/router/routes/staticRoutes.ts`(catch-all 之前)增加,且: + +`meta: { isHideTab: true, isMpWebview: true }` + +| 路径 | 文件(建议) | 用途 | +|------|--------------|------| +| `/m/crm/product` | `views/m/crm/product/index.vue` | 列表 | +| `/m/crm/product/new` | `views/m/crm/product/form.vue` | 新增 | +| `/m/crm/product/:id` | `views/m/crm/product/detail.vue` | 详情 | +| `/m/crm/product/:id/edit` | `views/m/crm/product/form.vue` | 编辑 | +| `/m/crm/product/categories` | `views/m/crm/product/categories.vue` | 分类维护 | + +路由顺序注意:`/new`、`/categories` 须写在 `/:id` 之前,避免被当成 id。 + +### 5.2 列表(对齐运输计划骨架) + +- **Header**:返回工作台 + 标题「产品管理」+ 搜索框(产品名称 / 编号 / 拼音首字母) +- **筛选**:状态(默认「上架」`statusIn: 'on'`;可选全部 / 下架)。**本期不做**列表侧分类筛选(分类仅在表单树选与分类维护页使用) +- **卡片流**:编号、名称、分类全路径(分隔符 ` / `)、型号、状态 Tag、易制毒/易制爆 Tag;点击进详情 +- **Speed Dial**:主「新增产品」→ `/m/crm/product/new`;次「产品分类」→ `/m/crm/product/categories` +- **不做**:多选、导入导出、批量上下架、列头 facet、列显隐 + +### 5.3 详情 + +- 全字段只读(含品牌、别名、图片) +- 底栏:**编辑** / **上架或下架**(单条,调现有 `update-status`) / **删除** +- 删除按钮可用性与 Web 一致:前端 `canDeleteByCreator`;后端规则不变 + +### 5.4 表单(新增 / 编辑) + +- 字段与 Web `ProductFormDialog` **全对齐**(见 D4) +- 分类:树选;可跳转分类维护页后返回 +- 图片:复用现有附件上传能力,`folder: crm/product`,最多 5 张 +- UI:使用 `mp-webview.scss` 与运输计划同类布局(页内表单 / Bottom Sheet);可对桌面表单抽 `variant="page"` 复用校验与提交逻辑,但视觉须移动端化,禁止桌面三列栅格原样塞手机 + +### 5.5 分类维护 + +- 树列表 + 新增 / 编辑 / 删除,调用现有 `product-categories` API +- 仅从产品模块进入,**不**在工作台再挂「产品分类」菜单 + +## 6. 小程序工作台 + +### 6.1 `workbench-menus.js` + +- CRM 模块:`visible: true` +- 「产品管理」:`enabled: true`,`code: 'crm-product-webview'`,`perms: 'mini:crm:product:list'` +- 其它 CRM 叶子本期保持 `enabled: false`(可不展示或灰卡) + +### 6.2 `config/api.js` · `WORKBENCH_ROUTE_MAP` + +```text +'crm-product-webview' → PAGE_PATHS.mpWebview + '?path=' + encodeURIComponent('/m/crm/product') +``` + +禁止为 CRM 再建第二个 web-view 页。 + +## 7. 菜单与权限(SQL) + +### 7.1 菜单树 + +挂在「移动端」根 `id = '1'`: + +```text +移动端 (1) +└─ CRM管理 (MINI_CRM_ROOT) 目录;perms 可空 + └─ 产品管理 (MINI_CRM_PRODUCT) perms = mini:crm:product:list +``` + +建议稳定 id(与其它 `MINI_*` 一致、幂等): + +| id | menu_name | parent_id | perms | +|----|-----------|-----------|-------| +| `MINI_CRM_ROOT` | CRM管理 | `1` | (空或目录约定) | +| `MINI_CRM_PRODUCT` | 产品管理 | `MINI_CRM_ROOT` | `mini:crm:product:list` | + +脚本路径建议:`docs/sql/migrations/2026-10-15-mini-crm-product-webview-menus.sql`(`INSERT … WHERE NOT EXISTS` 幂等)。 + +### 7.2 角色自动补绑 + +对所有在 `sys_role_menu` 中已绑定 Web 产品菜单 +`CRM00000000000000000000000000003`(`crm:product:list`)的角色,补绑: + +1. 移动端根 `1`(若尚未绑定) +2. `MINI_CRM_ROOT` +3. `MINI_CRM_PRODUCT` + +全部使用 `NOT EXISTS` 防重。超管本身 `menu-codes` 为 `all: true`,不依赖此补绑也能见入口,但仍应写入菜单定义。 + +### 7.3 双权限说明 + +| 层 | 校验 | +|----|------| +| 工作台是否显示入口 | `mini:crm:product:list` ∈ `menu-codes` | +| list/detail/add/update/delete/update-status/分类 | 现有 Web CRM 产品鉴权(与桌面同) | + +仅有移动入口、无 Web 产品权 → H5 内接口失败 / 展示「无权限」。 +仅有 Web 权、未跑补绑 SQL → 工作台看不到入口。 + +## 8. 数据流与 API + +**不新建业务 API。** 复用: + +| 能力 | 既有能力(示意) | +|------|------------------| +| 列表 | 产品 list;默认 `statusIn: 'on'`;支持 keyword 搜索 | +| 详情 | product detail | +| 增改 | product add / update(含 brands、aliases、images) | +| 删除 | product delete | +| 单条上下架 | `update-status`(单 id,非批量工具栏) | +| 分类 | product-categories tree / CRUD | +| 上传 | 现有附件上传(`crm/product`) | + +租户隔离、数据权限、默认排序与桌面同账号一致。 + +## 9. 错误处理与发版 + +| 场景 | 行为 | +|------|------| +| 无 `mini:crm:product:list` | 工作台不显示产品入口 | +| H5 业务 403/无权限 | 页内「无权限」 | +| 401 | 通知小程序回登录 / 工作台,**不**进 `/#/auth/login` | +| ticket 二次 exchange | 失败提示从工作台重进 | + +**发版** + +- H5 UI/业务:发 `web-admin` 即可(业务域名已配时) +- 工作台映射 / 菜单 code:需发带变更的 **小程序** 包 +- 菜单与角色:在目标库执行迁移 SQL + +## 10. 测试要点 + +- ticket 换票后列表数据与桌面同账号一致(同租户、默认同「上架」) +- 搜索、状态筛选、进详情、新增、编辑、单条上下架、删除(非创建人不可删) +- 分类维护增删改后,表单树选可见新节点 +- 图片上传与品牌/别名子表可保存并回显 +- 401 回小程序,不到桌面登录页 +- 无 `mini:crm:…` 的账号工作台无入口;有 Web 产品权且跑过 SQL 的角色可见 +- 导入/导出/批量上下架在移动端 **不出现** +- 桌面 `/#/crm/product` 行为不受影响 + +## 11. 实现清单(供后续 plan 拆任务) + +1. `views/m/crm/product/*` + `MpWebviewShell` + `mp-webview.scss` +2. `staticRoutes.ts` 注册 `/m/crm/product*` +3. `workbench-menus.js` 打开 CRM + 产品;`WORKBENCH_ROUTE_MAP` 指向同一壳 +4. SQL:`MINI_CRM_ROOT` + `MINI_CRM_PRODUCT` + 按 `crm:product:list` 角色补绑 +5. 回归:对照 §10;对照 `docs/web-admin-mp-webview-modules.md` 五步清单 + +## 12. 参考 + +- `docs/web-admin-mp-webview-modules.md` +- `docs/superpowers/specs/2026-09-14-mp-webview-transport-plan-design.md` +- `docs/superpowers/specs/2026-09-15-mp-webview-pl-plan-mobile-redesign-design.md` +- Web 产品页:`web-admin/src/views/crm/product/index.vue` +- Web 表单:`web-admin/src/components/business/product-form-dialog/index.vue` +- 运输计划 H5:`web-admin/src/views/m/pl/plan/*` diff --git a/docs/superpowers/specs/2026-10-15-pl-segment-export-extend-design.md b/docs/superpowers/specs/2026-10-15-pl-segment-export-extend-design.md new file mode 100644 index 000000000..874af4366 --- /dev/null +++ b/docs/superpowers/specs/2026-10-15-pl-segment-export-extend-design.md @@ -0,0 +1,126 @@ +# 运输计划相关列表导出扩展 · 段次×产品行 — 设计文档 + +> **日期**: 2026-10-15 +> **状态**: 待实现 +> **方案**: A — 与列表展平行一致(延续 `2026-10-15-plan-list-segment-export-design.md`) +> **前置**: 运输计划列表 + 入库单 + **出库单** 已落地段次导出(出库单复用 `PlanListPage`,**本扩展无需再改**) + +## 1. 目标 + +将下列界面的 Excel 导出行模型对齐各自列表(`flattenPlanArchivePairRows`): + +| 界面 | 路由/入口 | 当前导出 | 目标 | +|------|-----------|----------|------| +| 危化品证上传 | `plan-cert` | `planApi.export`(后端已段次展开;前端缺「段次」列) | 注入 `stopSegment` | +| 运输归档 | `plan-archive` | `exportFormat=archive` 配对宽表 | **改为段次×产品多行**(方案 A) | +| 合同完善 | `plan-contract` | `exportContractGaps` 一计划一行 | **改为段次×产品多行** + 本段缺口语义 | +| 出库单 | `outbound` → `PlanListPage` | 已共用列表导出 | **已完成,本扩展不改** | + +## 2. 已确认决策 + +| # | 项 | 决策 | +|---|-----|------| +| E1 | 行结构 | 与基线设计 D1/D3/D4/D5 相同:先装货产品行,再各送货段;「段次」;侧栏按行、不拼接 | +| E2 | 归档列形态 | **方案 A**:去掉装/送同排配对宽列;本段 `计划量`/`实际量`;单价/金额只填本行所属侧 | +| E3 | 归档 ZIP | `archive_zip` 内 Excel **与** `archive` xlsx **同一行模型**(仅附件打包方式不变) | +| E4 | 合同完善 | 导出对齐列表展平;每行带段次与产品;缺口类型按**本行段**(装货↔供方、送货↔需方) | +| E5 | 证件上传 | 仍走列表导出 API;前端 `planCertExportColumns` 固定注入 `stopSegment` | +| E6 | 出库单 | 不改代码;验收确认即可 | + +**修正基线 D6**:原「归档导出不改」作废,由本扩展 E2/E3 替代。 + +## 3. 非目标 + +- 不改各页列表 UI / 合并单元格 +- 不改归档业务规则、价格权限(无价格权限用户仍隐藏单价/金额列) +- 不改合同完善的缺口判定业务逻辑(只改导出行展开与列) +- 不新增独立导出 HTTP 路径(可复用/改造现有 endpoint) + +## 4. 分页面设计 + +### 4.1 危化品证上传(最小改动) + +- **后端**:已用 `_build_plan_list_export_rows`,无需改行模型。 +- **前端** `plan-cert/index.vue`:`planCertExportColumns` 在 `planNo` 后插入 `stopSegment`(与运输计划列表相同写法)。 +- 文件名保持 `计划证件.xlsx`。 + +### 4.2 运输归档(方案 A) + +**行模型**:复用与列表相同的段次×产品槽位迭代(可直接调用 `_iter_segment_product_slots` / 与 `_build_plan_list_export_rows` 同序的辅助函数)。 + +**列(替换现有 `PLAN_ARCHIVE_EXPORT_COLUMNS` 宽表)** 建议: + +| field | 表头 | 规则 | +|-------|------|------| +| `rowNo` | 序号 | 可选保留 | +| `planNo` | 计划编号 | 计划级,每行重复 | +| `stopSegment` | 段次 | `装货` / `送货 #N` | +| `contractNo` | 合同编号 | **本行段**合同 | +| 计划日期 / 归档状态 / 跟进状态 / 单据类型 | … | 计划级 | +| `loadCustomer` / `loadAddress` / `loadTime` | 装货侧 | **仅装货行** | +| `deliveryCustomer` / `deliveryAddress` / `deliveryTime` | 送货侧 | **仅送货行** | +| 产品名称 / 品牌 / 别名 / 型号 / 包装 / 单位 | … | 本行段产品 | +| `planQty` / `actualQty` | 计划量 / 实际量 | 本段;实际量语义同列表(装货 inbound / 送货 outbound) | +| `unitPrice` / `amount` | 单价 / 金额 | **仅本侧**归档价额;对侧行不填另一侧价 | +| 车牌 / 运费类字段 / ERP / 备注 | … | 计划级(运费仍整单重复,与列表习惯一致) | + +**删除**:`loadPlanQty`/`deliveryPlanQty` 及成对的 `loadActualQty`/`deliveryActualQty`/`loadInboundQty`/…/`deliveryAmount` 等同排宽列;`deliveryStopKind` 由统一 `stopSegment` 替代。 + +**实现落点**: + +- 改造 `build_plan_archive_export_rows`(或新建 `build_plan_archive_segment_export_rows` 并切换调用)走段次槽位,**不再** `_append_paired_product_rows` 默认路径。 +- 单价/金额:复用归档已有 `_get_stop_archive_unit_price` / `_get_stop_archive_amount`(按 kind)。 +- 单测:重写/新增 `test_pl_plan_archive_export.py` 中配对宽表断言 → 段次多行断言;保留价格权限列过滤行为。 + +### 4.3 合同完善 + +**现状**:`POST /contract-gaps/export` 对 gap 列表 **一计划一行**(供方/需方/缺口类型摘要),与列表 `displayRows`(段×产品)不一致。 + +**目标行模型**: + +1. 仍用现有筛选得到「有缺口的计划」集合(`list_plan_contract_gaps` 的计划 id 集或等价查询)。 +2. 对这些计划加载 stops,按 `_iter_segment_product_slots` 展开行。 +3. 列建议: + +| field | 表头 | 规则 | +|-------|------|------| +| `planNo` / `planDate` / `planType` / `followStatus` | … | 计划级 | +| `stopSegment` | 段次 | | +| `loadCustomer` / `deliveryCustomer` | 装/送客户 | 按行侧填写 | +| `deliveryTimes` | 送货时间 | 仅送货行本段日期(或与列表一致) | +| `productName` 等 | 产品 | 本行段产品(可与列表可见列对齐,最小集:产品名称) | +| `gapType` | 缺口类型 | **本行段**:装货行若缺供方合同 →「缺供方合同」;送货行若缺需方 →「缺需方合同」;本段无缺口可空或「—」(导出是否过滤无缺口段:默认**仍导出该计划全部段×产品行**,与列表展示一致;若某计划仅因一侧缺口入选,另一侧行 `gapType` 可空) | +| `supplierName` / `customerName` | 供方/需方 | 计划级保留(可选) | + +**实现落点**:`export_contract_gaps` 改为:查 gap 计划 → `load_plan_stops_grouped` → 段次展开 → 填缺口标签;更新 `CONTRACT_GAP_EXPORT_COLUMNS`;前端 `contractGapExportColumns` 增加 `stopSegment` 等与新列对齐。 + +### 4.4 出库单 + +已由基线实现覆盖。本扩展只要求手工验收:出库单导出含「段次」且一装多送多行。 + +## 5. 架构关系 + +```text +基线(已完成) + _build_plan_list_export_rows ← 运输计划 / 入库 / 出库 /(证件仅缺前端列) + +本扩展 + plan-cert 前端注入 stopSegment + build_plan_archive_export_rows → 段次×产品(方案 A 列) + export_contract_gaps → 段次×产品 + 本段 gapType +``` + +共享:`_iter_segment_product_slots`、`_format_stop_segment_label`、段侧字段填写、CRM 别名/品牌 lookup、实际量 inbound/outbound 语义。 + +## 6. 测试与验收 + +1. **证件**:导出含「段次」;行数与证件列表展平一致(同筛选)。 +2. **归档**:一装多送 ≥3 行;无装/送同排配对量列;本行有计划量/实际量;有价格权限时单价/金额仅本侧有值;`archive` 与 zip 内表结构一致;旧配对列测试更新后全绿。 +3. **合同完善**:一装多送多行;段次正确;缺口列按段;文件名仍为「计划合同完善_*」。 +4. **出库单**:抽测一装多送(回归)。 + +## 7. 验收标准 + +- 上述四页(含出库抽测)Excel 均可按段次对照列表阅读一装多送。 +- 归档不再出现「一行同时装货量+多送货量拼接」的旧宽表形态。 +- 无价格权限用户归档导出仍不含单价/金额列。 diff --git a/docs/superpowers/specs/2026-10-15-plan-list-segment-export-design.md b/docs/superpowers/specs/2026-10-15-plan-list-segment-export-design.md new file mode 100644 index 000000000..1d2849e23 --- /dev/null +++ b/docs/superpowers/specs/2026-10-15-plan-list-segment-export-design.md @@ -0,0 +1,144 @@ +# 运输计划 / 库存列表导出 · 段次×产品行 — 设计文档 + +> **日期**: 2026-10-15 +> **状态**: 待实现 +> **方案**: A — 完全对齐列表展平行(`flattenPlanArchivePairRows`) +> **范围**: 运输计划列表 + 库存管理入库单/出库单(共用同一套导出逻辑) + +## 1. 目标 + +列表导出 Excel 的行模型与列表 UI 一致: + +- 一装多送时,能按段次拆成多行(先装货产品行,再各送货段产品行) +- 每行的「计划量 / 实际量」为本行所属段上的数量,不再把多段产品/客户压成一行 +- 库存管理(`stockRole=inbound|outbound`)与运输计划列表走**同一**后端导出构建函数 + +## 2. 已确认决策 + +| # | 项 | 决策 | +|---|-----|------| +| D1 | 行结构 | **方案 A**:段次×产品多行,对齐 `flattenPlanArchivePairRows` | +| D2 | 作用面 | 运输计划列表 + 入库单 + 出库单,共用逻辑 | +| D3 | 段次列 | 新增「段次」列:`装货` / `送货 #1` / `送货 #2`… | +| D4 | 客户/地址列 | 装货行只填装货侧;送货行只填对应送货段;**不再**用 ` / ` 拼接多送客户 | +| D5 | 计划级字段 | 计划编号等每行重复(Excel 不做合并单元格) | +| D6 | 归档导出 | **不改**归档配对宽表(`build_plan_archive_export_rows`) | +| D7 | 文件名 / Sheet | 保持现有:`入库单` / `出库单` / `计划列表` | + +## 3. 非目标 + +- 不改列表 UI、合并单元格、斑马纹等展示逻辑 +- 不改计划归档导出的配对宽表与「装货量+送货量同列」结构 +- 不新增独立导出 API;仍走现有 `plan` 列表导出入口 +- 不做前端本地拼 Excel;行展开在后端完成 + +## 4. 现状问题 + +| 层 | 现状 | 问题 | +|----|------|------| +| 列表 | `flattenPlanArchivePairRows`:装货产品行 → 各送货段产品行;`planQty`/`actualQty` 取本段产品 | 正确 | +| 列表导出 | `_build_plan_list_export_rows`:按**计划级** `PlPlanProduct` 展开;装/送客户、地址用 ` / ` 汇总整单 | 一装多送时一行;数量无法按段对照列表 | + +## 5. 行模型 + +对每个计划,按 `stops_by_plan`(`load_plan_stops_grouped`)展开: + +```text +装货段.products[] → 行:段次=装货,产品/量=装货段产品 +送货段1.products[] → 行:段次=送货 #1,产品/量=该送货段产品 +送货段2.products[] → 行:段次=送货 #2,… +``` + +### 5.1 顺序与占位 + +1. **先**全部装货段产品行,**再**按送货 `seq` 依次展开各送货段产品行(与列表一致)。 +2. 某侧无产品:仍输出该侧**占位行**(产品列、计划量、实际量为空),与列表「空产品仍占一行」行为一致。 +3. **无段结构(legacy)**:无 load/delivery 段时,回退为计划级 `PlPlanProduct` 一行(段次为空),兼容旧数据。 +4. 筛选条件(含 `stockRole`、列头筛选等)仍由现有列表查询决定「导出哪些计划」;本设计只改**单计划内行展开**。 + +### 5.2 示例 + +计划 `PO20261009016`:装货 1 个产品、送货 2 段各 1 个产品 → 导出 **3 行**: + +| 段次 | 装货客户 | 送货客户 | 产品 | 计划量 | +|------|----------|----------|------|--------| +| 装货 | A | (空) | 尿素 | 30 | +| 送货 #1 | (空) | B1 | 尿素 | 20 | +| 送货 #2 | (空) | B2 | 尿素 | 10 | + +## 6. 列语义 + +### 6.1 新增列 + +| field | 表头 | 取值 | +|-------|------|------| +| `stopSegment` | 段次 | `装货`;`送货 #{seq}`(seq 缺省时用展开序号) | + +默认导出列顺序:建议紧挨「计划编号」之后。前端可见列导出映射:若列表无独立段次 prop,仍由后端默认列包含 `stopSegment`;前端 `planExportColumns` 增加 `{ prop: 'stopSegment', label: '段次' }`(或等价别名),以便「按可见列导出」时可选。 + +### 6.2 按行填写规则 + +| 列 | 装货行 | 送货行 | +|----|--------|--------| +| 计划级(编号、归属公司、跟进状态、计划日期、单据类型、车牌、人员、跟进人、供方、需方、司机、运输/归档状态、ERP、备注等) | 重复填计划值 | 同左 | +| 送货时间(`deliveryTimes`) | 空 | 本送货段日期(单值,不再整单 ` / ` 拼接) | +| 装货客户 / 装货地址时间 / 装货地磅 | 本装货段 | 空 | +| 送货客户 / 送货地址时间 / 送货地磅 | 空 | 本送货段 | +| 合同(`productContract`) | 本装货段合同号 | 本送货段合同号 | +| 产品名称 / 品牌 / 别名 / 型号规格 / 包装规格 / 单位 | 本行段产品(CRM 标准名/别名解析保持现有) | 同左 | +| 计划量 / 实际量 | 本行段产品 `planQty`;实际量语义对齐列表 `getRowActualQty`(装货读 inbound 侧实际量,送货读 outbound 侧实际量) | 同左 | + +枚举中文标签(跟进状态、单据类型、运输/归档状态、归属公司等)与文件名/Sheet 标题逻辑**保持**现有实现。 + +### 6.3 字典与别名 + +- 单位等 `dict_type` 列仍走现有 `export_rows_to_xlsx_response` 字典翻译。 +- `_PLAN_EXPORT_COLUMN_ALIASES`:如前端 prop 与 field 不一致则补映射;`stopSegment` 本身可直接作为 prop。 + +## 7. 架构与落点 + +```text +ListExportDropdown(运输计划 / 入库 / 出库) + → POST 现有 plan 导出 API(带 filters + stockRole + columns) + → 查询 plans(不变) + → load_plan_stops_grouped + → _build_plan_list_export_rows 【改为段次×产品展开】 + → PLAN_EXPORT_COLUMNS(+ stopSegment) + → xlsx(filename/sheet 按 stockRole) +``` + +| 单元 | 职责 | 依赖 | +|------|------|------| +| `_build_plan_list_export_rows` | 单计划 → 多行 dict;段次与侧栏字段按行写入 | `stops_by_plan`、CRM 别名 map、段产品 | +| `PLAN_EXPORT_COLUMNS` | 列定义含 `stopSegment` | — | +| `_apply_plan_list_export_stop_fields` | 改为**按单侧 stop**填写,或拆成 load/delivery 专用 helper,避免整单拼接 | 单条 load 或单条 delivery | +| `web-admin` `plan/index.vue`(及库存页复用) | 导出列清单增加段次;文件名已按 stockRole | 共用 `PlanListPage` | +| `tests/test_pl_plan_list_export.py` | 一装多送行数、段次文案、侧栏字段空/非空、qty | — | + +**建议**:段次展开逻辑可抽到 `backend/app/services/pl/` 下小函数(如 `iter_plan_list_export_segments`),便于单测且与 `plan.py` 路由层解耦;若改动面小,也可先内联在 `_build_plan_list_export_rows`,以最小必要为准。 + +## 8. 实际量语义(与列表对齐) + +列表: + +- `getRowPlanQty` ← 本行 `PlanStopProduct.planQty` +- `getRowActualQty` ← `getStopArchiveActualQty`:装货用 `inboundQty`,送货用 `outboundQty` + +导出 MUST 使用同一语义读取段产品字段(后端 stop product 模型上的对应属性),不得再写计划级 `PlPlanProduct.actual_qty` 作为有段计划的实际量来源。 + +## 9. 测试要求 + +至少覆盖: + +1. **一装多送**:1 装货产品 + 2 送货段各 1 产品 → 3 行;段次为 `装货`/`送货 #1`/`送货 #2`;各行 `planQty` 为段量;装货行 `deliveryCustomer` 为空、送货行 `loadCustomer` 为空。 +2. **单装单送**:行为与列值正确;中文标签回归(跟进状态、单据类型等)。 +3. **空产品占位**:送货段无产品仍有一行,产品/量为空。 +4. **legacy**:无 stops 时仍按计划级产品展开,段次为空。 +5. **文件名**:`stockRole` → `入库单_` / `出库单_` / `计划列表_`(现有用例保留)。 +6. **列过滤**:请求 `stopSegment` 时出现在导出列;别名 normalize 不破坏既有 prop。 + +## 10. 验收标准 + +- 对 `PO20261009016` 类一装多送计划:导出 Excel 行数与列表展平行数一致(同筛选、同计划集合前提下)。 +- 打开「入库单.xlsx / 出库单.xlsx / 计划列表.xlsx」均可看到「段次」及按段拆分的计划量/实际量。 +- 计划归档导出行为不变(回归抽测或现有 `test_pl_plan_archive_export` 全绿)。 diff --git a/docs/superpowers/specs/2026-10-17-mp-crm-customer-delivery.md b/docs/superpowers/specs/2026-10-17-mp-crm-customer-delivery.md new file mode 100644 index 000000000..fe57ec256 --- /dev/null +++ b/docs/superpowers/specs/2026-10-17-mp-crm-customer-delivery.md @@ -0,0 +1,43 @@ +# 小程序 H5 客户管理交付说明 + +## 交付范围 + +入口:小程序工作台 → CRM管理 → 客户管理;H5 路径 `/#/m/crm/customer`。 + +- 四类客户视图、搜索、字段筛选、排序、分页、卡片字段显隐。 +- 新增、编辑、详情、单条/批量删除、放入公海;名称查重与负责人默认值。 +- 营业执照/经营许可证/其他证件、跟进附件沿用现有卡片式即时上传和预览/下载/删除能力。 +- 跟进、联系人、开票资料(默认项、快速识别)、日志详情。 +- 关联合同打开现有移动合同详情;关联商机含详情、修改、阶段推进、跟进维护、删除,保留原状态和创建人限制。 +- 不提供导出。不修改 Web 客户/商机页面、共享 API 和后端;工作区原有其他改动保留。 + +实现位置:`web-admin/src/views/m/crm/customer/`。界面沿用现有 H5 样式,页面参照 P08/P12/P25 与移动产品、合同页面;评审补齐了商机专用跟进字典、类型兜底选项、跟进时间字段及筛选上下文。 + +## 验证 + +- `pnpm exec tsx --test src/views/m/crm/customer/model.test.ts`:5 项通过,覆盖精确 ID、附件清空/兼容、响应解包、本地时间、创建后开票重试、商机阶段建议。 +- `node scripts/test-mp-crm-customer.mjs`:隔离模拟 API 的手机浏览器回归;四视图、筛选、客户跟进、联系人、开票默认、日志转义、商机修改/阶段/跟进增改删、附件上传、客户新增与编辑、开票失败重试、批量公海与删除、列表重试;375/414px 无横向溢出。不会写入真实业务库。 +- 客户模块 ESLint、Prettier、小程序两份入口配置的语法检查通过。 +- 生产构建通过;全量 TypeScript 错误与开发前基线一致(675 条原有错误),新增客户模块无新增错误,不能视为全项目类型检查通过。 +- 已执行前端、小程序与根目录的 AST 图谱更新。图谱超过 HTML 可视化节点上限,因此更新 JSON 和报告,工具跳过 HTML 重建。 +- 字段一致性脚本缺失,已记录;未涉及后端业务 schema/CRUD 改动,已核对移动字段与原接口。 + +## 首次发布顺序与待验收项 + +1. 在目标数据库备份和确认后执行 `docs/sql/migrations/2026-10-17-mini-crm-customer-webview-menus.sql`。此脚本仅补充移动菜单及拥有 Web 客户权限角色的移动菜单祖先绑定;本次没有执行数据库迁移。 +2. 构建并发布 H5 工程。业务域名、HTTPS、既有 WebView ticket 交换与附件白名单配置沿用已有模块。 +3. 发布包含工作台客户入口的小程序包。第一次增加入口需要更新小程序包;后续页面变更可仅发布 H5。 +4. 真机验收:不同角色/租户的可见性与数据范围;登录票据过期与重新进入;图片/PDF选择、上传、预览/下载;软键盘与底部保存栏;合同详情返回导航。 + +本次完成仓库内开发和本地模拟验证,未发布生产、未运行微信真机验收。 + +### 测试库执行记录(2026-10-17,用户后续授权) + +- 已在 `backend/.env` 对应测试库 `47.99.164.66:3306 / shanxia2.0` 执行上述菜单 SQL,事务提交成功;未连接生产库执行写入。 +- 新增 `MINI_CRM_CUSTOMER` 菜单,绑定管理员、销售主管、销售计划员、销售实录员、销售办证员 5 个已有 Web 客户权限角色。 +- 提交后通过新连接复核:菜单可见/启用、5 个角色授权有效、移动端与 CRM 父菜单权限无缺失;未修改业务表结构,其他菜单数据保持不变。 +- 执行前相关菜单及角色菜单快照:`/tmp/shanxia-customer-menu-backup.jBxXRg/before.json`(本机临时文件)。H5/小程序发布和真机验收仍未执行。 + +## 原有问题 + +见 `2026-10-17-mp-crm-customer-existing-issues.md`:Web 客户跟进联系人解包错误、操作日志 HTML 注入风险、Web 商机跟进默认时间 UTC 偏移。均只记录,未修改。 diff --git a/docs/superpowers/specs/2026-10-17-mp-crm-customer-existing-issues.md b/docs/superpowers/specs/2026-10-17-mp-crm-customer-existing-issues.md new file mode 100644 index 000000000..dcc3ac28f --- /dev/null +++ b/docs/superpowers/specs/2026-10-17-mp-crm-customer-existing-issues.md @@ -0,0 +1,38 @@ +# 客户管理移动迁移:原有问题记录 + +记录日期:2026-10-17。迁移阶段仅记录以下原有问题。后续用户明确授权修复 1、2、3,现已完成 Web 前端修复;未修改后端业务。 + +## 1. Web 客户跟进弹窗的联系人选项为空(已修复) + +- 位置:`web-admin/src/views/crm/customer/FollowFormDialog.vue`,`loadContactList`。 +- 证据:调用 `fetchContactByCustomerId` 后读取 `res.data || []`;该 API 直接使用统一 `request.post`,HTTP 包装层已经返回 `res.data.data`;后端 byCustomer 返回数组。因此正常数组响应会被错误替换为空数组。 +- 复现:客户有联系人时,在 Web 客户详情点击添加跟进,展开关联联系人下拉。 +- 影响:不能选择已存在的关联联系人。 +- 修复:读取已解包数组,同时兼容旧 `{ data: [...] }` 响应;空响应或请求失败时清空列表。`customer/components/ContactList.vue` 使用的 API 同样返回已解包数组,已修复同类解析问题。 + +## 2. Web 客户操作日志详情直接插入 HTML(已修复) + +- 位置:`web-admin/src/views/crm/customer/CustomerDetailDialog.vue`,`handleViewLogDetail`。 +- 证据:模板字符串直接插入 `row.operParam` 等值,并启用 `dangerouslyUseHTMLString: true`,未见相应 HTML 转义。 +- 风险:含 HTML 的业务参数可能被作为标签解释,存在注入风险。此结论来自代码检查,未向真实业务库写入攻击样本。 +- 修复:弹窗改用 Vue VNode 与文本子节点,移除 `dangerouslyUseHTMLString`。模块、人员、时间、URL 和请求参数均不再按 HTML 解释;保留分段、参数换行和滚动展示。 + +## 3. Web 新增商机跟进的自动默认时间使用 UTC(已修复) + +- 位置:`web-admin/src/views/crm/opportunity/components/FollowDialog.vue`,打开新增弹窗时的 `new Date().toISOString().slice(0, 19).replace('T', ' ')`。 +- 证据:`toISOString()` 输出 UTC,截去时区标记后又作为本地日期显示/提交。在 Asia/Shanghai 中比本地时间早 8 小时。 +- 复现:北京时间 10:00 打开新增商机跟进,检查默认跟进时间(该表达式得到 02:00)。 +- 范围澄清:只针对“商机 → 添加跟进”的 `followTime` 自动默认值,不是客户跟进卡片顶部的 `createTime`,也不影响手动选择的“下次联系时间” `nextTime`。 +- 修复:复用现有 `parseTime(new Date())` 生成本地时间。编辑已有记录的跟进时间与下次联系时间不变。 + +## 修复回归 + +- `pnpm exec tsx --test scripts/crm-existing-issues.test.ts`:6 项通过。修复前 4 项失败,覆盖两个联系人入口、失败清空、全部日志字段的 HTML 转义、本地时间跨日、编辑时间不覆盖。 +- 测试直接执行组件中的真实处理函数;网络/弹窗仅在边界替换,不写入真实业务库。日志使用真实 Vue SSR 渲染验证,不执行恶意标签。 +- 连同移动客户模块测试共 11 项通过,`pnpm build` 通过;全量 `vue-tsc` 与修复前 675 条错误基线对比无新增。已同步代码图谱,尚未发布生产。 + +## 验证环境的原有限制 + +- 全量 `vue-tsc --noEmit` 基线已有 675 条错误(输出 1514 行);本次新增客户模块的最终检查必须与基线比较,不能将全项目类型检查描述为通过。 +- AGENTS 要求的 `scripts/check_field_consistency.py` 在仓库中不存在;使用可用 Python 执行得到文件不存在错误。此次未新增/修改后端 CRUD、Pydantic 或业务表字段,因此通过逐项核对既有 schema 与新移动 payload 补充检查,但不宣称该脚本通过。 +- 本次浏览器回归使用隔离模拟 API,不写真实业务库。微信真机的 WebView 文件选择、预览/下载、业务域名、登录票据与真实角色权限仍需在发布环境验收。 diff --git a/docs/superpowers/specs/2026-10-17-mp-crm-style-align-delivery.md b/docs/superpowers/specs/2026-10-17-mp-crm-style-align-delivery.md new file mode 100644 index 000000000..b0ae309ff --- /dev/null +++ b/docs/superpowers/specs/2026-10-17-mp-crm-style-align-delivery.md @@ -0,0 +1,53 @@ +# 小程序 CRM 六界面标准化交付核验 + +状态:六个工作台 CRM WebView 入口已按 `docs/miniprogram-ui-spec-sanqiang.md` §12、OpenSpec UI Conventions 和 `bak/mobile-ui/shanxia-mp-crm-pl-cert-style-align-demo.html` 完成标准化;危化品证上传同步完成同一轮校准。未部署、未写真实业务数据,微信真机验收仍需在测试环境执行。 + +## 交付入口 + +| 工作台入口 | H5 路径 | 交付结果 | +| --- | --- | --- | +| 客户管理 | `/m/crm/customer` | 四视图、搜索、状态 Tab、三栏筛选、More、expense-card、新增/批量 Speed Dial、七 Tab 详情、72×72 证件附件与完整客户业务功能 | +| 产品管理 | `/m/crm/product` | 全部/上架/下架、分类/型号/More、产品卡、新增/分类双 Speed Dial、独立详情和移动表单;分类全路径、上下架及创建者删除限制保留 | +| 报价单管理 | `/m/crm/quote` | 管理列表、金额卡、筛选、卡片动作、独立详情、版本/提交/作废等既有功能 | +| 报价单审批 | `/m/crm/quote/approval` | 当前用户待审/已审、最早步骤与前置驳回门禁、通过/驳回、时间轴与附件 | +| 合同管理 | `/m/crm/contract` | 管理列表、金额卡、单选/批量、提交审批、独立详情、移动附件宫格 | +| 合同审批 | `/m/crm/contract/approval` | 当前用户待审/已审、单条/批量审批及部分成功、审批人限制、时间轴与附件 | + +小程序入口 code、H5 路由和六组权限映射已逐项核对;详情直达和刷新、列表返回、403 门禁与管理/审批入口差异均纳入浏览器回归。 + +## 视觉与交互核验 + +- 列表统一为“搜索 → 状态 Tab → 三栏筛选 → 卡片”,更多筛选按字段类型提供 Chip、模糊检索、日期和区间控件。 +- 列表卡片使用备用金式六层 `expense-card`,无可用动作时不渲染空 footer;状态为浅底语义标签。 +- 详情使用固定普通标题,不使用票根、Hero 或动态摘要;业务内容通过文字 Tab 展示。 +- 附件使用发票夹式 72×72 宫格;预览、添加和删除触控区域至少 44×44,删除角标与预览区域不重叠。 +- 375px 与 414px 视口均有横向溢出断言和截图;小程序品牌色使用 `#0a9f6d`,目标范围未混入 Web Fresh Mint 主色 `#10b981`。 + +共享实现位于 `web-admin/src/components/mp/` 与 `web-admin/src/styles/mp-crm-primitives.scss`;页面实现位于 `web-admin/src/views/m/crm/{customer,product,quote,contract}/`。产品列表只读补充了后端 `createBy` 返回字段,用于保持 Web 端既有创建者删除限制,未新增 CRM 写接口或改变租户/数据权限规则。 + +## 已执行验证 + +- CRM 纯逻辑与既有问题守卫:42/42 通过;共享移动原语契约:4/4 通过。 +- DOM 契约:客户、产品、报价、合同与危化品证入口全部通过。 +- 浏览器回归:客户 113 次 fixture API 调用通过;报价 85 次通过;合同 40 次通过;产品通过;危化品证 152 次通过。网络只在浏览器边界替换,不写真实业务库。 +- 客户 403 场景额外断言状态 Tab、筛选、计数、Speed Dial、批量栏和弹层均不暴露;详情 403 隐藏正文动作。 +- 产品后端字段/facet 测试:8 项通过。 +- 目标 ESLint、Stylelint、Prettier 和 `git diff --check` 通过;生产构建通过。 +- 全量 `vue-tsc --noEmit` 仍被仓库既有 673 条诊断阻断;过滤结果未发现本轮 CRM、危化品证、共享移动原语或产品 API/表单目标路径诊断,不能表述为全项目类型检查通过。 +- frontend、miniprogram 与根目录知识图谱均已增量更新;节点数量超过 HTML 可视化上限,工具按设计更新 JSON/报告并跳过 HTML 重建。 + +浏览器截图: + +- 客户:`/tmp/shanxia-customer-e2e/` +- 产品:`/tmp/shanxia-product-e2e/` +- 报价:`/tmp/shanxia-quote-e2e/` +- 合同:`/tmp/shanxia-contract-e2e/` +- 危化品证:`/tmp/shanxia-plan-cert-e2e/` + +## 范围边界与后续验收 + +- 实施中发现的其他界面/基线问题只记录在 `2026-10-17-mp-crm-style-align-existing-issues.md`,未借机修改全量 SQL、旧迁移或旧人工回归文档。 +- 本轮没有执行生产发布或真实数据库写入;菜单 SQL 与已有授权状态不在本次代码改造中重复操作。 +- 发布前仍需微信真机核验:角色/租户数据范围、ticket 过期、返回栈、软键盘、弱网、文件选择及图片/PDF 预览。 +- 浏览器脚本已完成全部业务断言;本机 Chrome 在个别长脚本关闭阶段偶发残留进程,拿到 PASS 输出后人工终止,不影响页面断言结果,但可作为后续测试基础设施清理项。 + diff --git a/docs/superpowers/specs/2026-10-17-mp-crm-style-align-design.md b/docs/superpowers/specs/2026-10-17-mp-crm-style-align-design.md new file mode 100644 index 000000000..62877ff92 --- /dev/null +++ b/docs/superpowers/specs/2026-10-17-mp-crm-style-align-design.md @@ -0,0 +1,52 @@ +# 小程序 CRM 六界面统一样式设计 + +日期:2026-10-17 + +## 1. 范围 + +改造工作台「CRM 管理」六个入口及其直接详情页,不改变业务 API、权限、审批状态机或数据字段: + +1. 客户管理 `/m/crm/customer` +2. 产品管理 `/m/crm/product` +3. 报价单管理 `/m/crm/quote` +4. 报价单审批 `/m/crm/quote/approval` +5. 合同管理 `/m/crm/contract` +6. 合同审批 `/m/crm/contract/approval` + +新增/编辑表单与深层业务 Sheet 只处理由共用组件引起的必要适配,不做全面重设计。发现其他界面问题记录到问题文档,不顺手修改。 + +## 2. 视觉权威 + +以 OpenSpec「工作台 WebView 业务页」、`docs/miniprogram-ui-spec-sanqiang.md` §12 和 style-align Demo 为准,并应用用户最新覆盖要求:详情必须是独立路由页面;顶部只保留普通绿顶栏,不使用票根、Hero、动态记录标题、副标题或顶栏状态标签。编号、状态、金额等记录信息下沉到正文。 + +色板只使用三墙绿 `#0a9f6d` / `#087f57` / `#e9f9f2`,禁止把 Fresh Mint `#10b981` 用作移动主色。状态标签采用浅底语义色。正文14px,页面标题17px,辅助文字11–12px;可见按钮按标准尺寸展示,同时命中区域不少于44×44px。 + +## 3. 共用结构 + +### 3.1 列表 + +六页固定顺序为:标准绿顶栏与胶囊搜索 → 横滑状态 Tab → 固定三栏筛选(两个快捷下拉 + 更多)→ `expense-card` 列表 → Speed Dial 或选择后批量底栏。 + +`expense-card` 采用标题/浅底状态、可选金额区、副信息、灰底 KV、时间 meta、虚线操作栏;每卡至多一个实心主色按钮。客户、产品等无金额业务跳过金额区,但其他层级不省略。管理页新增使用 Speed Dial;审批页不显示新增。 + +「更多」Sheet 收纳全部筛选,至少支持 Chip、模糊检索、日期/日期区间、日期时间和数值区间;底栏重置/确定居中适宽,不粘连、不伸满。 + +### 3.2 详情 + +现有独立详情路由继续保留。页面只显示普通固定标题绿顶栏,后接业务 Tab、信息卡和底部操作栏。客户沿用业务 Tab;产品、报价、合同补齐与字段分组对应的 Tab。报价/合同审批流程使用时间轴;附件使用约72×72宫格。详情底栏实际触达不少于44px,主操作至多一个实心按钮。 + +### 3.3 共用组件边界 + +新增小而专一的展示组件:状态 Tab、三栏筛选、备用金式卡片、附件宫格、审批时间轴和普通详情头。Quote/Contract 继续复用各自现有共享列表组件;API、权限判断、审批提交、批量部分成功统计留在业务模块,避免形成巨型共用 composable。不得直接全局改旧 `.mp-wv-filter-bar` 的列数,以免影响非 CRM 页面。 + +## 4. 页面映射 + +- 报价管理/审批:同一 `MpQuoteList` 根据 mode 提供不同 Tab/快捷筛选和动作;金额使用独立大金额区。 +- 合同管理/审批:同一 `MpContractList`,保留多选、批量通过/驳回和部分成功反馈;合同附件改为宫格。 +- 产品管理:保留新增/分类双项 Speed Dial;状态 Tab 为全部/上架/下架,卡片无金额区。 +- 客户管理:保留四种业务视图和现有完整筛选能力;移除两行工具条,将新增迁入 Speed Dial,将筛选接入三栏/更多;附件改为宫格。 + +## 5. 验证 + +先建立共用 DOM 契约和每组页面失败测试,再分组迁移。每组验证查询参数、权限/审批动作、分页、失败重试、独立详情直达/返回、375px/414px 无横向溢出、按钮命中和视觉截图。现有四组纯逻辑测试必须继续通过;客户 Playwright 测试同步新骨架。菜单 SQL 基线缺失和旧迁移幂等问题记录到问题文档,未经授权不写数据库。 + diff --git a/docs/superpowers/specs/2026-10-17-mp-crm-style-align-existing-issues.md b/docs/superpowers/specs/2026-10-17-mp-crm-style-align-existing-issues.md new file mode 100644 index 000000000..18350335e --- /dev/null +++ b/docs/superpowers/specs/2026-10-17-mp-crm-style-align-existing-issues.md @@ -0,0 +1,32 @@ +# 小程序 CRM 六界面标准化:范围外问题记录 + +记录日期:2026-10-17。 + +本文件只记录实施过程中发现的既有问题。当前授权是改造工作台 CRM 六个 WebView 界面,不据此修改全量 SQL、旧迁移或其他界面功能。 + +## 1. 全量 SQL 基线缺少六个 CRM 工作台菜单 + +- 位置:`docs/sql/shanxia2.0.sql`。 +- 依据:客户、产品、报价管理、报价审批、合同管理、合同审批菜单只存在于 `docs/sql/migrations/2026-10-15-mini-crm-*-webview-menus.sql` 与 `2026-10-17-mini-crm-customer-webview-menus.sql`,全量基线没有 `MINI_CRM_*` 记录。 +- 影响:只导入全量 SQL 的新环境不会出现这六个工作台入口,还需额外执行增量脚本。 +- 状态:仅记录;本轮不修改数据库基线或真实数据库。 + +## 2. 2026-10-15 CRM 菜单迁移对软删除记录不完全幂等 + +- 位置:产品、报价、合同三个 `2026-10-15-mini-crm-*-webview-menus.sql`。 +- 依据:菜单插入使用固定主键,而 `NOT EXISTS` 只查询 `del_flag = 0`;若同主键菜单已经软删除,重跑脚本可能发生主键冲突。2026-10-17 的客户脚本已使用 `ON DUPLICATE KEY UPDATE del_flag = 0`,两批脚本行为不一致。 +- 影响:曾软删除相关菜单的环境可能无法直接重跑旧迁移,祖先授权也可能无法恢复。 +- 状态:仅记录;本轮不修改历史迁移。 + +## 3. 旧小程序 CRM 人工回归说明与当前入口状态不一致 + +- 位置:`bak/miniprogram-e2e/cases/01-crm.md`。 +- 依据:文档仍把部分 CRM 菜单描述为灰卡或未开放,但当前 `miniprogram/config/workbench-menus.js` 已启用六个 WebView 入口并按权限过滤。 +- 影响:人工验收可能误跳过已启用页面,或把正常入口误报为异常。 +- 状态:仅记录;本轮不修改旧备份说明。 + +## 4. 微信真机行为尚未在本地浏览器回归中覆盖 + +- 范围:微信 WebView 返回行为、软键盘顶起、文件选择/预览、弱网、登录票据过期与真实角色数据范围。 +- 依据:本轮自动化使用真实前端页面与本地 API 边界替身,不写真实业务库;Chromium 无法等价替代微信内核和原生桥。 +- 状态:发布前验证项,不属于代码缺陷;需在测试环境由对应角色做真机验收。 diff --git a/docs/superpowers/specs/2026-10-17-mp-pl-plan-cert-delivery.md b/docs/superpowers/specs/2026-10-17-mp-pl-plan-cert-delivery.md new file mode 100644 index 000000000..8060f3f13 --- /dev/null +++ b/docs/superpowers/specs/2026-10-17-mp-pl-plan-cert-delivery.md @@ -0,0 +1,65 @@ +# 危化品证上传移动 H5 交付核验 + +状态:用户第三次界面校准已在源码中完成并通过审查修复后的浏览器回归;当前总目标还包含 CRM 六页,图谱与全量门禁在总目标收尾统一执行。菜单 SQL 已按用户后续授权在测试库执行;未部署、未进行微信真机验收,生产库未执行。 + +## 范围 + +设计:`2026-10-17-mp-webview-pl-plan-cert-design.md`。 +计划:`../plans/2026-10-17-mp-webview-pl-plan-cert.md`。 + +独立移动模块 `/m/pl/plan-cert`,小程序运输管理工作台 code `pl-plan-cert-webview`,入口权限 `mini:pl:plan-cert:list`。Web 页面与既有后端不修改;移除导出,保留已确认设计中的全部移动功能。 + +## 需求核验表 + +| 要求 | 当前证据 / 状态 | +| --- | --- | +| 复用 H5 WebView、运输工作台入口 | 入口配置及路由测试 3/3 通过;独立规格审查通过 | +| 五个文字 Tab 及默认查询 | model 与浏览器交互通过 | +| 筛选、搜索、日期、分页与完整卡片字段 | 搜索/日期/动态候选项上下文/文本、日期、数字、枚举、合同侧别、排序参数/加载更多失败重试/乱序请求通过;字段完整性由独立规格审查核对 | +| 独立详情、关联合同、运输复制与链接 | `/m/pl/plan-cert/:id` 直达/刷新/路由 ID 切换通过;普通固定绿顶栏、三 Tab、无票根/Hero;只读合同商机/报价关联及别名补全、金额独立权限、关联计划打开、司机/现场复制、磅单二维码预览均通过 | +| 产品分组证书上传、预览、下载、移除 | 3种证书槽位、最新详情、上传中保存/关闭拦截、失败保留重试、载荷白名单、预览/下载/移除及取消不写入通过 | +| 单条/批量齐备与取消、权限、状态限制 | model 及浏览器批量1成功1失败1跳过、单条取消、权限失败关闭写入口通过 | +| 375/414px 移动样式、附件卡片 | 顶栏、状态 Tab、三栏筛选和列表卡片横向铺满视口;列表/筛选/详情/上传截图及横向溢出断言通过;72×72 缩略图及编辑态下载/删除 44px 命中区互不重叠 | +| 不修改 Web 及共享后端行为 | 8 个关键文件 SHA256 与实施前全部一致 | +| 其他问题只记录 | 见 `2026-10-17-mp-pl-plan-cert-existing-issues.md`,未修改其中的既有问题 | +| 构建、目标 lint、类型检查、图谱更新 | 本阶段生产构建、目标 ESLint/Stylelint 通过;全量类型检查仍被仓库既有错误阻断且目标路径无诊断;图谱在 CRM 六页完成后统一更新 | + +## 已执行的验证 + +- `node --test scripts/mp-pl-plan-cert-entry.test.mjs`:先3项失败(缺入口/路由/SQL),补齐后3项通过。 +- `pnpm exec tsx --test src/views/m/pl/plan-cert/model.test.ts src/views/m/crm/customer/model.test.ts scripts/crm-existing-issues.test.ts`:19项通过,其中8项为本次危化证规则、11项为前序客户功能回归。补充的日期上下文、品牌别名及合同补全测试均先失败后通过。 +- `node --check miniprogram/config/api.js`、`node --check miniprogram/config/workbench-menus.js`:通过。 +- 开发阶段仅只读确认菜单链 `1 → MINI_PL_ROOT`,并检查 SQL 两段 SELECT 的执行计划;当时未执行写语句。后续获用户授权后的实际执行与提交验证见下方记录。 +- `node scripts/test-mp-pl-plan-cert.mjs`:最终通过并自然退出,152次模拟API调用,无未知接口、无页面脚本异常。覆盖携带 `mpTicket` 直达详情和刷新、列表跳转、路由 ID 切换、详情内上传与齐备/取消齐备原位刷新;页面与共享组件使用真实代码,仅网络边界替身,不写真实数据库。 +- 浏览器验证边界:筛选断言验证真实前端序列化及配对展示,替身没有重做后端全部列筛选算法;PDF校验请求、弹层和尺寸,不代表微信内核原生PDF渲染已验收;二维码图片使用本地替身,不访问真实二维码服务。 +- 截图:`/tmp/shanxia-plan-cert-e2e/` 下 `list-375/414.png`、`filters-375/414.png`、`detail-375/414.png`、`upload-375/414.png`、`attachment-preview-375.png`、`feedback-preview-414.png`。已人工检查,预览和下载互不覆盖。 +- `pnpm build`:本次独立详情阶段 fresh 通过(4943 modules,38.13秒);仍有既有组件重名和包体积警告。 +- `pnpm exec eslint src/views/m/pl/plan-cert scripts/mp-pl-plan-cert-entry.test.mjs scripts/mp-pl-plan-cert-fixture.mjs scripts/test-mp-pl-plan-cert.mjs`、目标 Stylelint 与 Prettier:通过。 +- `pnpm exec vue-tsc --noEmit`:仍被仓库大量既有错误阻断;过滤输出未发现本目标路径诊断。总目标收尾将重新生成统一基线证据。 +- 图谱更新延后到 CRM 六页代码全部完成后统一执行,避免共享脏工作区并发覆盖。 + +## 变更隔离与审查 + +- 规格审查发现并修复本模块的快捷日期facet上下文、筛选选中文字遮挡、产品品牌别名、合同关联补全及反馈附件触达区域问题;复审通过。 +- 本轮独立详情审查继续发现并修复 Teleport 弹层未命中详情页约束、编辑态附件操作命中区重叠、只读权限空底栏、旧票根/旧自定义顶部样式残留、顶部 Tab/筛选未 full-bleed、E2E 强制退出等问题;永久断言先复现后转绿。 +- 最终复审继续校准附件:保持 72×72 发票夹式卡片,删除角标与下载入口各自保留 44×44 且互不重叠,不再出现可见操作底栏;权限失败与只读提示移至详情 Tab 后,且无写权限时不渲染底部操作区。 +- 入口/菜单SQL独立规格和质量审查通过;菜单权限测试改为精确检查 Web `m.perms = 'pl:plan-cert:list'`,避免误匹配移动权限字符串。 +- 以下8个文件SHA256与本次实施前一致:Web危化品列表及列筛定义、Web证书上传弹窗、共享危化品检查、后端计划路由及计划服务、既有移动运输详情、共享 `mp-webview.scss`。 +- 继续使用用户确认的当前 `V1.5` 工作区,保留全部原有修改;未提交、推送、合并或清理用户文件。 + +## 数据库与发布 + +- 无业务表结构或模型迁移。 +- 菜单脚本:`docs/sql/migrations/2026-10-17-mini-pl-plan-cert-webview-menus.sql`。 +- 菜单 SQL 已在测试库执行;生产库未执行。角色仍需保留对应 Web 上传/齐备业务权限,本脚本不扩大这些写权限。 +- 首次发布仍需要部署 H5、发布带新入口的小程序包。生产库 SQL 需另行授权,执行前核对父菜单并备份菜单及授权表。 +- 尚未进行微信真机验证、部署或发布;模拟浏览器验证不能替代这些步骤。 + +### 测试库执行记录(2026-10-17,用户后续授权) + +- 目标:`backend/.env` 对应的 `47.99.164.66:3306 / shanxia2.0`,MySQL 5.7.36;未连接生产库写入。 +- 执行前确认移动父链 `1 → MINI_PL_ROOT` 唯一、目标菜单尚不存在、两张目标表均为 InnoDB。 +- 执行前完整备份 `sys_menu` 255行、`sys_role_menu` 1375行至本机临时文件 `/var/folders/v5/ylmpvkjd4zxcf20pzbys3stc0000gn/T/shanxia-plan-cert-menu-backup-zu0_vlar/before.json`,目录权限700、文件权限600。备份不包含数据库密码。 +- 事务新增1个“危化品证上传”移动菜单(ID `329823eb-e3af-49b2-b656-08f2c2a713f3`,权限 `mini:pl:plan-cert:list`),新增5条角色菜单绑定:管理员、销售主管、销售计划员、销售实录员、销售办证员。父级授权原已完整,无需新增。 +- 提交前核对所有已有菜单行未改、授权变化仅为上述5条移动叶子绑定;无SQL警告,未修改业务表或Web权限。 +- 事务提交后通过新数据库连接复核:菜单启用且可见、5角色各有唯一有效叶子绑定、移动根和运输父级授权链完整,验证通过。 diff --git a/docs/superpowers/specs/2026-10-17-mp-pl-plan-cert-existing-issues.md b/docs/superpowers/specs/2026-10-17-mp-pl-plan-cert-existing-issues.md new file mode 100644 index 000000000..3fd815a4a --- /dev/null +++ b/docs/superpowers/specs/2026-10-17-mp-pl-plan-cert-existing-issues.md @@ -0,0 +1,70 @@ +# 危化品证上传迁移期间的既有问题记录 + +原迁移范围:只记录迁移范围外的问题,不修改 Web 或其他既有页面。2026-10-17 用户追加授权修复问题 1、4,问题 2、3 按要求忽略,保留记录但不修改对应功能。 + +## 1. Web 上传证书时,保存未等待附件上传结束(已修复) + +- 位置:`web-admin/src/components/business/pl-plan-cert-upload-dialog/index.vue` 的 `handleSubmit` 和保存按钮。 +- 原因:原保存按钮仅按 `hazardProducts.length` 禁用;提交函数直接读取三个证书 URL。`AttachmentUploadField` 在上传完成后才同步 URL,虽暴露 `hasUploading()`,但原弹窗没有引用或检查它。 +- 可能影响:慢网下选中文件后立即保存,可能提交旧 URL 并关闭弹窗,刚选文件未绑定到计划。 +- 建议复现:浏览器网络限速,选择一个证书文件,在上传返回前点击保存,对比 PATCH 请求载荷与上传返回后的 URL。 +- 修复:收集所有证书附件组件引用,提交前检查 `hasUploading()`;上传中提示“附件正在上传,请稍候再保存”且不提交、不关闭。保存请求期间禁用附件编辑,加载中及重复提交也被拦截。 +- 验证:真实 Web 弹窗和附件组件的 Playwright 测试(API 边界替身)先复现旧代码上传中仍发送 1 次 PATCH,再确认修复后发送 0 次;上传完成后保存包含新 URL,关闭销毁后重开也能正常保存。未写入真实业务数据。 +- 状态:已按追加授权修复。测试脚本:`web-admin/scripts/test-pl-plan-cert-upload-dialog.mjs`。 + +## 2. H5 模块接入文档引用的运输计划菜单 SQL 不存在 + +- 位置:`docs/web-admin-mp-webview-modules.md` 的双权限说明引用 `docs/sql/migrations/2026-09-14-mini-pl-plan-webview-menus.sql`。 +- 依据:当前工作区读取该路径返回不存在,`docs/sql/` 文件检索也未找到同名脚本。 +- 影响:按旧文档发布运输计划时无法直接定位该菜单初始化脚本;不代表数据库现有菜单缺失。 +- 状态:按用户要求忽略,本次未修改旧文档该引用。本模块已有独立菜单脚本,不代表旧运输计划文档问题已修复。 + +## 3. 证书写接口未接入对应按钮权限校验(代码审查发现,未越权实测) + +- 位置:`backend/app/api/pl/plan.py` 的 `patch_plan_product_certs`、`patch_plan_hazard_cert_ready`;权限工具在 `backend/app/services/pl_plan_cert_perm.py`。 +- 依据:两个接口检查登录、租户、计划数据范围后调用业务服务,路由聚合未配置相应菜单权限依赖;`user_can_upload_plan_cert`、`user_can_manage_plan_cert_ready` 在当前后端仅有定义、没有调用。Web 页显示按钮的检查不能代替服务端权限检查。 +- 可能影响:有计划数据访问范围但没有对应按钮权限的登录用户,可能仍可直接调用证书写接口。 +- 状态:按用户要求忽略,本次未修改权限校验;未使用真实账号实施越权请求。新移动页保留独立的按钮及提交前权限检查,但不能声称已修复服务端权限问题。 + +## 4. 证书附件保存服务未拒绝已取消计划(已修复) + +- 位置:`backend/app/services/pl_plan_service.py` 的 `update_plan_product_certs`。 +- 原因:原函数拒绝已归档计划,但没有与 `set_hazard_cert_ready` 一样检查 `follow_status == 'cancelled'`;前端 Web 的 `canUploadCert` 则禁止已取消计划操作。 +- 可能影响:页面打开后计划被另一用户取消,仍可能保存证书附件,前后端状态限制不一致。 +- 修复:读取计划后、查询及修改产品证书前,检查已作废状态并返回 HTTP 400:“已作废的计划不能修改危化品证书”。保留原租户、软删除和归档检查;不改变按钮权限。 +- 验证:服务回归测试先确认旧代码对已作废计划不抛错,修复后确认拒绝且不修改 URL、修改人、齐备状态,不提交事务;另覆盖已归档、不存在及正常计划保存。测试使用数据库边界替身,不写入真实业务库;不声明已解决数据库事务之间的并发锁定问题。 +- 状态:已按追加授权修复。测试文件:`backend/tests/test_pl_plan_product_certs.py`。 + +## 5. CRM 六个移动菜单未回灌全量 SQL 基线(仅记录) + +- 位置:`docs/sql/shanxia2.0.sql` 与 `docs/sql/migrations/2026-10-15-mini-crm-*-webview-menus.sql`、`2026-10-17-mini-crm-customer-webview-menus.sql`。 +- 依据:当前全量基线未包含 `MINI_CRM_*` 菜单;客户、产品、报价、报价审批、合同、合同审批只存在于增量迁移。 +- 可能影响:仅使用全量基线初始化的新环境不会出现六个工作台入口,必须额外执行对应迁移。 +- 状态:本轮先记录。用户当前授权是界面标准化,不据此写数据库;在 CRM 六页收尾时再评估是否同步基线 SQL。 + +## 6. 旧 CRM 菜单迁移对软删除记录的幂等性不足(仅记录) + +- 位置:2026-10-15 的产品、报价和合同工作台菜单迁移。 +- 依据:脚本的 `NOT EXISTS` 仅检查 `del_flag=0`,但插入使用固定主键;若同主键记录已软删除,重新执行会触发主键冲突。客户迁移已使用 `ON DUPLICATE KEY UPDATE del_flag=0`,行为更稳健。 +- 可能影响:环境曾软删除菜单后重跑迁移可能失败,祖先角色绑定也可能无法恢复。 +- 状态:本轮先记录,不修改数据库迁移或真实数据。 + +## 7. 旧小程序 CRM 回归说明仍标记已启用入口为“未开放”(仅记录) + +- 位置:`bak/miniprogram-e2e/cases/01-crm.md`。 +- 依据:文档仍把产品管理、合同审批描述为灰卡/未开放;当前 `workbench-menus.js` 中六个 CRM WebView 入口均已启用并受权限过滤。 +- 可能影响:人工验收人员可能按过期说明跳过页面或误报入口状态。 +- 状态:本轮只记录;CRM 六页交付时统一修订回归说明。 + +## 8. Demo 原“证书上传时间”没有可对应的 Web/API 筛选字段(已校准文档) + +- 位置:`bak/mobile-ui/shanxia-mp-crm-pl-cert-style-align-demo.html` 的危化品证「更多」示意字段。 +- 依据:Web 端 `columnFilterDefs.ts` 与计划列表 API 只有计划日期、送货时间、证书齐备状态等已生效条件,没有独立的证书上传时刻字段。 +- 处理:按用户“功能完全参考 Web 端”的要求,删除 Demo 中无法生效的示意字段,并在 OpenSpec/UI 规范中明确单页不得为凑控件类型伪造查询条件;未改动后端或其他页面功能。 + +## 本次验证 + +- 后端:`venv/bin/python -m pytest tests/test_pl_plan_product_certs.py tests/test_pl_plan_cert_list_filters.py tests/test_pl_menu_badge_plan_cert.py tests/test_pl_plan_product_upsert.py tests/test_pl_plan_draft_save.py -q`(在 `backend/`):17 项通过。 +- Web:`node scripts/test-pl-plan-cert-upload-dialog.mjs`(在 `web-admin/`,本地 Vite 默认端口 3006):通过。 +- 构建:`pnpm build` 通过;保留原有组件重名和包体积警告。`pnpm exec vue-tsc --noEmit` 仍未通过,其输出与修复前基线完全一致,无本次新增类型错误。 +- 本次没有新增字段、数据库结构或菜单权限变更,无需执行 SQL。 diff --git a/docs/superpowers/specs/2026-10-17-mp-webview-crm-customer-design.md b/docs/superpowers/specs/2026-10-17-mp-webview-crm-customer-design.md new file mode 100644 index 000000000..d97891e12 --- /dev/null +++ b/docs/superpowers/specs/2026-10-17-mp-webview-crm-customer-design.md @@ -0,0 +1,35 @@ +# 小程序 H5 客户管理迁移需求 + +日期:2026-10-17。用户已授权整理需求后直接开发。 + +## 目标与边界 + +以当前 Web「CRM管理 / 客户管理」为业务基准,在小程序中通过已有 WebView 加载独立移动 H5 页面。仅排除导出。Web 页面、共享业务 API、其他模块的行为保持不变;已有未提交改动保留。其他页面发现的问题只记录在本次问题文档。 + +## 功能清单 + +- 全部客户、我的客户、待跟进、重点客户四个视图;关键词搜索、字段筛选、排序、分页刷新。 +- 客户新增、编辑、详情、单条/批量删除、单条/批量放入公海。保留创建人删除限制与操作确认。 +- 全量客户可写字段、名称查重、拼音首字母重新生成、负责人默认当前用户。 +- 营业执照(5)、经营许可证(5)、其他证件(10):图片/PDF,即时上传、预览、下载、删除、上传期间禁止提交。 +- 跟进记录查看、新增、删除,联系人选择、跟进方式、内容、下次联系时间、附件(15)、备注。 +- 联系人查看、新增、编辑、删除、设置主要联系人;校验与 Web 相同。 +- 关联商机、合同列表及查看;合同使用已有移动详情;商机在本模块内提供移动详情,并保留详情中的修改、推进阶段、删除及跟进维护入口,不新增独立商机菜单。 +- 开票资料新增、编辑、删除、默认设置、粘贴识别;新增客户可同时填写第一条开票资料。 +- 操作日志分页及详情。 +- Web 源码中未暴露的转移/成交处理函数不作为新增入口;以当前实际界面可操作功能为准。 +- 桌面列显隐改为卡片字段显隐;列头筛选改为移动筛选面板,保留查询含义。 + +## 方案 + +沿用现有 `MpWebviewShell`、一次性 ticket、`mp-webview.scss` 与工作台路由映射。新增 `/m/crm/customer`、`/new`、`/:id`、`/:id/edit`。不新增第二套登录及 WebView 壳。 + +采用独立移动组件复用现有 API 与附件组件。相比修改 Web 客户弹窗增加移动分支,这样能满足本次 Web 功能完全不改的边界;相比独立 H5 工程,继续复用现有构建、鉴权和附件基础设施。 + +视觉采用三墙绿、手机卡片、分区表单、横向标签、底部动作栏及 Bottom Sheet;参考 `views/m/crm/product/index.vue`、`views/m/crm/contract/detail.vue` 和现有附件卡片。模式 P08(视图列表)、P12(分区表单)、P25(独立详情),移动样式以现有 H5 为准。 + +菜单使用 `crm-customer-webview` / `mini:crm:customer:list`,SQL 补齐移动父菜单与已有 Web 客户角色绑定,业务继续使用原接口权限。 + +## 验收 + +检查字段及上述功能逐项覆盖;单测验证 payload、列表参数、响应归一化及部分失败重试;手机宽度浏览器交互回归;构建与类型检查(已有问题分别记录);核对 Web 源码未被本次修改;执行字段一致性检查和图谱更新。数据库及真机环境无法直接验证的部分如实记录,不宣称已发布。 diff --git a/docs/superpowers/specs/2026-10-17-mp-webview-pl-plan-cert-design.md b/docs/superpowers/specs/2026-10-17-mp-webview-pl-plan-cert-design.md new file mode 100644 index 000000000..cdf6d92cb --- /dev/null +++ b/docs/superpowers/specs/2026-10-17-mp-webview-pl-plan-cert-design.md @@ -0,0 +1,130 @@ +# 小程序危化品证上传 H5 迁移设计 + +日期:2026-10-17 +状态:2026-10-17 按用户最新反馈进行第三次校准;详情改为独立页面并删除票根/顶部特殊区。此前“详情面板 + 票根”的验证结论已失效,完成证据以本轮更新后的 `2026-10-17-mp-pl-plan-cert-delivery.md` 为准。 + +## 1. 目标与边界 + +在小程序「运输管理」下新增「危化品证上传」,通过已有 WebView 容器访问独立移动端 H5。迁移 Web 同名功能,唯一明确删除的业务功能是导出;桌面表格、列头筛选及弹窗按移动端交互转换。 + +- 不修改 Web 页面、Web 上传弹窗、共享业务规则和既有后端行为。 +- 不修改其他页面发现的问题,只在独立问题文档记录与交付时报告。 +- 不增加业务表或字段。新增移动菜单及其角色祖先绑定 SQL 放在 `docs/sql/`,不因前一项客户菜单的授权而自动执行本次 SQL。 +- 保留现有工作区的未提交改动;开始编码前确定工作区选择,不能用重置或覆盖方式清理。 + +## 2. 已核对的功能来源 + +| 项目 | 依据 | +| --- | --- | +| 列表、五个 Tab、批量操作、权限、详情入口 | `web-admin/src/views/pl/plan-cert/index.vue` | +| 全部列头筛选字段 | `web-admin/src/views/pl/plan-cert/columnFilterDefs.ts` | +| 证书上传及保存载荷 | `web-admin/src/components/business/pl-plan-cert-upload-dialog/index.vue` | +| 危化属性、证书槽位、齐备确认提示 | `web-admin/src/composables/usePlToxicProductCertCheck.ts` | +| Tab 参数和状态枚举 | `web-admin/src/utils/pl-display.ts` | +| 列表、详情、证书 PATCH 接口 | `web-admin/src/api/pl/index.ts` | +| 移动布局、运输卡片参考 | `web-admin/src/views/m/pl/plan/index.vue`、`web-admin/src/views/m/pl/plan/detail.vue` | +| 最近迁移经验、附件引用及上传中检查 | `web-admin/src/views/m/crm/customer/` | +| 入口鉴权与 WebView 接入约定 | `docs/web-admin-mp-webview-modules.md` | + +模式选型:工作台 WebView style-align 列表(标准绿顶栏 + 状态 Tab + 三栏筛选 + expense-card)+独立路由 Tab 详情+发票夹附件。详情仅保留普通绿顶栏,不使用票根、Hero 或记录摘要等顶部特殊区。移动视觉以 `docs/miniprogram-ui-spec-sanqiang.md` §12、OpenSpec「工作台 WebView 业务页」和 `bak/mobile-ui/shanxia-mp-crm-pl-cert-style-align-demo.html` 为唯一权威,不照搬桌面宽表,也不沿用旧 `cert-*` 密集工具条。 + +## 3. 方案选择 + +推荐列表 `/m/pl/plan-cert` + 独立详情 `/m/pl/plan-cert/:id`,复用 API、纯业务规则及现有移动基础组件。列表只能通过路由进入详情;详情必须支持直达、刷新、浏览器/小程序返回与路由参数切换。 + +另两种方案不采用:直接嵌入 Web 页会保留宽表和桌面弹窗;修改共享 Web 页面适配移动会扩大回归范围并违反不修改 Web 的要求。 + +## 4. 页面和交互 + +### 4.1 列表与 Tab + +顶部复用 `mp-wv-header`:返回工作台、17px 固定标题,以及标题下方的五个胶囊状态 Tab(仍在绿顶栏内);不显示副标题、独立“搜索”按钮或检索框。Tab 顺序: + +1. 未上传证书(默认)。 +2. 全部。 +3. 入库单。 +4. 出库单。 +5. 直销单。 + +Tab 不能改成下拉选择。窄屏允许 Tab 区域横滑;绿顶栏内选中态为白底绿字,未选为半透明白边白字;页面整体不能横向溢出。点击后重置页码与选中项,保留无冲突筛选;过期请求不能覆盖新 Tab 的结果。绿顶栏下方为单个胶囊检索框(提交键触发搜索),再紧贴三栏筛选。 + +查询语义必须与当前 Web 一致: + +- 所有 Tab 均附带 `hasHazardProduct=1`。 +- 未上传证书:`certUploadStatus=incomplete` 且 `hazardCertReady=0`,不是简单地检查是否存在任意附件。 +- 全部:不增加单据类型和证书状态限定。 +- 其他三个 Tab 分别使用 `planType=inbound/outbound/direct`。 +- 默认跟进状态集合不含 `cancelled`,允许用户在筛选中明确选择已取消。 +- Tab 优先于冲突的单据类型、齐备状态筛选;保持后端的默认排序。 + +列表使用备用金式 `expense-card` 和可展开段次/产品信息。卡片与左右边界保留约 12px 间距;「共 N 条计划 · 已加载 M 条」汇总放在卡片列表之后。卡片须具备 `ec-top`、副信息、灰底 KV、时间 meta、虚线操作底栏;勾选框在标题左侧,浅底语义状态标签在右侧,每卡最多一个实心主色按钮(上传证书)。列表展开按段次分区:装货段次(1 段)与送货段次(可多段),各段展示客户、时间、地址、合同与产品摘要;不展示计划附件(附件改在详情查看)。合同可进入移动只读详情。 + +### 4.2 搜索、筛选与加载 + +列表自上而下固定为「绿顶栏(标题 + 状态 Tab)→ 检索框 → 三栏筛选 → 卡片 → 条数汇总」,不得在 Tab 下方堆叠日期 Chip 和“筛选/刷新/重置”工具条。三栏固定为: + +1. 日期:全部日期、今天、明天、昨天、本周,可直接下拉选择。 +2. 齐备状态:全部、未齐备、已齐备,可直接下拉选择;与默认“未上传证书”Tab 冲突时 Tab 语义优先。 +3. 更多:打开底部筛选 Sheet;存在额外条件时显示红点。 + +“更多”集中承载 Web 列头筛选,并同时提供 Chip、模糊检索、日期/日期时间、日期区间和数值区间;底栏仅“重置/确定”。保留关键词查询、自定义日期、筛选重置和分页加载;刷新通过重新提交搜索或重试错误完成,不保留独立密集工具条: + +- 计划编号、计划日期、送货时间、单据类型、归属公司、跟进状态、证书齐备。 +- 车牌、人员、跟进人、装货客户、送货客户、装送地址/时间。 +- 合同、产品名称、规格、单位、计划量、实际量。 +- 保留对应枚举多选、动态可选值、日期范围、数值比较及可用排序能力。动态可选值请求保留当前查询上下文。 +- 装送客户合并查询、合同侧别和配对行过滤遵循 Web 工具函数,不能仅查询到计划后无差别展示不相关的匹配段次。 + +空结果、加载中、加载失败、无权限状态分别提示;加载更多失败不跳过页码;重复点击操作期间禁止再次提交。 + +### 4.3 计划详情 + +采用独立页面 `/m/pl/plan-cert/:id`,由页面自己从 `route.params.id` 读取计划、权限和关联数据。顶部只使用普通 `mp-wv-header`(返回 + 固定标题“危化品证详情”),不显示票根、Hero、计划号副标题或状态等顶部特殊区;计划号、状态和齐备信息下沉到正文信息卡。顶栏后直接展示“基础信息 / 运输与段次 / 证书与附件”Tab,每个 Tab 下使用字段上标签下值的信息卡。详情范围对齐 Web `PlPlanViewDialog`,包括完整装送段次、产品/数量、运输、证书、附件、运费、备注及其原有可查看关联信息。 + +详情必须支持链接直达和刷新;非法或无权 ID 展示独立页面错误态;关联计划跳转更新当前路由参数并重新加载。上传、齐备、取消齐备成功后原位刷新详情,返回列表后列表重新请求,不能依赖列表父组件的 ref 或弹层开关。 + +复用已有移动展示工具,但不能直接导航到具有新增计划、复制计划、作废、安排运输等额外业务操作的通用运输详情而改变本菜单的操作边界。详情主要操作提供本菜单有权限且当前状态允许的上传、齐备和取消齐备。 + +进一步核对 `PlPlanViewDialog` 后确认:Web 本菜单的详情还会根据 `usePlPlanArrangeActions` 的结果提供「复制给司机」「复制给现场」「复制磅单二维码」及司机/现场链接。这些属于现有详情功能,移动迁移必须保留并沿用相同显示条件,不能误当成导出删除;可放入详情“更多”操作区。列表与详情操作成功后均重新读取服务器状态。 + +### 4.4 上传证书 + +- 打开时重新获取计划详情,按现有逻辑读取 CRM 产品危化属性。 +- 易制毒展示购买证、运输证;易制爆展示合法证明;按共享 `getRequiredCertSlots` 规则处理已有数据,不自行覆盖历史属性。 +- 每个产品一张分组卡,字段标题在上,附件宫格在下。 +- 继续使用已有 `AttachmentUploadField` 的上传、预览、下载与删除能力,但在本模块内将触发项和文件项覆盖为发票夹式 72×72 宫格:图片缩略填充,非图片显示扩展名与文件名,删除为右上角角标,末位虚线“+”添加;不得保留管理端 140×96 主形态。 +- 支持预览、下载、移除,与既有移动附件交互一致;只读状态不显示编辑入口。 +- 文件选中即上传到既有附件服务;业务保存仅发送产品 ID 和三个逗号分隔 URL 字段,不发送 Base64、不修改计划其他字段。 +- 有上传进行中时阻止保存。保存失败保留已填写内容,可重试;取消不提交业务记录。 +- 沿用 Web 允许稍后补附件的规则,不把所有槽位非空作为保存或人工齐备的强制条件。 + +### 4.5 齐备操作与权限 + +- 单条及多选批量「证书齐备」「取消齐备」均保留;批量确认说明实际可操作条数,跳过不符合状态的项目,并报告成功、失败及跳过数量。 +- 已归档(`archiveStatus=archived`)或已取消(`followStatus=cancelled`)不能上传或改齐备。 +- 只有含危化产品的计划可操作齐备;已齐备只允许取消,未齐备只允许标记。 +- 使用既有 `pl:plan-cert:upload`、`pl:plan-cert:ready` 权限,不因有移动入口就赋予写权限。权限加载失败按无权限处理。 +- 人工齐备需二次确认,提示易制毒/易制爆的证书要求及之后仍可补附件;取消齐备提示其对运输安排的影响。 +- 调用现有 `PATCH /transport/plan/{id}/product-certs`、`PATCH /transport/plan/{id}/hazard-cert-ready`,不增加替代接口或绕过已有租户/数据范围保护。 + +## 5. 入口和样式 + +- 工作台「运输管理」新增 code `pl-plan-cert-webview`。 +- 路径映射到已有 `mpWebview` 容器,目标 `/m/pl/plan-cert`;沿用票据换取登录、返回工作台及安全区处理。 +- 新移动权限建议 `mini:pl:plan-cert:list`;迁移 SQL 通过 Web `pl:plan-cert:list` 匹配既有角色,补齐移动端根及运输管理父级绑定,不改 Web 菜单、不自动扩大上传或齐备权限。 +- 当前 SQL 目录没有可直接复用的运输计划移动菜单脚本。新增脚本前须只读核对已有运输管理父菜单 ID、路径和租户归属,不猜测父级 ID,也不新增第二个同名运输根菜单。 +- 使用 `MpWebviewShell`、`MpBottomSheet` 和本模块样式。结构 class 对齐 Demo 的 `mp-wv-header`、`status-tabs/filter-tag`、`filter-bar/filter-trig`、`expense-card`、`detail-tabs`、`att-grid/att-img` 语义;详情禁止 `ticket-*`。品牌绿 `#0a9f6d`,不得出现 Fresh Mint `#10b981`,375/414px 验证,交互触达至少 44px,状态使用浅底语义标签,弹层无背景模糊。 +- 本模块筛选和上传 Sheet 底栏操作水平居中、按钮间距 12px;按钮宽度约 96px、不伸满、不粘连,视觉字号 14px,实际触达高度不少于 44px。该规则只作用于本模块,不能修改共享 Sheet 导致其他界面变化。 +- 首次新增本地工作台入口需要发布含入口配置的小程序包及 H5,并执行本模块菜单 SQL;不能误用“以后只更新 H5 无需提审”的说明代替首次发布步骤。 + +## 6. 验证和交付 + +- 先写失败测试覆盖五个 Tab 查询、默认状态、冲突筛选、操作限制、批量目标、证书载荷及上传中保护,再实现。 +- 浏览器模拟 API 验证列表、搜索、筛选、全部 Tab、分页、详情、上传增删预览、保存、单条/批量齐备与取消、无权限和接口失败。模拟测试不向真实业务数据库写入。 +- 375px 和 414px 截图检查列表、详情、附件和底部操作栏,不以编译通过替代界面验收。 +- 运行新增测试、目标文件 lint、构建及类型检查;把已有类型错误与新增错误区分。核对 Web 原文件内容没有因本次迁移变化。 +- 更新模块接入文档、SQL、交付和问题记录,按仓库要求更新相关知识图谱。真机和部署未实际执行时必须明确标注,不能宣称通过。 + +## 7. 当前状态 + +用户已明确给出第三次校准要求:独立详情、删除详情顶部特殊区、列表横向无额外间距、统一按钮/字号、Sheet 底栏按钮居中适宽、列表顶部对齐 OpenSpec。当前分支为 `V1.5`,在现有工作区实施并保留前序任务及用户的未提交改动。数据库写入与发布不属于此次开发默认授权,另行确认。 diff --git a/docs/superpowers/specs/2026-10-18-mp-crm-customer-detail-tabs-design.md b/docs/superpowers/specs/2026-10-18-mp-crm-customer-detail-tabs-design.md new file mode 100644 index 000000000..e9c754fed --- /dev/null +++ b/docs/superpowers/specs/2026-10-18-mp-crm-customer-detail-tabs-design.md @@ -0,0 +1,184 @@ +# 客户详情 Tab:商机 / 合同 / 开票 / 操作日志 UI 对齐 + +日期:2026-10-18 +状态:已确认(方案 A) +范围:`web-admin` 小程序 WebView 客户详情 `/m/crm/customer/:id` 内四个业务 Tab + +## 1. 目标与边界 + +### 1.1 目标 + +将客户详情中的 **商机、合同、开票信息、操作日志** 四个 Tab,在列表交互上对齐已定稿的 **联系人** 范式;在详情展示上对齐 **资料** Tab 的只读字段呈现。业务能力与现有 API 契约不变。 + +### 1.2 范式权威 + +| 维度 | 权威参考 | 路径 | +|------|----------|------| +| 列表骨架 | 联系人 `ContactPanel` | `web-admin/src/views/m/crm/customer/ContactPanel.vue` | +| 卡片 / 展开 | `mp-customer-detail-card` | `customer.scss` + 跟进 `FollowPanel` | +| 详情字段 | 资料 Tab | `detail.vue`:`section.mp-wv-section` + `h3` + `CustomerFields`(透明底只读) | +| 视觉 Token | 三墙绿 | `#0a9f6d` / `#087f57` / `#e9f9f2`;禁止 Fresh Mint `#10b981` | + +### 1.3 不做 + +- 不改后端 API、权限、分页语义(商机/合同/日志仍服务端分页 + 客户端关键词/筛选;开票仍按客户一次拉全量)。 +- 不新建商机/合同独立菜单或新路由;合同模块既有 `/m/crm/contract/:id` **保留**,但本客户详情 Tab 内「查看」**不再跳转该路由**(见 §4.2)。 +- 不改「资料 / 跟进 / 联系人」三个 Tab 的既有行为(除本会话已修的 sticky Tab 顶栏遮挡)。 +- 详情页底栏 FAB(编辑 / 公海 / 删除)仍仅在 **资料** Tab 显示。 +- 不顺手改 PC 端 `crm/customer` 弹窗。 + +## 2. 现状与差距 + +| Tab | 现状组件 | 现状形态 | 目标差距 | +|-----|----------|----------|----------| +| 商机 | `RelatedPanel` `kind=opportunity` | `van-field` 查找 + `LocalFilters` + `van-cell-group` inset;点行进底部弹层 | 换联系人式检索/三栏/扁平卡/收叠;弹层皮肤改资料风 | +| 合同 | `RelatedPanel` `kind=contract` | 同上列表;**点行 `router.push` 合同详情页** | 同列表范式;查看改为资料风底部弹层,不跳转 | +| 开票 | `InvoicePanel` | `van-field` + `LocalFilters` + inset 卡 + 行内全字段;增删改弹层 | 换联系人式列表/筛选;展开后操作;表单弹层 `teleport` | +| 日志 | `RelatedPanel` `kind=log` | 同商机列表 + 弹层字段/`pre` | 同列表范式;弹层资料风 + 请求参数区 | + +共用依赖(保留逻辑、可换皮): + +- API:`listOpportunity` / `getOpportunity` / `listFollowByOpportunity` / `getStageLogList`;`listContract`;`list`(operlog);`getInvoiceInfoByCustomerId` / `add|update|delInvoiceInfo` +- 筛选定义:`dialogColumnFilterDefs.ts` 中 `buildDetail*ColumnFilterDefs` / `buildInvoiceInfoColumnFilterDefs`(「更多」Sheet 字段来源) +- 商机动作:`OpportunityActions.vue`(修改 / 推进阶段 / 跟进 / 删除) + +## 3. 共用列表骨架(对齐联系人) + +四个 Tab 统一结构(自上而下): + +1. **顶栏操作**:`刷新`;开票额外主色「+ 新增开票信息」;商机/合同/日志可保留「共 N 条」弱文案(可选)。 +2. **胶囊检索**:`input.mp-wv-search`(占位见 §4),非带 label 的 `van-field`。 +3. **三栏筛选**:`van-dropdown-menu` + 两个 `van-dropdown-item` 快捷枚举 + 「更多」打开底部 Sheet;`teleport="body"`、`z-index ≥ 3000`,避免被 sticky Tab / 卡片遮挡。 +4. **扁平白底卡**:`article.mp-wv-card.mp-customer-detail-card` + - 头:标题 + 一行 meta 摘要 + 右侧 `status-tag`(语义浅底) + - 中:「展开 / 收起」,**默认收叠** + - 展开展:全部列表字段行(`mp-customer-detail-card__row`)+ 操作区 +5. **去掉**:`LocalFilters` 折叠块;`van-cell-group.inset.mp-customer-panel-card` 列表堆叠;列表态整页 `CustomerFields` / `InvoiceFields` 展开。 + +分页:商机/合同/日志保留「加载更多」;筛选与关键词作用在**已加载**集合上(与现状一致)。开票无分页。 + +样式优先复用现有 `.mp-customer-detail-card` / `.mp-customer-contact-panel` 节奏;可抽轻量 panel 根类(如 `.mp-customer-related-panel`)避免复制粘贴 CSS,但**不强制**新建巨型共用组件——允许四面板各自落地、结构对齐即可。 + +## 4. 分 Tab 规格 + +### 4.1 商机 + +| 项 | 规格 | +|----|------| +| 快捷1 | 商机阶段 `crm_opportunity_stage`(含「全部」) | +| 快捷2 | 商机状态 `crm_opportunity_status`(含「全部」) | +| 更多 | 沿用 `buildDetailOpportunityColumnFilterDefs`:名称、负责人、预计成交日、创建时间等 | +| 检索占位 | `商机名称 / 编号 / 负责人` | +| 卡标题 | `opportunityName` | +| Tag | 阶段(或状态,二选一主 Tag;建议阶段) | +| 摘要 | `金额 · 负责人`(缺省用 —) | +| 展开字段 | 现有 `opportunityFields`(编号、客户、联系人、金额、日期、负责人、进度、赢率、阶段、状态、类型、来源) | +| 展开操作 | 「查看」→ 详情弹层 | + +**详情弹层(82%,teleport body)** + +- 结构对齐资料:`section` + `h3`(商机名称)+ 透明底 `CustomerFields`(`detailFields`,只读) +- 保留 `OpportunityActions`(修改 / 推进 / 新增跟进 / 删除) +- 「跟进记录」「阶段记录」分组:子项用扁平 `mp-customer-detail-card`,默认可收叠;跟进编辑/删除能力与现状一致 +- 删除/变更后刷新列表并视情况关闭弹层(现状行为保留) + +### 4.2 合同 + +| 项 | 规格 | +|----|------| +| 快捷1 | 合同类型 `crm_contract_type` | +| 快捷2 | 合同状态 `crm_contract_status` | +| 更多 | `buildDetailContractColumnFilterDefs`:编号、名称、负责人、签订日、金额等 | +| 检索占位 | `合同名称 / 编号 / 负责人` | +| 卡标题 | `contractName` 或回退 `contractNo` | +| Tag | 状态 | +| 摘要 | `金额 · 签订日` | +| 展开字段 | 现有列表字段(编号、金额、签订日、负责人、类型、状态) | +| 展开操作 | 「查看」→ 详情弹层 | + +**详情弹层** + +- 资料风:`h3` + `CustomerFields` 只读(以列表行字段为准;若后续有按 id 拉合同详情 API 再加深,本次不强制新接口) +- **行为变更**:取消本 Tab 内 `router.push('/m/crm/contract/:id')`;完整合同模块仍从合同菜单进入独立详情页 + +### 4.3 开票信息 + +| 项 | 规格 | +|----|------| +| 快捷1 | 是否默认:全部 / 默认 / 非默认 | +| 快捷2 | 有税号:全部 / 有税号 / 无税号(客户端根据 `taxNo` 是否非空) | +| 更多 | `buildInvoiceInfoColumnFilterDefs` 其余文本字段(单位名、税号、地址、法人、银行等) | +| 检索占位 | `单位名称 / 税号 / 银行` | +| 卡标题 | `companyName` | +| Tag | 默认 / 非默认 | +| 摘要 | `税号 · 开户银行` | +| 展开字段 | 现有 `invoiceFields` / `InvoiceFields` 只读等价行 | +| 展开操作 | 设为默认(非默认时)/ 编辑 / 删除(创建人删除限制不变) | + +**无独立「查看」弹层**;新增/编辑仍底部表单弹层(`van-popup` + `van-nav-bar` + `InvoiceFields` + 是否默认),须 `teleport="body"`,避免 sticky Tab 遮挡。粘贴识别布局保持已修样式。 + +### 4.4 操作日志 + +| 项 | 规格 | +|----|------| +| 快捷1 | 操作类型 `sys_oper_type` | +| 快捷2 | 成功 / 失败(`status` 0/1) | +| 更多 | `buildDetailOperLogColumnFilterDefs`:时间、模块、人员、IP、耗时等 | +| 检索占位 | `模块 / 人员 / IP` | +| 卡标题 | `title`(操作模块) | +| Tag | 成功 / 失败 | +| 摘要 | `人员 · 时间` | +| 展开字段 | 现有 `logFields` | +| 展开操作 | 「查看」→ 详情弹层(只读) | + +**详情弹层** + +- 资料风字段(含请求地址、错误信息等 `detailFields`) +- 「请求参数」独立 `section` + `
`
+- 无编辑/删除
+
+## 5. 资料风详情弹层 DOM 契约
+
+对齐 `detail.vue` 资料 Tab:
+
+```text
+van-popup (teleport=body, round, ~82%)
+  van-nav-bar (标题 + 关闭)
+  body
+    section.mp-wv-section
+      h3 主标题
+      CustomerFields(readonly)   // 透明底,勿再用 inset 白组包一层
+    (商机)OpportunityActions
+    (商机)section 跟进 / 阶段 …
+    (日志)section 请求参数 + pre
+```
+
+弹层内禁止再套一层「大白板」冲掉灰底页节奏;子列表卡用 `mp-customer-detail-card`。
+
+## 6. 实现切分建议
+
+1. **InvoicePanel**:先对齐列表骨架(改动面独立、无 RelatedPanel 分支)。
+2. **RelatedPanel**:按 `kind` 统一列表卡 + 三栏;合同去掉路由跳转改弹层;商机/日志弹层换资料风皮肤;商机子列表扁平化。
+3. **样式**:扩展 `customer.scss`;下拉/更多复用联系人 `teleport`/`z-index` 约定。
+4. **清理**:四 Tab 不再依赖列表态 `LocalFilters`(组件文件可保留供他处,确认无引用后再删)。
+
+建议顺序可按「开票 → 日志 → 合同 → 商机」降低联调风险(商机弹层最重)。
+
+## 7. 验收
+
+- 375 / 414 宽:无横向溢出;三栏下拉与更多 Sheet 不被 Tab/顶栏挡住。
+- 四 Tab:检索 + 两快捷 + 更多可用;卡片默认收叠,展开见全字段与操作。
+- 商机:弹层资料风 + 推进/跟进/删除仍可用;跟进/阶段可展示。
+- 合同:查看弹层资料风;本 Tab 不跳合同独立页。
+- 开票:增删改、设默认、粘贴识别仍可用;表单弹层可完整操作。
+- 日志:只读详情含请求参数。
+- sticky 主 Tab 不下钻绿头(已有 `offset-top` + z-index 约束保持)。
+- 不改 Web PC 客户页;API 请求参数与权限行为与改造前一致。
+- 现有相关单测若有则保持通过;无则手工回归上述路径即可。
+
+## 8. 自检(写文档时)
+
+- [x] 无 TBD/占位符遗漏关键决策(开票快捷2 定为「有税号」;合同改为弹层)
+- [x] 与「完全对齐联系人 + 详情对齐资料」及方案 A 一致
+- [x] 范围不含后端/新路由/资料·跟进·联系人重做
+- [x] 合同「不跳转」与「不做新路由」无矛盾:改的是客户 Tab 内入口,非删除合同模块页
diff --git a/docs/superpowers/specs/2026-10-18-mp-crm-customer-list-card-design.md b/docs/superpowers/specs/2026-10-18-mp-crm-customer-list-card-design.md
new file mode 100644
index 000000000..0b5933ce5
--- /dev/null
+++ b/docs/superpowers/specs/2026-10-18-mp-crm-customer-list-card-design.md
@@ -0,0 +1,32 @@
+# 小程序 WebView · 客户管理列表卡(全量 Web 列 + 产品卡范式)
+
+日期:2026-10-18  
+状态:已确认  
+范围:`web-admin` 小程序 WebView 客户管理列表 `/m/crm/customer`
+
+## 1. 目标
+
+1. 列表卡视觉/交互对齐产品管理列表卡:扁平无色块、预览 +「更多字段」、展开按钮上方无虚线。
+2. 卡片字段固定为 Web「客户管理」列表全部列(含默认可隐藏列),不随「显示字段」勾选变化。
+3. 「更多」筛选去掉「显示字段」;其它筛选条件不变。
+
+## 2. 字段(对齐 PC `crm/customer` 列表)
+
+始终标题:客户名称。右上 Tag:客户状态。
+
+| 区域 | 字段 |
+|------|------|
+| meta | `客户状态 · 客户编号 · 创建时间` |
+| 预览 | 客户简称、手机号 |
+| 展开 | 客户编号、客户类型、固定电话、邮箱、客户网站、客户级别、客户来源、所属行业、所在园区、企业规模、省、市、区、详细地址、客户状态、成交状态、负责人、跟进次数、最后跟进时间、下次联系时间、成交时间、成交金额、联系人数量、商机数量、合同数量、进入公海时间、领取时间、保护到期时间、创建部门、创建人、创建时间、更新人、更新时间、备注 |
+
+空值 `—`。字典字段用现有 dict 展示。客户名称仅作标题,不进预览/展开。
+
+## 3. 筛选
+
+- 保留:视图 Tab、类型/级别下拉、「更多」内其它条件。
+- 删除:`CustomerFilters`「显示字段」及其 picker;列表页不再维护 `visible` / `selectableFields` 驱动卡片。
+
+## 4. 不做
+
+- 不改详情、表单、公海页、PC 列显隐。
diff --git a/docs/superpowers/specs/2026-10-18-mp-crm-product-align-customer-design.md b/docs/superpowers/specs/2026-10-18-mp-crm-product-align-customer-design.md
new file mode 100644
index 000000000..32e3feceb
--- /dev/null
+++ b/docs/superpowers/specs/2026-10-18-mp-crm-product-align-customer-design.md
@@ -0,0 +1,56 @@
+# 小程序产品管理对齐客户管理样式
+
+日期:2026-10-18  
+状态:已确认(方案 A)  
+范围:`/m/crm/product` 列表、详情、新增/编辑外壳、分类页
+
+## 1. 目标
+
+视觉与交互对齐已落地的客户管理 H5(Vant + 三墙绿 + 绿头内 Tab/筛选 + 扁平卡片),**不改**产品 API、权限、字段与业务规则。
+
+## 2. 权威参考
+
+| 维度 | 参考 |
+|------|------|
+| 列表骨架 | `views/m/crm/customer/index.vue` + `customer.scss` |
+| 详情 Tab / 字段 | 客户详情资料风 + sticky `van-tabs` |
+| Token | `#0a9f6d` / `#087f57` / `#e9f9f2`;禁止 `#10b981` |
+| 表单外壳 | 客户 `form.vue`(绿头 + loading + 底栏);内层仍用 `ProductFormDialog` |
+
+## 3. 分页面
+
+### 3.1 列表 `index.vue`
+
+- 根容器:`mp-product-page mp-product-list`(样式可复用/镜像 customer-list)
+- 绿头内:搜索前放 `van-tabs`(全部/上架/下架);搜索后放三栏 `van-dropdown-menu`(分类、型号、更多);`teleport` + 高 z-index
+- 去掉:`MpStatusTabs`、`MpThreeColumnFilters`、`MpExpenseCard`、`MpBottomSheet`
+- 卡片:对齐 `mp-customer-list-card`(标题/状态 Tag/强调行编号/KV 分类·规格·危化 Tag/操作:编辑·上架下架·删除·查看主按钮)
+- 更多筛选:`van-popup` + 字段表单(状态、关键词、分类、型号、标准价区间)
+- Speed Dial 保留:产品分类 + 新增产品;确认框改 `showConfirmDialog` / Toast 改 Vant
+- 加载/空态:`van-loading` / `van-empty`
+
+### 3.2 详情 `detail.vue`
+
+- sticky `van-tabs`:基础信息 / 品牌与别名 / 产品图片;`offset-top` 避绿头
+- 分区:`section.mp-wv-section` + `h3` + KV 行;Tag/`van-image` 替代 el-*
+- 底栏:`van-button` 编辑 / 上架下架 / 删除
+
+### 3.3 表单 `form.vue`
+
+- 外壳:`van-loading` / 错误空态对齐客户;底栏若 Dialog 已有则只统一绿头与页背景
+- **不**拆写整套 Vant 字段表(方案 A 边界)
+
+### 3.4 分类 `categories.vue`
+
+- `MpBusinessHeader`;列表行保留树缩进
+- `el-tag` → `status-tag` 或 `van-tag`;操作/表单 `van-popup` + `van-field`/`van-picker` 等,去掉 `MpBottomSheet` + `el-form`
+
+## 4. 不做
+
+- 不改后端与 PC 产品管理
+- 不新建产品字段模型大重构
+- 不顺手改报价/合同页
+
+## 5. 验收
+
+375/414 无横溢;列表筛选/分页/上下架删除可用;详情三 Tab 与底栏可用;分类增删改可用;表单保存路径可用;与客户页绿头/卡片节奏一致。
diff --git a/docs/superpowers/specs/2026-10-18-mp-crm-product-list-card-design.md b/docs/superpowers/specs/2026-10-18-mp-crm-product-list-card-design.md
new file mode 100644
index 000000000..2cd28ec41
--- /dev/null
+++ b/docs/superpowers/specs/2026-10-18-mp-crm-product-list-card-design.md
@@ -0,0 +1,109 @@
+# 小程序 WebView · 产品管理列表卡(去色块 + 折叠)
+
+日期:2026-10-18  
+状态:已确认(方案 A)  
+范围:`web-admin` 小程序 WebView 产品管理列表 `/m/crm/product`
+
+## 1. 目标与边界
+
+### 1.1 目标
+
+1. 去掉顶栏「全部 / 上架 / 下架」状态 Tab:本页与 PC「产品管理」一致,**列表仅展示上架产品**。
+2. 去掉列表卡上两处背景色信息区(绿底编号强调条、灰底 KV 块),降低视觉噪音。
+3. 字段集对齐 PC「产品管理」**默认可见列**;字段较多时采用与客户列表一致的 **扁平摘要 + 预览 +「更多字段」展开**。
+
+### 1.2 范式权威
+
+| 维度 | 权威参考 | 路径 |
+|------|----------|------|
+| 折叠交互 / 无色块卡 | 客户列表方案 B | `web-admin/src/views/m/crm/customer/index.vue` + `mp-webview.scss` 客户卡段 |
+| PC 字段集 | 产品管理列表默认可见列 | `web-admin/src/views/crm/product/index.vue` `listColumnDefs` |
+| 视觉 Token | 三墙绿 | `#0a9f6d` / `#087f57` / `#e9f9f2`;禁止 Fresh Mint `#10b981` |
+| 交互示意 Demo | HTML 对照页 | `bak/mobile-ui/shanxia-mp-crm-product-list-card-demo.html` |
+
+### 1.3 不做
+
+- 不改产品详情页、新增/编辑表单、产品分类页。
+- 不改 PC 端 `crm/product` 列表行为(含列显隐持久化)。
+- 不在本列表展示「成本价」(PC 默认 `defaultVisible: false`)。
+- 不新增「字段显隐」配置能力;移动端字段集固定为 PC 默认可见列映射。
+- 不顺手改报价/合同等其它 CRM 列表卡。
+
+## 2. 现状与差距
+
+| 项 | 现状 | 目标 |
+|----|------|------|
+| 状态 Tab | 顶栏 `全部 / 上架 / 下架`,默认 `all` | 移除 Tab;查询固定 `statusIn=on` |
+| 编号区 | `.mp-product-list-card__emphasis` 绿底 | 取消色块;编号进 meta / 展开 |
+| KV 区 | `.mp-wv-card__kv` 灰底块 | 取消色块;扁平预览行 + 展开行 |
+| 字段 | 分类、型号、危化标识 | 对齐 PC 默认可见列(见 §3) |
+| 折叠 | 无 | 与客户列表相同的「更多字段 / 收起」 |
+
+## 3. 字段映射(PC 默认可见列 → 移动卡)
+
+PC `listColumnDefs` 默认可见:`productNo`、`categoryName`、`brands`、`aliases`、`model`、`price`、`status`;`productName` 始终展示;`cost` 默认隐藏 → **本页不展示**。
+
+| PC 列 | 移动卡位置 |
+|-------|------------|
+| 产品名称 | 标题(主文案) |
+| 易制毒 / 易制爆 | 标题旁小标「毒」「爆」(有则显示;对齐 PC 名称列 Tag) |
+| 状态 | 右上角浅底 Tag「上架」;meta 行亦含「上架」文案(已确认保留) |
+| 产品编号 | meta:`上架 · {编号} · {创建时间}`;展开区再列「产品编号」一行 |
+| 创建时间 | 仅 meta(PC 列表无此列,但移动卡保留时间辅助信息) |
+| 产品分类 | 预览第 1 行 |
+| 规格型号 | 预览第 2 行 |
+| 品牌 | 展开区(格式化与 PC `formatProductBrands` 一致) |
+| 别名 | 展开区(格式化与 PC `formatProductAliases` 一致) |
+| 标准价(元) | 展开区(格式化与 PC `formatProductPrice` 一致) |
+| 状态(文案行) | 展开区「状态」一行 |
+| 成本价 | **不展示** |
+
+展示规则:
+
+- 空值显示 `—`(与现有移动 CRM 习惯一致)。
+- 分类优先全路径(现有 `categoryPathMap`),无路径时回退 `categoryName`。
+- 展开区固定五行:产品编号、品牌、别名、标准价(元)、状态;因此「更多字段」按钮**始终展示**(与 Demo 一致)。
+
+## 4. 页面结构
+
+自上而下:
+
+1. **绿顶栏**:返回 + 标题「产品管理」+ 胶囊搜索(无状态 Tab)。
+2. **三栏筛选**:全部分类 / 全部型号 / 更多(价格区间等现有能力保留)。
+3. **列表卡**(§3)+ 分页加载更多。
+4. **Speed Dial**:产品分类 / 新增产品(不变)。
+
+操作栏仍为:编辑、下架、删除、查看。下架成功后刷新列表,该卡因 `status=on` 过滤而消失。
+
+## 5. 实现要点(落地时)
+
+### 5.1 前端
+
+- `web-admin/src/views/m/crm/product/index.vue`:移除 `van-tabs` 状态筛选;`buildProductListQuery` 固定上架;卡片 DOM 改客户式 preview / toggle / extra。
+- `web-admin/src/styles/mp-webview.scss`:删除或停用产品列表「强调条 + KV 色块」专属样式;产品卡复用/对齐客户卡扁平类名(可加 `mp-product-list-card__*` 镜像客户结构,避免误伤其它页)。
+- `web-admin/src/utils/mp-crm-product-card.ts`:扩展卡片模型(brands、aliases、price、展示串);`statusFilter` 可收敛为固定 `on` 或删除 Tab 常量;更新单元测试。
+- 列表行需带出 `brands` / `aliases` / `price`(后端列表 `_row_to_dict` 已含则直接用;若前端类型未声明则补齐)。
+
+### 5.2 查询
+
+- `statusIn`(或等价参数)固定为 `on`;不再传 `all` / `off`。
+- 其它筛选(keyword、categoryId、model、priceMin/Max)行为不变。
+
+### 5.3 验证
+
+- 无状态 Tab;默认列表仅上架。
+- 卡无绿底编号条、无灰底 KV 块。
+- 预览仅分类、型号;点「更多字段」可见编号/品牌/别名/标准价/状态。
+- 毒/爆小标与右上「上架」Tag 正确。
+- 下架成功后卡消失;375 / 414 无横向溢出。
+- 相关 `mp-crm-product-card` 单测更新并通过。
+
+## 6. 已确认决策摘要
+
+| 决策点 | 结论 |
+|--------|------|
+| 实现路径 | 方案 A:对齐客户列表扁平 + 折叠 |
+| 右上状态 Tag | 保留「上架」 |
+| meta 行 | `上架 · 编号 · 时间` |
+| 成本价 | 不展示(跟 PC 默认可见列) |
+| 状态 Tab | 移除;固定只查上架 |
diff --git a/docs/superpowers/specs/2026-10-18-mp-crm-quote-flat-card-design.md b/docs/superpowers/specs/2026-10-18-mp-crm-quote-flat-card-design.md
new file mode 100644
index 000000000..c3fd9e5f3
--- /dev/null
+++ b/docs/superpowers/specs/2026-10-18-mp-crm-quote-flat-card-design.md
@@ -0,0 +1,26 @@
+# 小程序 WebView · 报价单管理/审批扁平卡对齐
+
+日期:2026-10-18  
+状态:已确认(用户授权直接落地)  
+范围:`/m/crm/quote`、`/m/crm/quote/approval`(共用 `MpQuoteList`)、`detail.vue`、`form.vue` 外壳与确认弹窗
+
+## 决策摘要
+
+| 项 | 结论 |
+|----|------|
+| 范围 | D:列表+详情+表单外壳+审批共用列表 |
+| 字段集 | A:PC 默认可见列 → 预览/更多字段 |
+| Tab | C:管理/审批均保留状态 Tab,换皮进绿顶栏 |
+| 确认弹窗 | A:横排;普通绿 / 删除·作废危险红 |
+| 路径 | 方案 1:对齐客户/产品(Vant + 扁平卡) |
+
+## 列表卡字段
+
+标题:`quoteTitle`;右上 Tag:状态。  
+meta:`状态 · 单号 · 报价日期`。  
+预览:客户名称、最终金额。  
+展开:报价类型、产品信息、产品总金额、运费、桶押金、状态、负责人、报价日期、创建时间、报价单号。
+
+## 不做
+
+不改 API/权限;不做分享/转合同/PDF/导出/批量;不改合同模块。
diff --git a/docs/superpowers/specs/2026-10-18-mp-webview-flat-list-card-standard-design.md b/docs/superpowers/specs/2026-10-18-mp-webview-flat-list-card-standard-design.md
new file mode 100644
index 000000000..8fcde460d
--- /dev/null
+++ b/docs/superpowers/specs/2026-10-18-mp-webview-flat-list-card-standard-design.md
@@ -0,0 +1,161 @@
+# 工作台 WebView 列表卡标准升级(扁平折叠卡)
+
+日期:2026-10-18  
+状态:已确认(方案 B)  
+范围:文档标准——所有小程序工作台 H5 列表页(`web-admin` 路由 `/m/**`);本次**只改规范文档**,不改业务实现代码
+
+## 1. 目标与权威
+
+### 1.1 目标
+
+1. 将已验收的 **客户管理 / 产品管理** 扁平折叠列表卡,提升为全部 `/m/**` WebView 列表的**新标准**。
+2. 将旧 `expense-card`(灰底 KV、绿底强调条、大号金额色块区、style-align 备用金式卡)标为 **过渡 / 待改造**。
+3. 同步更新 OpenSpec 与 `miniprogram-ui-spec-sanqiang.md` §12,避免后续研发继续按旧骨架落地。
+
+### 1.2 决策
+
+| 决策点 | 结论 |
+|--------|------|
+| 权威范围 | **B**:扁平卡成为所有 `/m/**` WebView 列表新标准 |
+| 旧范式 | expense-card / style-align 标过渡;新需求与改造 PR SHALL NOT 再新建旧形态 |
+| 文档路径 | 先本 design,再改 OpenSpec + §12(内容对齐) |
+| 代码 | 本次不改报价/合同/危化证等存量实现 |
+
+### 1.3 权威参考
+
+| 维度 | 权威 |
+|------|------|
+| 参考实现 | `web-admin/src/views/m/crm/customer/index.vue`、`.../product/index.vue` + `mp-webview.scss` 扁平卡段 |
+| 列表卡 Demo | `bak/mobile-ui/shanxia-mp-crm-customer-list-card-demo.html`、`shanxia-mp-crm-product-list-card-demo.html` |
+| 确认弹窗 Demo | `bak/mobile-ui/shanxia-mp-crm-product-delete-confirm-demo.html` |
+| Token | 三墙绿 `#0a9f6d` / `#087f57` / `#e9f9f2`;禁止 Fresh Mint `#10b981` |
+| 过渡对照(非新标) | `bak/mobile-ui/shanxia-mp-crm-pl-cert-style-align-demo.html`、原生备用金 `expense-card` |
+
+### 1.4 不做
+
+- 不改业务 Vue/SCSS(报价、合同、危化证等存量页可暂留旧卡,仅文档催迁移)。
+- 不改 PC Fresh Mint、不改后端 API。
+- 不新建独立 OpenSpec change 名;条款挂在现有 `zkxw-engineering-standards` → `ui-conventions`。
+
+## 2. 列表骨架与扁平卡规则
+
+### 2.1 列表页纵向顺序
+
+| 顺序 | 区块 | 规则 |
+|------|------|------|
+| 1 | 绿顶栏 | 返回 + 固定标题;胶囊搜索可放在顶栏内(对齐 `MpBusinessHeader`) |
+| 2 | 业务 Tab(可选) | 仅业务有多视图/多状态时出现(如客户视图);**不是**每页必有。无业务需要时 SHALL NOT 硬塞状态 Tab(产品列表已省略) |
+| 3 | 三栏筛选 | 固定 3 格:前 2 快捷下拉 +「更多」;紧贴搜索下方 |
+| 4 | 列表区 | 扁平卡 + 条数/加载提示 + 加载更多;卡片与左右边界留白约 12px |
+| 5 | 新增 / 批量 | 管理类用右下角 Speed Dial;批量底栏仅勾选后出现 |
+
+禁止:顶栏下再堆多行「新增 / 筛选 / 刷新」工具条。
+
+### 2.2 「更多」筛选
+
+底部 Sheet 收纳该页全部筛选条件。控件能力集合:单选 Chip、模糊检索、日期/日期时间、日期区间、数值区间。单个业务页只呈现桌面端/后端已支持且可生效的字段,不得为凑控件类型伪造无效条件。
+
+底栏:重置、确定。两钮水平居中、间距清晰、适中固定宽度、触达高度 ≥ 44px;不粘连、不伸满整行。确定后回写前两栏文案;「更多」内有额外已填条件时,顶栏「更多」须有已筛提示(如「更多·已筛」或红点)。
+
+### 2.3 扁平列表卡结构(新标准,取代 expense-card)
+
+自上而下 SHALL:
+
+1. **顶行**:主标题(单行省略)+ 右侧浅底 `status-tag`;可勾选业务勾选在标题左侧。
+2. **meta 行**:弱文案摘要(如 `状态 · 编号 · 时间`),无色块底。
+3. **预览区**:少量关键字段,左右 label/value;**无灰底 / 绿底色块**。
+4. **「更多字段 / 收起」**:展开按钮上方无虚线;字段较多时提供展开。
+5. **展开区**:其余列表字段扁平 KV 行;空值显示 `—`。
+6. **虚线操作底栏**:允许多钮;同一卡片 **至多一个** 实心主色按钮(通常「查看」);危险操作用浅底危险描边,不用第二主色实心。
+
+有金额的业务(报价/合同等迁移时):金额进入 meta / 预览 / 展开之一;SHALL NOT 再强制独立「大号金额色块区」作为默认层。若需强调金额,用字号/字重,不用灰底/绿底容器。
+
+建议 class(H5):`mp-wv-card` + 业务修饰(如 `mp-customer-list-card` / `mp-product-list-card`)及 `__meta` / `__preview` / `__toggle` / `__extra` / `__row`;结构不得缺层,类名可等价映射。
+
+### 2.4 字段集原则
+
+- 移动卡字段对齐对应 PC 列表的约定可见列(或该业务已确认的固定全集)。
+- SHALL NOT 提供移动端「显示字段」勾选驱动卡片内容(客户管理已删除该能力)。
+- 字段集由产品定稿后固定。
+
+### 2.5 旧 expense-card(过渡)
+
+规范中保留简短结构说明,仅作存量对照:
+
+- 旧结构:顶行标题+Tag → 可选金额大区 → 副信息 → 灰底 KV → 时间 → 虚线底栏。
+- 权威 Demo(过渡):`shanxia-mp-crm-pl-cert-style-align-demo.html`;原生参考:备用金列表。
+- **新增与改造** SHALL 使用 §2.3 扁平卡;审查 SHALL 拒绝新建灰底 KV / 绿底强调条列表卡。
+
+### 2.6 存量映射
+
+| 模块 | 相对新标准 | 文档表述 |
+|------|------------|----------|
+| 客户管理 / 产品管理列表 | 已达标 | 参考实现 |
+| 仍使用 expense-card / 色块卡的报价、合同、危化证等 | 过渡 | 待改造;新 PR 勿再加深旧形态 |
+
+## 3. 详情、确认弹窗、附件与 Token
+
+### 3.1 独立详情页
+
+- 详情 SHALL 使用可直达、可刷新、可返回的独立路由;SHALL NOT 把主详情放入 Bottom Sheet 或桌面 `el-dialog`。
+- 绿顶栏只展示返回与固定页面标题;编号、状态、金额等业务数据下沉正文;SHALL NOT 再设票根、Hero、动态记录标题、副标题或顶栏状态等顶部特殊区。
+- 顶栏后:业务 Tab(如有)→ 分区信息卡(上标签下值或 `section` + `h3` + KV)→ 底栏主操作。
+- 审批流(有审批业务时)使用时间轴头像步骤。
+- 底栏触达 ≥ 44×44;同一层级至多一个实心主色按钮。
+
+### 3.2 确认弹窗(新纳入规范)
+
+权威示意:`bak/mobile-ui/shanxia-mp-crm-product-delete-confirm-demo.html`。
+
+| 类型 | 规格 |
+|------|------|
+| 公共外壳 | 白底圆角约 14–16px;遮罩半透明深色、无 backdrop-blur;底部**横排**取消 \| 确认,等宽、高约 40px、圆角约 10px;禁止纵向堆叠双钮 |
+| 普通确认 | 确认键三墙绿实心 `#0a9f6d` + 白字;取消白底 + `#dcebe4` 描边 |
+| 删除 / 不可恢复 | 标题区危险警示视觉;确认键危险红实心 `#dc2626` + 白字;确认文案如「确认删除」 |
+
+规范约束视觉结果;实现可采用 Vant `showConfirmDialog` + 业务 class 覆盖,不绑死具体 API。
+
+### 3.3 附件上传与回显
+
+对齐「我的发票夹」宫格:单项约 72×72、圆角 8px;图片缩略 `aspectFill`;非图片扩展名 + 文件名;编辑态角标删除 + 虚线「+」添加入口。色板走三墙 Token;SHALL NOT 使用管理端 140×96 附件卡作为 H5 主形态。
+
+### 3.4 Token 与触控
+
+- 主色链:`#0a9f6d` / `#087f57` / `#e9f9f2`;边框参考 `#dcebe4`;正文约 `#1f2a26`,辅助约 `#6b7b74`。
+- 正文约 14px,页面标题约 17px,辅助 11–12px。
+- 可见按钮可按视觉略矮,实际命中区域 SHALL ≥ 44×44。
+
+## 4. 文档落地与审查
+
+### 4.1 落地文件
+
+| 文件 | 动作 |
+|------|------|
+| 本文件 | 设计定稿 |
+| `openspec/changes/zkxw-engineering-standards/specs/ui-conventions/spec.md` | 更新「工作台 WebView 业务页」Requirement、Scenario,及文首 WebView Demo 引用 |
+| `docs/miniprogram-ui-spec-sanqiang.md` | 更新文首权威 Demo 列表与 §12 全文骨架/卡片/清单 |
+| `docs/web-admin-mp-webview-modules.md` | 必要时补一句:列表卡标准见 §12 / OpenSpec |
+
+### 4.2 Code review 检查清单(写入规范后)
+
+- [ ] Token 为三墙绿,无 `#10b981` 主色
+- [ ] 列表卡为扁平折叠范式,无新建灰底 KV / 绿底强调条
+- [ ] 权威 Demo 对照客户/产品 list-card(非仅 style-align)
+- [ ] 状态/视图 Tab 仅业务需要时出现
+- [ ] 顺序:绿顶栏(含搜索)→ 可选业务 Tab → 三栏筛选 → 扁平卡;无顶栏下多行工具条
+- [ ] 「更多」含业务实际需要的非 Chip 条件;已筛有提示
+- [ ] 确认弹窗横排;删除为危险红语义
+- [ ] 详情为独立路由、普通绿顶栏且无票根/顶部特殊区;附件为 72 宫格
+- [ ] 拒绝桌面 `el-dialog` 硬套窄屏作为主详情
+
+### 4.3 验证(文档变更)
+
+- OpenSpec 与 §12 对权威 Demo、卡片结构、Tab 可选、确认弹窗、过渡说明表述一致。
+- 文首/引用不再把 style-align 写成唯一 WebView 列表权威。
+- 存量过渡页在规范中可定位(§2.6)。
+
+## 5. 已确认对话摘要
+
+1. 以客户管理、产品管理已验收样式为标准,回写 OpenSpec / UI 规范。
+2. 权威范围选 **B**:扁平卡覆盖全部 `/m/**` 列表;expense-card 标过渡。
+3. 文档更新路径:design → OpenSpec + §12;本次不改业务代码。
diff --git a/miniprogram/graphify-out/cache/ast/00947e3cac1ac73f34cc26afdc418d44f9753d5262b9ec2b7fb619b40a6e72b8.json b/miniprogram/graphify-out/cache/ast/00947e3cac1ac73f34cc26afdc418d44f9753d5262b9ec2b7fb619b40a6e72b8.json
new file mode 100644
index 000000000..18db319aa
--- /dev/null
+++ b/miniprogram/graphify-out/cache/ast/00947e3cac1ac73f34cc26afdc418d44f9753d5262b9ec2b7fb619b40a6e72b8.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_env_js", "label": "env.js", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L1"}, {"id": "config_env_env_presets", "label": "ENV_PRESETS", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L28"}, {"id": "config_env_legacy_minio_base_prefixes", "label": "LEGACY_MINIO_BASE_PREFIXES", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L78"}, {"id": "config_env_resolveminiourl", "label": "resolveMinioUrl()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L90"}, {"id": "config_env_resolveapibase", "label": "resolveApiBase()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L121"}, {"id": "config_env_resolveweborigin", "label": "resolveWebOrigin()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L125"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_env_js", "target": "config_env_env_presets", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L28", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_env_js", "target": "config_env_legacy_minio_base_prefixes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L78", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_env_js", "target": "config_env_resolveminiourl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L90", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_env_js", "target": "config_env_resolveapibase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L121", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_env_js", "target": "config_env_resolveweborigin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L125", "weight": 1.0}], "raw_calls": [{"caller_nid": "config_env_resolveminiourl", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L91"}, {"caller_nid": "config_env_resolveminiourl", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L91"}, {"caller_nid": "config_env_resolveminiourl", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L93"}, {"caller_nid": "config_env_resolveminiourl", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L93"}, {"caller_nid": "config_env_resolveminiourl", "callee": "test", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L97"}, {"caller_nid": "config_env_resolveminiourl", "callee": "startsWith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L98"}, {"caller_nid": "config_env_resolveminiourl", "callee": "toLowerCase", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L98"}, {"caller_nid": "config_env_resolveminiourl", "callee": "toLowerCase", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L98"}, {"caller_nid": "config_env_resolveminiourl", "callee": "startsWith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L102"}, {"caller_nid": "config_env_resolveminiourl", "callee": "toLowerCase", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L102"}, {"caller_nid": "config_env_resolveminiourl", "callee": "toLowerCase", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L102"}, {"caller_nid": "config_env_resolveminiourl", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L103"}, {"caller_nid": "config_env_resolveminiourl", "callee": "slice", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L103"}, {"caller_nid": "config_env_resolveminiourl", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L110"}, {"caller_nid": "config_env_resolveminiourl", "callee": "endsWith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L111"}, {"caller_nid": "config_env_resolveminiourl", "callee": "startsWith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L111"}, {"caller_nid": "config_env_resolveminiourl", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L112"}, {"caller_nid": "config_env_resolveminiourl", "callee": "endsWith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L114"}, {"caller_nid": "config_env_resolveminiourl", "callee": "startsWith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L114"}, {"caller_nid": "config_env_resolveminiourl", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/env.js", "source_location": "L115"}]}
\ No newline at end of file
diff --git a/miniprogram/graphify-out/cache/ast/07ffac4123e50d45309977fb154786fc31d6d36407ca36fe4fbb3bc6c1264ca7.json b/miniprogram/graphify-out/cache/ast/07ffac4123e50d45309977fb154786fc31d6d36407ca36fe4fbb3bc6c1264ca7.json
new file mode 100644
index 000000000..fc3ccaa20
--- /dev/null
+++ b/miniprogram/graphify-out/cache/ast/07ffac4123e50d45309977fb154786fc31d6d36407ca36fe4fbb3bc6c1264ca7.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_workbench_menus_js", "label": "workbench-menus.js", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/workbench-menus.js", "source_location": "L1"}, {"id": "config_workbench_menus_workbench_modules", "label": "WORKBENCH_MODULES", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/workbench-menus.js", "source_location": "L6"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_workbench_menus_js", "target": "config_workbench_menus_workbench_modules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/workbench-menus.js", "source_location": "L6", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/miniprogram/graphify-out/cache/ast/0a9593d151dc2a68bb97045ccd9e1bef44c37fcd59ac0612b5246dc0a80845d2.json b/miniprogram/graphify-out/cache/ast/0a9593d151dc2a68bb97045ccd9e1bef44c37fcd59ac0612b5246dc0a80845d2.json
new file mode 100644
index 000000000..8492d0919
--- /dev/null
+++ b/miniprogram/graphify-out/cache/ast/0a9593d151dc2a68bb97045ccd9e1bef44c37fcd59ac0612b5246dc0a80845d2.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_miniprogram_utils_plvehiclerechargecopy_js", "label": "plVehicleRechargeCopy.js", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L1"}, {"id": "utils_plvehiclerechargecopy_type_labels", "label": "TYPE_LABELS", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L7"}, {"id": "utils_plvehiclerechargecopy_getplrechargetypelabel", "label": "getPlRechargeTypeLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L12"}, {"id": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "label": "buildVehicleRechargeApplyCopyText()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L16"}, {"id": "utils_plvehiclerechargecopy_copyvehiclerechargeapplytoclipboard", "label": "copyVehicleRechargeApplyToClipboard()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L37"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_utils_plvehiclerechargecopy_js", "target": "plfuelregistercopy", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_utils_plvehiclerechargecopy_js", "target": "utils_plvehiclerechargecopy_type_labels", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L7", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_utils_plvehiclerechargecopy_js", "target": "utils_plvehiclerechargecopy_getplrechargetypelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L12", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_utils_plvehiclerechargecopy_js", "target": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L16", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_utils_plvehiclerechargecopy_js", "target": "utils_plvehiclerechargecopy_copyvehiclerechargeapplytoclipboard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L37", "weight": 1.0}, {"source": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "target": "utils_plvehiclerechargecopy_getplrechargetypelabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L26", "weight": 1.0}, {"source": "utils_plvehiclerechargecopy_copyvehiclerechargeapplytoclipboard", "target": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L38", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L18"}, {"caller_nid": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L18"}, {"caller_nid": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "callee": "isFinite", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L20"}, {"caller_nid": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L20"}, {"caller_nid": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "callee": "toFixed", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L21"}, {"caller_nid": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L21"}, {"caller_nid": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L23"}, {"caller_nid": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "callee": "countPlAttachmentUrls", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L31"}, {"caller_nid": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L32"}, {"caller_nid": "utils_plvehiclerechargecopy_buildvehiclerechargeapplycopytext", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L32"}, {"caller_nid": "utils_plvehiclerechargecopy_copyvehiclerechargeapplytoclipboard", "callee": "showToast", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L40"}, {"caller_nid": "utils_plvehiclerechargecopy_copyvehiclerechargeapplytoclipboard", "callee": "resolve", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/utils/plVehicleRechargeCopy.js", "source_location": "L41"}]}
\ No newline at end of file
diff --git a/miniprogram/graphify-out/cache/ast/962b7595a8a3b1bc5898b07099784512f33d9c2f1eff46f6108e46e7b2fd83a0.json b/miniprogram/graphify-out/cache/ast/962b7595a8a3b1bc5898b07099784512f33d9c2f1eff46f6108e46e7b2fd83a0.json
new file mode 100644
index 000000000..13f33ab9c
--- /dev/null
+++ b/miniprogram/graphify-out/cache/ast/962b7595a8a3b1bc5898b07099784512f33d9c2f1eff46f6108e46e7b2fd83a0.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "label": "list.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L1"}, {"id": "vehicle_recharge_apply_list_safeareastyle", "label": "safeAreaStyle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L131"}, {"id": "vehicle_recharge_apply_list_userstore", "label": "userStore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L132"}, {"id": "vehicle_recharge_apply_list_tabs", "label": "tabs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L134"}, {"id": "vehicle_recharge_apply_list_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L143"}, {"id": "vehicle_recharge_apply_list_activetab", "label": "activeTab", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L144"}, {"id": "vehicle_recharge_apply_list_list", "label": "list", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L145"}, {"id": "vehicle_recharge_apply_list_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L146"}, {"id": "vehicle_recharge_apply_list_finished", "label": "finished", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L147"}, {"id": "vehicle_recharge_apply_list_refreshing", "label": "refreshing", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L148"}, {"id": "vehicle_recharge_apply_list_currentpage", "label": "currentPage", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L149"}, {"id": "vehicle_recharge_apply_list_listheight", "label": "listHeight", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L151"}, {"id": "vehicle_recharge_apply_list_currentuserid", "label": "currentUserId()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L153"}, {"id": "vehicle_recharge_apply_list_canwrite", "label": "canWrite()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L158"}, {"id": "vehicle_recharge_apply_list_canwithdraw", "label": "canWithdraw()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L164"}, {"id": "vehicle_recharge_apply_list_typelabel", "label": "typeLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L170"}, {"id": "vehicle_recharge_apply_list_statuslabel", "label": "statusLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L176"}, {"id": "vehicle_recharge_apply_list_statustagclass", "label": "statusTagClass()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L188"}, {"id": "vehicle_recharge_apply_list_computelistheight", "label": "computeListHeight()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L197"}, {"id": "vehicle_recharge_apply_list_fetchpage", "label": "fetchPage()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L207"}, {"id": "vehicle_recharge_apply_list_onrefresh", "label": "onRefresh()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L233"}, {"id": "vehicle_recharge_apply_list_onpullrefresh", "label": "onPullRefresh()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L241"}, {"id": "vehicle_recharge_apply_list_onloadmore", "label": "onLoadMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L248"}, {"id": "vehicle_recharge_apply_list_ontabchange", "label": "onTabChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L253"}, {"id": "vehicle_recharge_apply_list_clearkeyword", "label": "clearKeyword()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L258"}, {"id": "vehicle_recharge_apply_list_goback", "label": "goBack()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L263"}, {"id": "vehicle_recharge_apply_list_goform", "label": "goForm()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L267"}, {"id": "vehicle_recharge_apply_list_handlecopy", "label": "handleCopy()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L272"}, {"id": "vehicle_recharge_apply_list_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L276"}, {"id": "vehicle_recharge_apply_list_handlecancel", "label": "handleCancel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L294"}, {"id": "vehicle_recharge_apply_list_handlewithdraw", "label": "handleWithdraw()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L313"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "uni_app", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L124", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L125", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "pl", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L126", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "user", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L127", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "safearea", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L128", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "plvehiclerechargecopy", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L129", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_safeareastyle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L131", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_userstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_tabs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L134", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L143", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_activetab", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L144", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L145", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L146", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_finished", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_refreshing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L148", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_currentpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L149", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_listheight", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_currentuserid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L153", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_canwrite", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L158", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_canwithdraw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L164", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_typelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L170", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L176", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_statustagclass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L188", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_computelistheight", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L197", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_fetchpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L207", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_onrefresh", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L233", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_onpullrefresh", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L241", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_onloadmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L248", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_ontabchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L253", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_clearkeyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_goback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L263", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_goform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L267", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_handlecopy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L272", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_handlesubmit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L276", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_handlecancel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L294", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_list_vue", "target": "vehicle_recharge_apply_list_handlewithdraw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L313", "weight": 1.0}, {"source": "vehicle_recharge_apply_list_canwrite", "target": "vehicle_recharge_apply_list_currentuserid", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L161", "weight": 1.0}, {"source": "vehicle_recharge_apply_list_canwithdraw", "target": "vehicle_recharge_apply_list_currentuserid", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L167", "weight": 1.0}, {"source": "vehicle_recharge_apply_list_fetchpage", "target": "vehicle_recharge_apply_list_list", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L217", "weight": 1.0}, {"source": "vehicle_recharge_apply_list_onrefresh", "target": "vehicle_recharge_apply_list_fetchpage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L238", "weight": 1.0}, {"source": "vehicle_recharge_apply_list_onpullrefresh", "target": "vehicle_recharge_apply_list_fetchpage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L245", "weight": 1.0}, {"source": "vehicle_recharge_apply_list_onloadmore", "target": "vehicle_recharge_apply_list_fetchpage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L250", "weight": 1.0}, {"source": "vehicle_recharge_apply_list_ontabchange", "target": "vehicle_recharge_apply_list_onrefresh", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L255", "weight": 1.0}, {"source": "vehicle_recharge_apply_list_clearkeyword", "target": "vehicle_recharge_apply_list_onrefresh", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L260", "weight": 1.0}, {"source": "vehicle_recharge_apply_list_handlecancel", "target": "prompt_cancel_reason", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L295", "weight": 1.0}], "raw_calls": [{"caller_nid": "vehicle_recharge_apply_list_currentuserid", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L155"}, {"caller_nid": "vehicle_recharge_apply_list_canwrite", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L160"}, {"caller_nid": "vehicle_recharge_apply_list_canwrite", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L161"}, {"caller_nid": "vehicle_recharge_apply_list_canwithdraw", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L167"}, {"caller_nid": "vehicle_recharge_apply_list_computelistheight", "callee": "getSystemInfoSync", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L199"}, {"caller_nid": "vehicle_recharge_apply_list_computelistheight", "callee": "max", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L201"}, {"caller_nid": "vehicle_recharge_apply_list_fetchpage", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L216"}, {"caller_nid": "vehicle_recharge_apply_list_fetchpage", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L216"}, {"caller_nid": "vehicle_recharge_apply_list_fetchpage", "callee": "concat", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L221"}, {"caller_nid": "vehicle_recharge_apply_list_goback", "callee": "navigateBack", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L264"}, {"caller_nid": "vehicle_recharge_apply_list_goform", "callee": "navigateTo", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L269"}, {"caller_nid": "vehicle_recharge_apply_list_handlecopy", "callee": "copyVehicleRechargeApplyToClipboard", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L273"}, {"caller_nid": "vehicle_recharge_apply_list_handlesubmit", "callee": "showModal", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L277"}, {"caller_nid": "vehicle_recharge_apply_list_handlecancel", "callee": "then", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L295"}, {"caller_nid": "vehicle_recharge_apply_list_handlewithdraw", "callee": "showModal", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/list.vue", "source_location": "L314"}]}
\ No newline at end of file
diff --git a/miniprogram/graphify-out/cache/ast/977abad02b49d73b48d44906f7857447f90fab852877b0e1e31ae29d2d00a5e6.json b/miniprogram/graphify-out/cache/ast/977abad02b49d73b48d44906f7857447f90fab852877b0e1e31ae29d2d00a5e6.json
new file mode 100644
index 000000000..fc3ccaa20
--- /dev/null
+++ b/miniprogram/graphify-out/cache/ast/977abad02b49d73b48d44906f7857447f90fab852877b0e1e31ae29d2d00a5e6.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_workbench_menus_js", "label": "workbench-menus.js", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/workbench-menus.js", "source_location": "L1"}, {"id": "config_workbench_menus_workbench_modules", "label": "WORKBENCH_MODULES", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/workbench-menus.js", "source_location": "L6"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_workbench_menus_js", "target": "config_workbench_menus_workbench_modules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/workbench-menus.js", "source_location": "L6", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/miniprogram/graphify-out/cache/ast/b6f1387fb2f26b2332e9042367ac1ca16cdbbd9486c1ed330f3190236b263b39.json b/miniprogram/graphify-out/cache/ast/b6f1387fb2f26b2332e9042367ac1ca16cdbbd9486c1ed330f3190236b263b39.json
new file mode 100644
index 000000000..36fb4aec3
--- /dev/null
+++ b/miniprogram/graphify-out/cache/ast/b6f1387fb2f26b2332e9042367ac1ca16cdbbd9486c1ed330f3190236b263b39.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "label": "api.js", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L1"}, {"id": "config_api_auth_api", "label": "AUTH_API", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L36"}, {"id": "config_api_upload_api", "label": "UPLOAD_API", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L54"}, {"id": "config_api_page_paths", "label": "PAGE_PATHS", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L59"}, {"id": "config_api_workbench_route_map", "label": "WORKBENCH_ROUTE_MAP", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L98"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "target": "env", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L8", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "target": "config_api_auth_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L36", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "target": "config_api_upload_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L54", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "target": "config_api_page_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L59", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "target": "config_api_workbench_route_map", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L98", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/miniprogram/graphify-out/cache/ast/cbca4924781a4c74898414d5993b3c752a96790f6ad2ec7d8860561a449b77a9.json b/miniprogram/graphify-out/cache/ast/cbca4924781a4c74898414d5993b3c752a96790f6ad2ec7d8860561a449b77a9.json
new file mode 100644
index 000000000..55cbdbb2f
--- /dev/null
+++ b/miniprogram/graphify-out/cache/ast/cbca4924781a4c74898414d5993b3c752a96790f6ad2ec7d8860561a449b77a9.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_miniprogram_pages_pl_vehicle_recharge_apply_form_vue", "label": "form.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/pages/pl/vehicle-recharge-apply/form.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/miniprogram/graphify-out/cache/ast/d4dddabcac94dffff575ccc4b1d256f959ba351a1aedb92bb67cced460712169.json b/miniprogram/graphify-out/cache/ast/d4dddabcac94dffff575ccc4b1d256f959ba351a1aedb92bb67cced460712169.json
new file mode 100644
index 000000000..36fb4aec3
--- /dev/null
+++ b/miniprogram/graphify-out/cache/ast/d4dddabcac94dffff575ccc4b1d256f959ba351a1aedb92bb67cced460712169.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "label": "api.js", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L1"}, {"id": "config_api_auth_api", "label": "AUTH_API", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L36"}, {"id": "config_api_upload_api", "label": "UPLOAD_API", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L54"}, {"id": "config_api_page_paths", "label": "PAGE_PATHS", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L59"}, {"id": "config_api_workbench_route_map", "label": "WORKBENCH_ROUTE_MAP", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L98"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "target": "env", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L8", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "target": "config_api_auth_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L36", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "target": "config_api_upload_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L54", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "target": "config_api_page_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L59", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_miniprogram_config_api_js", "target": "config_api_workbench_route_map", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/miniprogram/config/api.js", "source_location": "L98", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/027699741883bb7814cd46501b1ed68daf71cbb002ea1e628e3df0ed979eb09f.json b/web-admin/graphify-out/cache/ast/027699741883bb7814cd46501b1ed68daf71cbb002ea1e628e3df0ed979eb09f.json
new file mode 100644
index 000000000..510af8cfd
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/027699741883bb7814cd46501b1ed68daf71cbb002ea1e628e3df0ed979eb09f.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/detail.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/036e5c4b70d414efb2a0e3aec062d4ce4036e81ca2021452ab73d3db3879bbc1.json b/web-admin/graphify-out/cache/ast/036e5c4b70d414efb2a0e3aec062d4ce4036e81ca2021452ab73d3db3879bbc1.json
new file mode 100644
index 000000000..5f452047d
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/036e5c4b70d414efb2a0e3aec062d4ce4036e81ca2021452ab73d3db3879bbc1.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1"}, {"id": "pl_plan_form_dialog_index_frominfo", "label": "fromInfo", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L663"}, {"id": "pl_plan_form_dialog_index_b64", "label": "b64", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L669"}, {"id": "pl_plan_form_dialog_index_pad", "label": "pad", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L670"}, {"id": "pl_plan_form_dialog_index_obj", "label": "obj", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L671"}, {"id": "pl_plan_form_dialog_index_d", "label": "d", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L684"}, {"id": "pl_plan_form_dialog_index_y", "label": "y", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L685"}, {"id": "pl_plan_form_dialog_index_m", "label": "m", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L686"}, {"id": "pl_plan_form_dialog_index_day", "label": "day", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L687"}, {"id": "pl_plan_form_dialog_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L864"}, {"id": "pl_plan_form_dialog_index_cids", "label": "cids", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L920"}, {"id": "pl_plan_form_dialog_index_id", "label": "id", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L990"}, {"id": "pl_plan_form_dialog_index_productrows", "label": "productRows", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L998"}, {"id": "pl_plan_form_dialog_index_allowedids", "label": "allowedIds", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L999"}, {"id": "pl_plan_form_dialog_index", "label": "[]", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1001"}, {"id": "pl_plan_form_dialog_index_parts", "label": "parts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1119"}, {"id": "pl_plan_form_dialog_index_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1123"}, {"id": "pl_plan_form_dialog_index_fromlist", "label": "fromList", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1164"}, {"id": "pl_plan_form_dialog_index_loaddefaults", "label": "loadDefaults", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1172"}, {"id": "pl_plan_form_dialog_index_defaults", "label": "defaults", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1183"}, {"id": "pl_plan_form_dialog_index_carrier", "label": "carrier", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1193"}, {"id": "pl_plan_form_dialog_index_alng", "label": "aLng", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1325"}, {"id": "pl_plan_form_dialog_index_alat", "label": "aLat", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1326"}, {"id": "pl_plan_form_dialog_index_blng", "label": "bLng", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1327"}, {"id": "pl_plan_form_dialog_index_blat", "label": "bLat", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1328"}, {"id": "pl_plan_form_dialog_index_temp", "label": "temp", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1355"}, {"id": "pl_plan_form_dialog_index_nextid", "label": "nextId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1421"}, {"id": "pl_plan_form_dialog_index_customer", "label": "customer", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1429"}, {"id": "pl_plan_form_dialog_index_legacy", "label": "legacy", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1481"}, {"id": "pl_plan_form_dialog_index_ids", "label": "ids", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1523"}, {"id": "pl_plan_form_dialog_index_previds", "label": "prevIds", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1524"}, {"id": "pl_plan_form_dialog_index_nextproducts", "label": "nextProducts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1537"}, {"id": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "label": "resolveDefaultPackageSpec()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1690"}, {"id": "pl_plan_form_dialog_index_buildrows", "label": "buildRows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1704"}, {"id": "pl_plan_form_dialog_index_cid", "label": "cid", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1736"}, {"id": "pl_plan_form_dialog_index_existingkeys", "label": "existingKeys", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1739"}, {"id": "pl_plan_form_dialog_index_pid", "label": "pid", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1744"}, {"id": "pl_plan_form_dialog_index_added", "label": "added", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1748"}, {"id": "pl_plan_form_dialog_index_nextrows", "label": "nextRows", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1775"}, {"id": "pl_plan_form_dialog_index_productid", "label": "productId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1789"}, {"id": "pl_plan_form_dialog_index_deliverymethod", "label": "deliveryMethod", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1794"}, {"id": "pl_plan_form_dialog_index_planformproductrow", "label": "PlanFormProductRow", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1795"}, {"id": "pl_plan_form_dialog_index_stops", "label": "stops", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1809"}, {"id": "pl_plan_form_dialog_index_existing", "label": "existing", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1825"}, {"id": "pl_plan_form_dialog_index_key", "label": "key", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1844"}, {"id": "pl_plan_form_dialog_index_row", "label": "row", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1890"}, {"id": "pl_plan_form_dialog_index_affiliation", "label": "affiliation", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2046"}, {"id": "pl_plan_form_dialog_index_certmessage", "label": "certMessage", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2067"}, {"id": "pl_plan_form_dialog_index_dibangselected", "label": "dibangSelected", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2076"}, {"id": "pl_plan_form_dialog_index_historical", "label": "historical", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2077"}, {"id": "pl_plan_form_dialog_index_payload", "label": "payload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2095"}, {"id": "pl_plan_form_dialog_index_drivers", "label": "drivers", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2356"}, {"id": "pl_plan_form_dialog_index_escorts", "label": "escorts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2362"}, {"id": "pl_plan_form_dialog_index_allowed", "label": "allowed", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2482"}, {"id": "pl_plan_form_dialog_index_orphan", "label": "orphan", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2489"}, {"id": "pl_plan_form_dialog_index_allowedlist", "label": "allowedList", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2503"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_frominfo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L663", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_b64", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L669", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_pad", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L670", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_obj", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L671", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_d", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L684", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_y", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L685", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_m", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L686", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_day", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L687", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L864", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_cids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L920", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L976", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L979", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L990", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_productrows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L998", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_allowedids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L999", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1001", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_parts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1119", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1123", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_fromlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1164", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_loaddefaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1172", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1183", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_carrier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1193", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_alng", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1325", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_alat", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1326", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_blng", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1327", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_blat", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1328", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_temp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1355", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_nextid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1421", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_customer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1429", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_nextid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1448", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_customer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1456", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_legacy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1481", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1523", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_previds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1524", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_allowedids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1533", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_nextproducts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1537", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1690", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_buildrows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1704", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_cid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1736", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_existingkeys", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1739", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_pid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1744", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_added", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1748", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_nextrows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1775", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_productid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1789", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_deliverymethod", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1794", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_planformproductrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1795", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_stops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1809", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_existing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1825", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_added", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1826", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1844", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1890", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1933", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_affiliation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2046", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_certmessage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2067", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_dibangselected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2076", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_historical", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2077", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2095", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_drivers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2356", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_escorts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2362", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_allowed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2482", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_orphan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2489", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_cids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2499", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_allowedlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2503", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_allowed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2504", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_orphan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2511", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2550", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2722", "weight": 1.0}, {"source": "pl_plan_form_dialog_index_buildrows", "target": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1718", "weight": 1.0}], "raw_calls": [{"caller_nid": "pl_plan_form_dialog_index_if", "callee": "isPlInternalCustomerName", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L867"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "unionContractProductIds", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L868"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "collectStopContractIds", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L870"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L977"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L980"}, {"caller_nid": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "callee": "unionContractProductRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1694"}, {"caller_nid": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "callee": "collectStopContractIds", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1696"}, {"caller_nid": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "callee": "packageSpecsForProduct", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1701"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "initLineBrandMetaFromProduct", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1707"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1708"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1711"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1712"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1715"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1720"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1721"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "enrichPlanProductLinesAlias", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1724"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "enrichPlanProductsHazardFromCrm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1725"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1727"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "createStopProductsFromPlanProducts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1727"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2551"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2723"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/0438c7b6963a0f827af71368ea461217c247748753bab91e30616dd7bf0b02e7.json b/web-admin/graphify-out/cache/ast/0438c7b6963a0f827af71368ea461217c247748753bab91e30616dd7bf0b02e7.json
new file mode 100644
index 000000000..1f0bd530c
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/0438c7b6963a0f827af71368ea461217c247748753bab91e30616dd7bf0b02e7.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L1"}, {"id": "plan_detail_el", "label": "el", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L663"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_el", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L663", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/0924983eebee4511703fbf2c5843815e571eeef9b166a87e29186da718fcd106.json b/web-admin/graphify-out/cache/ast/0924983eebee4511703fbf2c5843815e571eeef9b166a87e29186da718fcd106.json
new file mode 100644
index 000000000..f415c5e64
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/0924983eebee4511703fbf2c5843815e571eeef9b166a87e29186da718fcd106.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "label": "CustomerPoolSheet.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L1"}, {"id": "customer_customerpoolsheet_reason", "label": "reason", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L51"}, {"id": "customer_customerpoolsheet_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L52"}, {"id": "customer_customerpoolsheet_saving", "label": "saving", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L53"}, {"id": "customer_customerpoolsheet_onshow", "label": "onShow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L65"}, {"id": "customer_customerpoolsheet_close", "label": "close()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L68"}, {"id": "customer_customerpoolsheet_submit", "label": "submit()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L72"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L46", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L46", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_customer_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L47", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "target": "crm_customer_fetchintopool", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L47", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "target": "customer_customerpoolsheet_reason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L51", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "target": "customer_customerpoolsheet_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L52", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "target": "customer_customerpoolsheet_saving", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L53", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "target": "customer_customerpoolsheet_onshow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L65", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "target": "customer_customerpoolsheet_close", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L68", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "target": "customer_customerpoolsheet_submit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L72", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_customerpoolsheet_onshow", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L66"}, {"caller_nid": "customer_customerpoolsheet_close", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L69"}, {"caller_nid": "customer_customerpoolsheet_submit", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L73"}, {"caller_nid": "customer_customerpoolsheet_submit", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L77"}, {"caller_nid": "customer_customerpoolsheet_submit", "callee": "fetchIntoPool", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L82"}, {"caller_nid": "customer_customerpoolsheet_submit", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L82"}, {"caller_nid": "customer_customerpoolsheet_submit", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L83"}, {"caller_nid": "customer_customerpoolsheet_submit", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L84"}, {"caller_nid": "customer_customerpoolsheet_submit", "callee": "showSuccessToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L85"}, {"caller_nid": "customer_customerpoolsheet_submit", "callee": "toString", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerPoolSheet.vue", "source_location": "L87"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/09387e3eb194e1b46e9302d6dcc4f6435676fb1daf2ac7142092930b40530d18.json b/web-admin/graphify-out/cache/ast/09387e3eb194e1b46e9302d6dcc4f6435676fb1daf2ac7142092930b40530d18.json
new file mode 100644
index 000000000..a5cc0242d
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/09387e3eb194e1b46e9302d6dcc4f6435676fb1daf2ac7142092930b40530d18.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "label": "InvoicePanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L1"}, {"id": "customer_invoicepanel_key", "label": "key", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L248"}, {"id": "customer_invoicepanel_kw", "label": "kw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L262"}, {"id": "customer_invoicepanel_tip", "label": "tip", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L269"}, {"id": "customer_invoicepanel_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L343"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L248", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_kw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_tip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L269", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L343", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/0b2ebb3e2a703f805747c2b4dee4d0a7b689d6f3341f4e02a58481f1fbf656f9.json b/web-admin/graphify-out/cache/ast/0b2ebb3e2a703f805747c2b4dee4d0a7b689d6f3341f4e02a58481f1fbf656f9.json
new file mode 100644
index 000000000..e34fea5b3
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/0b2ebb3e2a703f805747c2b4dee4d0a7b689d6f3341f4e02a58481f1fbf656f9.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "label": "categories.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L1"}, {"id": "product_categories_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L418"}, {"id": "product_categories_payload", "label": "payload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L475"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "target": "product_categories_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L418", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "target": "product_categories_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L475", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_categories_if", "callee": "showFailToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L419"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/0ca89b3585f3f0ed7e0e26851daa8ec4c9465f3ecf8753d32e94c314d814a6c4.json b/web-admin/graphify-out/cache/ast/0ca89b3585f3f0ed7e0e26851daa8ec4c9465f3ecf8753d32e94c314d814a6c4.json
new file mode 100644
index 000000000..5d7fc0671
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/0ca89b3585f3f0ed7e0e26851daa8ec4c9465f3ecf8753d32e94c314d814a6c4.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L1"}, {"id": "quote_detail_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L695"}, {"id": "quote_detail_id", "label": "id", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L786"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "target": "quote_detail_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L695", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "target": "quote_detail_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L786", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/0e0c530925d492796addbfd5c04da9157f7c6e41751a05c66326b9b0148bc72b.json b/web-admin/graphify-out/cache/ast/0e0c530925d492796addbfd5c04da9157f7c6e41751a05c66326b9b0148bc72b.json
new file mode 100644
index 000000000..48707ba10
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/0e0c530925d492796addbfd5c04da9157f7c6e41751a05c66326b9b0148bc72b.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1"}, {"id": "contract_detail_route", "label": "route", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L480"}, {"id": "contract_detail_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L481"}, {"id": "contract_detail_userstore", "label": "userStore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L482"}, {"id": "contract_detail_dictstore", "label": "dictStore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L483"}, {"id": "contract_detail_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L485"}, {"id": "contract_detail_acting", "label": "acting", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L486"}, {"id": "contract_detail_errortext", "label": "errorText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L487"}, {"id": "contract_detail_approverpickeropen", "label": "approverPickerOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L491"}, {"id": "contract_detail_voidopen", "label": "voidOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L492"}, {"id": "contract_detail_voidreason", "label": "voidReason", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L493"}, {"id": "contract_detail_stickyoffset", "label": "stickyOffset", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L494"}, {"id": "contract_detail_scrollmargin", "label": "scrollMargin", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L496"}, {"id": "contract_detail_moreopen", "label": "moreOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L502"}, {"id": "contract_detail_submitopen", "label": "submitOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L503"}, {"id": "contract_detail_approveopen", "label": "approveOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L504"}, {"id": "contract_detail_approveopinion", "label": "approveOpinion", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L506"}, {"id": "contract_detail_isapproveentry", "label": "isApproveEntry", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L514"}, {"id": "contract_detail_resolvecurrentuserid", "label": "resolveCurrentUserId()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L516"}, {"id": "contract_detail_detailtabs", "label": "detailTabs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L533"}, {"id": "contract_detail_statuslabel", "label": "statusLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L542"}, {"id": "contract_detail_statustone", "label": "statusTone", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L547"}, {"id": "contract_detail_contracttypelabel", "label": "contractTypeLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L555"}, {"id": "contract_detail_templatelabel", "label": "templateLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L560"}, {"id": "contract_detail_settlementlabel", "label": "settlementLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L565"}, {"id": "contract_detail_approversummary", "label": "approverSummary", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L570"}, {"id": "contract_detail_daterangetext", "label": "dateRangeText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L576"}, {"id": "contract_detail_attachmentitems", "label": "attachmentItems", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L583"}, {"id": "contract_detail_approvaltimeline", "label": "approvalTimeline", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L594"}, {"id": "contract_detail_pendingapproval", "label": "pendingApproval", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L615"}, {"id": "contract_detail_canapprovenow", "label": "canApproveNow", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L634"}, {"id": "contract_detail_candelete", "label": "canDelete", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L636"}, {"id": "contract_detail_caninvalid", "label": "canInvalid", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L640"}, {"id": "contract_detail_fabactions", "label": "fabActions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L644"}, {"id": "contract_detail_primaryactions", "label": "primaryActions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L689"}, {"id": "contract_detail_moreactions", "label": "moreActions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L690"}, {"id": "contract_detail_approvesheettitle", "label": "approveSheetTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L692"}, {"id": "contract_detail_formatapproveroptionlabel", "label": "formatApproverOptionLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L696"}, {"id": "contract_detail_loaduseroptions", "label": "loadUserOptions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L703"}, {"id": "contract_detail_resolveprefillapproverids", "label": "resolvePrefillApproverIds()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L719"}, {"id": "contract_detail_loaddetail", "label": "loadDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L730"}, {"id": "contract_detail_runrouteaction", "label": "runRouteAction()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L763"}, {"id": "contract_detail_golist", "label": "goList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L773"}, {"id": "contract_detail_runaction", "label": "runAction()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L779"}, {"id": "contract_detail_opensubmitsheet", "label": "openSubmitSheet()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L824"}, {"id": "contract_detail_confirmsubmit", "label": "confirmSubmit()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L836"}, {"id": "contract_detail_goedit", "label": "goEdit()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L856"}, {"id": "contract_detail_ondelete", "label": "onDelete()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L870"}, {"id": "contract_detail_onvoid", "label": "onVoid()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L895"}, {"id": "contract_detail_confirmvoid", "label": "confirmVoid()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L901"}, {"id": "contract_detail_onrestore", "label": "onRestore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L922"}, {"id": "contract_detail_files", "label": "files", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L990"}, {"id": "contract_detail_existing", "label": "existing", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L997"}, {"id": "contract_detail_formdata", "label": "formData", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1002"}, {"id": "contract_detail_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1007"}, {"id": "contract_detail_set", "label": "set", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1064"}, {"id": "contract_detail_el", "label": "el", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1082"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpapprovaltimeline_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L423", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpattachmentgrid_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L424", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L425", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpstructskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_contract_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_getcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_listcontractapproval", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_submitcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_approvecontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_rejectcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_invalidcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_restorecontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_delcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_uploadattachments", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_getcontractapproversetting", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_contractapprovalvo", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_contractvo", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_admin_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L441", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "api_admin_fetchuploadattachment", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L441", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_admin_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L442", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "api_admin_fetchuseroptions", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L442", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L443", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_creator_delete_candeletebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L443", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_creator_delete_creator_delete_tip", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L443", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_contract_card_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L444", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_mp_crm_contract_card_formatcontractmoney", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L444", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_product_brand_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L445", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_product_brand_formatbrandconstraintlabel", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L445", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L446", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L446", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_contracttype_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L447", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_contracttype_iscontracteditablestatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L447", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_contracttype_getcontractreeditconfirmmessage", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L447", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_attachment_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L451", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_attachment_downloadcrmattachment", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L451", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_attachment_iscrmimagefile", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L451", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_attachment_opencrmattachmentpreviewinnewtab", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L451", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_attachment_parsecrmattachmentfield", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L451", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_attachment_resolvecrmattachmentfiles", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L451", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_attachment_resolvecrmattachmenturl", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L451", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_upload_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L459", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_upload_buildattachmentuploadformdata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L459", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_upload_crm_upload_biz_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L459", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L460", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_mp_webview_mp_crm_contract_approval_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L460", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_mp_webview_mp_crm_contract_list_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L460", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_user_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L461", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "modules_user_useuserstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L461", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_dict_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L462", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "modules_dict_usedictstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L462", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L463", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L464", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L480", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L481", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_userstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L482", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_dictstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L483", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L485", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_acting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L486", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_errortext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L487", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approverpickeropen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L491", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_voidopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L492", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_voidreason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L493", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_stickyoffset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L494", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_scrollmargin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L496", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_moreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L502", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_submitopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L503", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approveopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L504", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approveopinion", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L506", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_isapproveentry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L514", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_resolvecurrentuserid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L516", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_detailtabs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L533", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L542", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_statustone", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L547", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_contracttypelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L555", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_templatelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L560", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_settlementlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L565", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approversummary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L570", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_daterangetext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L576", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_attachmentitems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L583", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approvaltimeline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L594", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_pendingapproval", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L615", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_canapprovenow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L634", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_candelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L636", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_caninvalid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L640", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_fabactions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L644", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_primaryactions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L689", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_moreactions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L690", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approvesheettitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L692", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_formatapproveroptionlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L696", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_loaduseroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L703", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_resolveprefillapproverids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L719", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_loaddetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L730", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_runrouteaction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L763", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_golist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L773", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_runaction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L779", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_opensubmitsheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L824", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_confirmsubmit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L836", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_goedit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L856", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_ondelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L870", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_onvoid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L895", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_confirmvoid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L901", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_onrestore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L922", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L990", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_existing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L997", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_formdata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1002", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1007", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1064", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_el", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1082", "weight": 1.0}, {"source": "contract_detail_loaddetail", "target": "contract_detail_runrouteaction", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L760", "weight": 1.0}, {"source": "contract_detail_runrouteaction", "target": "contract_detail_runaction", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L770", "weight": 1.0}, {"source": "contract_detail_runaction", "target": "contract_detail_opensubmitsheet", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L782", "weight": 1.0}, {"source": "contract_detail_runaction", "target": "contract_detail_goedit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L786", "weight": 1.0}, {"source": "contract_detail_runaction", "target": "contract_detail_ondelete", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L790", "weight": 1.0}, {"source": "contract_detail_runaction", "target": "contract_detail_onvoid", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L794", "weight": 1.0}, {"source": "contract_detail_runaction", "target": "contract_detail_onrestore", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L798", "weight": 1.0}, {"source": "contract_detail_opensubmitsheet", "target": "contract_detail_loaduseroptions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L827", "weight": 1.0}, {"source": "contract_detail_opensubmitsheet", "target": "contract_detail_resolveprefillapproverids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L828", "weight": 1.0}, {"source": "contract_detail_confirmsubmit", "target": "contract_detail_loaddetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L848", "weight": 1.0}, {"source": "contract_detail_ondelete", "target": "contract_detail_golist", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L887", "weight": 1.0}, {"source": "contract_detail_confirmvoid", "target": "contract_detail_loaddetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L914", "weight": 1.0}, {"source": "contract_detail_onrestore", "target": "contract_detail_loaddetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L939", "weight": 1.0}], "raw_calls": [{"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L518"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L521"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L523"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L524"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L524"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "repeat", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L525"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "parse", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L526"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "atob", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L526"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L527"}, {"caller_nid": "contract_detail_formatapproveroptionlabel", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L697"}, {"caller_nid": "contract_detail_formatapproveroptionlabel", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L698"}, {"caller_nid": "contract_detail_loaduseroptions", "callee": "fetchUserOptions", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L705"}, {"caller_nid": "contract_detail_loaduseroptions", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L707"}, {"caller_nid": "contract_detail_loaduseroptions", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L707"}, {"caller_nid": "contract_detail_loaduseroptions", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L707"}, {"caller_nid": "contract_detail_resolveprefillapproverids", "callee": "getContractApproverSetting", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L721"}, {"caller_nid": "contract_detail_resolveprefillapproverids", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L722"}, {"caller_nid": "contract_detail_resolveprefillapproverids", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L723"}, {"caller_nid": "contract_detail_resolveprefillapproverids", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L724"}, {"caller_nid": "contract_detail_resolveprefillapproverids", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L724"}, {"caller_nid": "contract_detail_loaddetail", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L731"}, {"caller_nid": "contract_detail_loaddetail", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L731"}, {"caller_nid": "contract_detail_loaddetail", "callee": "getContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L739"}, {"caller_nid": "contract_detail_loaddetail", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L743"}, {"caller_nid": "contract_detail_loaddetail", "callee": "listContractApproval", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L746"}, {"caller_nid": "contract_detail_loaddetail", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L748"}, {"caller_nid": "contract_detail_runrouteaction", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L764"}, {"caller_nid": "contract_detail_runrouteaction", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L768"}, {"caller_nid": "contract_detail_runrouteaction", "callee": "some", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L769"}, {"caller_nid": "contract_detail_golist", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L774"}, {"caller_nid": "contract_detail_runaction", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L804"}, {"caller_nid": "contract_detail_runaction", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L804"}, {"caller_nid": "contract_detail_runaction", "callee": "click", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L808"}, {"caller_nid": "contract_detail_confirmsubmit", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L840"}, {"caller_nid": "contract_detail_confirmsubmit", "callee": "submitContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L845"}, {"caller_nid": "contract_detail_confirmsubmit", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L846"}, {"caller_nid": "contract_detail_confirmsubmit", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L850"}, {"caller_nid": "contract_detail_goedit", "callee": "getContractReeditConfirmMessage", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L859"}, {"caller_nid": "contract_detail_goedit", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L862"}, {"caller_nid": "contract_detail_goedit", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L867"}, {"caller_nid": "contract_detail_ondelete", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L874"}, {"caller_nid": "contract_detail_ondelete", "callee": "delContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L885"}, {"caller_nid": "contract_detail_ondelete", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L885"}, {"caller_nid": "contract_detail_ondelete", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L886"}, {"caller_nid": "contract_detail_ondelete", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L889"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L903"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L903"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L906"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "invalidContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L911"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L912"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L916"}, {"caller_nid": "contract_detail_onrestore", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L926"}, {"caller_nid": "contract_detail_onrestore", "callee": "restoreContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L937"}, {"caller_nid": "contract_detail_onrestore", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L938"}, {"caller_nid": "contract_detail_onrestore", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L941"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/0e448ae671decbff90b12d16e01043176c797ce3a28be2cdcd0a0f17b1656129.json b/web-admin/graphify-out/cache/ast/0e448ae671decbff90b12d16e01043176c797ce3a28be2cdcd0a0f17b1656129.json
new file mode 100644
index 000000000..0e7f68d8c
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/0e448ae671decbff90b12d16e01043176c797ce3a28be2cdcd0a0f17b1656129.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "label": "InvoicePanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L1"}, {"id": "customer_invoicepanel_key", "label": "key", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L236"}, {"id": "customer_invoicepanel_kw", "label": "kw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L250"}, {"id": "customer_invoicepanel_tip", "label": "tip", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L257"}, {"id": "customer_invoicepanel_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L331"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L236", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_kw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_tip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L331", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/115a3ea10def5d415f27017df5ae12db64f31f9e14c6f52ec64c04219c8b6a95.json b/web-admin/graphify-out/cache/ast/115a3ea10def5d415f27017df5ae12db64f31f9e14c6f52ec64c04219c8b6a95.json
new file mode 100644
index 000000000..5d07ba9fa
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/115a3ea10def5d415f27017df5ae12db64f31f9e14c6f52ec64c04219c8b6a95.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "label": "MpQuoteList.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L1"}, {"id": "quote_mpquotelist_text", "label": "text", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L620"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L620", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/1519cfd88314ac8d8a27ef2c501d2a695418225dcf598ea88149bd45a7ef05f6.json b/web-admin/graphify-out/cache/ast/1519cfd88314ac8d8a27ef2c501d2a695418225dcf598ea88149bd45a7ef05f6.json
new file mode 100644
index 000000000..26b661e6a
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/1519cfd88314ac8d8a27ef2c501d2a695418225dcf598ea88149bd45a7ef05f6.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1"}, {"id": "pl_plan_form_dialog_index_frominfo", "label": "fromInfo", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L676"}, {"id": "pl_plan_form_dialog_index_b64", "label": "b64", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L682"}, {"id": "pl_plan_form_dialog_index_pad", "label": "pad", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L683"}, {"id": "pl_plan_form_dialog_index_obj", "label": "obj", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L684"}, {"id": "pl_plan_form_dialog_index_d", "label": "d", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L697"}, {"id": "pl_plan_form_dialog_index_y", "label": "y", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L698"}, {"id": "pl_plan_form_dialog_index_m", "label": "m", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L699"}, {"id": "pl_plan_form_dialog_index_day", "label": "day", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L700"}, {"id": "pl_plan_form_dialog_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L877"}, {"id": "pl_plan_form_dialog_index_cids", "label": "cids", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L933"}, {"id": "pl_plan_form_dialog_index_id", "label": "id", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1003"}, {"id": "pl_plan_form_dialog_index_productrows", "label": "productRows", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1011"}, {"id": "pl_plan_form_dialog_index_allowedids", "label": "allowedIds", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1012"}, {"id": "pl_plan_form_dialog_index", "label": "[]", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1014"}, {"id": "pl_plan_form_dialog_index_parts", "label": "parts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1132"}, {"id": "pl_plan_form_dialog_index_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1136"}, {"id": "pl_plan_form_dialog_index_fromlist", "label": "fromList", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1177"}, {"id": "pl_plan_form_dialog_index_loaddefaults", "label": "loadDefaults", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1185"}, {"id": "pl_plan_form_dialog_index_defaults", "label": "defaults", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1196"}, {"id": "pl_plan_form_dialog_index_carrier", "label": "carrier", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1206"}, {"id": "pl_plan_form_dialog_index_alng", "label": "aLng", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1338"}, {"id": "pl_plan_form_dialog_index_alat", "label": "aLat", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1339"}, {"id": "pl_plan_form_dialog_index_blng", "label": "bLng", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1340"}, {"id": "pl_plan_form_dialog_index_blat", "label": "bLat", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1341"}, {"id": "pl_plan_form_dialog_index_temp", "label": "temp", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1368"}, {"id": "pl_plan_form_dialog_index_nextid", "label": "nextId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1434"}, {"id": "pl_plan_form_dialog_index_customer", "label": "customer", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1442"}, {"id": "pl_plan_form_dialog_index_legacy", "label": "legacy", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1494"}, {"id": "pl_plan_form_dialog_index_ids", "label": "ids", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1536"}, {"id": "pl_plan_form_dialog_index_previds", "label": "prevIds", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1537"}, {"id": "pl_plan_form_dialog_index_nextproducts", "label": "nextProducts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1550"}, {"id": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "label": "resolveDefaultPackageSpec()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1703"}, {"id": "pl_plan_form_dialog_index_buildrows", "label": "buildRows()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1717"}, {"id": "pl_plan_form_dialog_index_cid", "label": "cid", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1749"}, {"id": "pl_plan_form_dialog_index_existingkeys", "label": "existingKeys", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1752"}, {"id": "pl_plan_form_dialog_index_pid", "label": "pid", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1757"}, {"id": "pl_plan_form_dialog_index_added", "label": "added", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1761"}, {"id": "pl_plan_form_dialog_index_nextrows", "label": "nextRows", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1788"}, {"id": "pl_plan_form_dialog_index_productid", "label": "productId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1802"}, {"id": "pl_plan_form_dialog_index_deliverymethod", "label": "deliveryMethod", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1807"}, {"id": "pl_plan_form_dialog_index_planformproductrow", "label": "PlanFormProductRow", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1808"}, {"id": "pl_plan_form_dialog_index_stops", "label": "stops", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1822"}, {"id": "pl_plan_form_dialog_index_existing", "label": "existing", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1838"}, {"id": "pl_plan_form_dialog_index_key", "label": "key", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1857"}, {"id": "pl_plan_form_dialog_index_row", "label": "row", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1903"}, {"id": "pl_plan_form_dialog_index_affiliation", "label": "affiliation", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2059"}, {"id": "pl_plan_form_dialog_index_certmessage", "label": "certMessage", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2080"}, {"id": "pl_plan_form_dialog_index_dibangselected", "label": "dibangSelected", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2089"}, {"id": "pl_plan_form_dialog_index_historical", "label": "historical", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2090"}, {"id": "pl_plan_form_dialog_index_payload", "label": "payload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2108"}, {"id": "pl_plan_form_dialog_index_drivers", "label": "drivers", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2369"}, {"id": "pl_plan_form_dialog_index_escorts", "label": "escorts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2375"}, {"id": "pl_plan_form_dialog_index_allowed", "label": "allowed", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2495"}, {"id": "pl_plan_form_dialog_index_orphan", "label": "orphan", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2502"}, {"id": "pl_plan_form_dialog_index_allowedlist", "label": "allowedList", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2516"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_frominfo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L676", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_b64", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L682", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_pad", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L683", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_obj", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L684", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_d", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L697", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_y", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L698", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_m", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L699", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_day", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L700", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L877", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_cids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L933", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L989", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L992", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1003", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_productrows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1011", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_allowedids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1012", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1014", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_parts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_fromlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1177", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_loaddefaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1185", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1196", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_carrier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1206", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_alng", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1338", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_alat", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1339", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_blng", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1340", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_blat", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1341", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_temp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1368", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_nextid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1434", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_customer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1442", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_nextid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1461", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_customer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1469", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_legacy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1494", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1536", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_previds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1537", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_allowedids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1546", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_nextproducts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1550", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1703", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_buildrows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1717", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_cid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1749", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_existingkeys", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1752", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_pid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1757", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_added", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1761", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_nextrows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1788", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_productid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1802", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_deliverymethod", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1807", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_planformproductrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1808", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_stops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1822", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_existing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1838", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_added", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1839", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1857", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1903", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1946", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_affiliation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2059", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_certmessage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2080", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_dibangselected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2089", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_historical", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2090", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2108", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_drivers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2369", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_escorts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2375", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_allowed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2495", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_orphan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2502", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_cids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2512", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_allowedlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2516", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_allowed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2517", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_orphan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2524", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2563", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "target": "pl_plan_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2735", "weight": 1.0}, {"source": "pl_plan_form_dialog_index_buildrows", "target": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1731", "weight": 1.0}], "raw_calls": [{"caller_nid": "pl_plan_form_dialog_index_if", "callee": "isPlInternalCustomerName", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L880"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "unionContractProductIds", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L881"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "collectStopContractIds", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L883"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L990"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L993"}, {"caller_nid": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "callee": "unionContractProductRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1707"}, {"caller_nid": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "callee": "collectStopContractIds", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1709"}, {"caller_nid": "pl_plan_form_dialog_index_resolvedefaultpackagespec", "callee": "packageSpecsForProduct", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1714"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "initLineBrandMetaFromProduct", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1720"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1721"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1724"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1725"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1728"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1733"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1734"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "enrichPlanProductLinesAlias", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1737"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "enrichPlanProductsHazardFromCrm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1738"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1740"}, {"caller_nid": "pl_plan_form_dialog_index_buildrows", "callee": "createStopProductsFromPlanProducts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L1740"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2564"}, {"caller_nid": "pl_plan_form_dialog_index_if", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/pl-plan-form-dialog/index.vue", "source_location": "L2736"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/176892d2f4b582e2d25549518af0479510864653f4ef0dccb6e089d070dc76d7.json b/web-admin/graphify-out/cache/ast/176892d2f4b582e2d25549518af0479510864653f4ef0dccb6e089d070dc76d7.json
new file mode 100644
index 000000000..0f0e93d65
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/176892d2f4b582e2d25549518af0479510864653f4ef0dccb6e089d070dc76d7.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpproductselectsheet_vue", "label": "MpProductSelectSheet.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L1"}, {"id": "mp_mpproductselectsheet_raw", "label": "raw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L174"}, {"id": "mp_mpproductselectsheet_names", "label": "names", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L180"}, {"id": "mp_mpproductselectsheet_id", "label": "id", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L189"}, {"id": "mp_mpproductselectsheet_idx", "label": "idx", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L190"}, {"id": "mp_mpproductselectsheet_kw", "label": "kw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L199"}, {"id": "mp_mpproductselectsheet_name", "label": "name", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L200"}, {"id": "mp_mpproductselectsheet_model", "label": "model", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L201"}, {"id": "mp_mpproductselectsheet_fetched", "label": "fetched", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L218"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpproductselectsheet_vue", "target": "mp_mpproductselectsheet_raw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L174", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpproductselectsheet_vue", "target": "mp_mpproductselectsheet_names", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L180", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpproductselectsheet_vue", "target": "mp_mpproductselectsheet_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L189", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpproductselectsheet_vue", "target": "mp_mpproductselectsheet_idx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L190", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpproductselectsheet_vue", "target": "mp_mpproductselectsheet_kw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L199", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpproductselectsheet_vue", "target": "mp_mpproductselectsheet_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L200", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpproductselectsheet_vue", "target": "mp_mpproductselectsheet_model", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L201", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpproductselectsheet_vue", "target": "mp_mpproductselectsheet_fetched", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L218", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpproductselectsheet_vue", "target": "mp_mpproductselectsheet_kw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpProductSelectSheet.vue", "source_location": "L223", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/1a4de7417a538c8e2d4c84112a638525765cac8f63a78d0efe893bf6cdd5afa7.json b/web-admin/graphify-out/cache/ast/1a4de7417a538c8e2d4c84112a638525765cac8f63a78d0efe893bf6cdd5afa7.json
new file mode 100644
index 000000000..06aa8a975
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/1a4de7417a538c8e2d4c84112a638525765cac8f63a78d0efe893bf6cdd5afa7.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "label": "PlanCard.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L1"}, {"id": "plan_cert_plancard_loadname", "label": "loadName", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L198"}, {"id": "plan_cert_plancard_deliveryname", "label": "deliveryName", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L200"}, {"id": "plan_cert_plancard_missing", "label": "missing", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L207"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_display_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "utils_pl_display_getplplancompanylabel", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "utils_pl_display_getplplanfollowstatuslabel", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "utils_pl_display_getplplantypelabel", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "utils_pl_display_formatplvehicleplatedisplay", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "utils_pl_display_normalizeplpersonnelsummarydisplay", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_plan_list_display_rows_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L158", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "utils_pl_plan_list_display_rows_getdeliverycustomernamefromrow", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L158", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "utils_pl_plan_list_display_rows_getloadcustomernamefromrow", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L158", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "utils_pl_plan_list_display_rows_plplanlistdisplayrow", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L158", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_composables_usepltoxicproductcertcheck_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L163", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "composables_usepltoxicproductcertcheck_ishazardcertready", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L163", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "composables_usepltoxicproductcertcheck_planhashazardproducts", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L163", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "composables_usepltoxicproductcertcheck_ishazardproduct", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L163", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "composables_usepltoxicproductcertcheck_getrequiredcertslots", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L163", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L169", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "plan_cert_model_canedit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L169", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "plan_cert_plancard_loadname", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L198", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "plan_cert_plancard_deliveryname", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L200", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "target": "plan_cert_plancard_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L207", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/1af030412ad718243d1733040c8e373fca1dae271e9498fc752721cf1121006d.json b/web-admin/graphify-out/cache/ast/1af030412ad718243d1733040c8e373fca1dae271e9498fc752721cf1121006d.json
new file mode 100644
index 000000000..06d4a05ba
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/1af030412ad718243d1733040c8e373fca1dae271e9498fc752721cf1121006d.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "label": "mp-crm-product-confirm.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/1bb992e5d2cc87312ddd5d7c358e9e6a5b5c748196c2e18fcb7743ac4dcde124.json b/web-admin/graphify-out/cache/ast/1bb992e5d2cc87312ddd5d7c358e9e6a5b5c748196c2e18fcb7743ac4dcde124.json
new file mode 100644
index 000000000..b8423e0a4
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/1bb992e5d2cc87312ddd5d7c358e9e6a5b5c748196c2e18fcb7743ac4dcde124.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "label": "MpQuoteList.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L1"}, {"id": "quote_mpquotelist_text", "label": "text", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L633"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L633", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/1c007fb89db7008c1e597ebfc009f9b5158bc7d95abb9520477e3482cf2f55bb.json b/web-admin/graphify-out/cache/ast/1c007fb89db7008c1e597ebfc009f9b5158bc7d95abb9520477e3482cf2f55bb.json
new file mode 100644
index 000000000..3a64665f5
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/1c007fb89db7008c1e597ebfc009f9b5158bc7d95abb9520477e3482cf2f55bb.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "label": "categories.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L1"}, {"id": "product_categories_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L394"}, {"id": "product_categories_payload", "label": "payload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L440"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "target": "product_categories_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L394", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "target": "product_categories_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L440", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_categories_if", "callee": "showFailToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L395"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/1c196ff16f13427a42bf305403649501883ab79e7d49b997223d66e1cba92cd0.json b/web-admin/graphify-out/cache/ast/1c196ff16f13427a42bf305403649501883ab79e7d49b997223d66e1cba92cd0.json
new file mode 100644
index 000000000..e5e7e1ee3
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/1c196ff16f13427a42bf305403649501883ab79e7d49b997223d66e1cba92cd0.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "label": "test-mp-pl-plan-cert.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_pl_plan_cert_start", "label": "start()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L12"}, {"id": "scripts_test_mp_pl_plan_cert_pageerrors", "label": "pageErrors", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L27"}, {"id": "scripts_test_mp_pl_plan_cert_button", "label": "button()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L31"}, {"id": "scripts_test_mp_pl_plan_cert_card", "label": "card()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L32"}, {"id": "scripts_test_mp_pl_plan_cert_sheet", "label": "sheet()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L33"}, {"id": "scripts_test_mp_pl_plan_cert_nooverflow", "label": "noOverflow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L38"}, {"id": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "label": "assertCenteredSheetActions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L40"}, {"id": "scripts_test_mp_pl_plan_cert_waitpatch", "label": "waitPatch()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L53"}, {"id": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "label": "cleanScreenshot()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L58"}, {"id": "scripts_test_mp_pl_plan_cert_latestlist", "label": "latestList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L62"}, {"id": "scripts_test_mp_pl_plan_cert_quickdate", "label": "quickDate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L63"}, {"id": "scripts_test_mp_pl_plan_cert_quickready", "label": "quickReady()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L64"}, {"id": "scripts_test_mp_pl_plan_cert_quickmore", "label": "quickMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L65"}, {"id": "scripts_test_mp_pl_plan_cert_quickoption", "label": "quickOption()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L66"}, {"id": "scripts_test_mp_pl_plan_cert_waitlist", "label": "waitList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L68"}, {"id": "scripts_test_mp_pl_plan_cert_directdetail", "label": "directDetail", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L75"}, {"id": "scripts_test_mp_pl_plan_cert_tabs", "label": "tabs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L85"}, {"id": "scripts_test_mp_pl_plan_cert_header", "label": "header", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L87"}, {"id": "scripts_test_mp_pl_plan_cert_summary", "label": "summary", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L141"}, {"id": "scripts_test_mp_pl_plan_cert_line", "label": "line", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L159"}, {"id": "scripts_test_mp_pl_plan_cert_textbox", "label": "textBox", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L160"}, {"id": "scripts_test_mp_pl_plan_cert_linebox", "label": "lineBox", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L161"}, {"id": "scripts_test_mp_pl_plan_cert_filter", "label": "filter", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L226"}, {"id": "scripts_test_mp_pl_plan_cert_field", "label": "field()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L228"}, {"id": "scripts_test_mp_pl_plan_cert_facetcall", "label": "facetCall", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L232"}, {"id": "scripts_test_mp_pl_plan_cert_listgate", "label": "listGate", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L295"}, {"id": "scripts_test_mp_pl_plan_cert_upload", "label": "upload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L334"}, {"id": "scripts_test_mp_pl_plan_cert_certwrites", "label": "certWrites()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L376"}, {"id": "scripts_test_mp_pl_plan_cert_editattachment", "label": "editAttachment", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L389"}, {"id": "scripts_test_mp_pl_plan_cert_editdownload", "label": "editDownload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L390"}, {"id": "scripts_test_mp_pl_plan_cert_editdelete", "label": "editDelete", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L391"}, {"id": "scripts_test_mp_pl_plan_cert_preview", "label": "preview", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L411"}, {"id": "scripts_test_mp_pl_plan_cert_download", "label": "download", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L419"}, {"id": "scripts_test_mp_pl_plan_cert_detail", "label": "detail", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L439"}, {"id": "scripts_test_mp_pl_plan_cert_detailurl", "label": "detailUrl", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L465"}, {"id": "scripts_test_mp_pl_plan_cert_contract", "label": "contract", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L495"}, {"id": "scripts_test_mp_pl_plan_cert_feedbackcard", "label": "feedbackCard", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L525"}, {"id": "scripts_test_mp_pl_plan_cert_feedbackpreview", "label": "feedbackPreview", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L526"}, {"id": "scripts_test_mp_pl_plan_cert_feedbackdownload", "label": "feedbackDownload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L527"}, {"id": "scripts_test_mp_pl_plan_cert_feedbackdialog", "label": "feedbackDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L535"}, {"id": "scripts_test_mp_pl_plan_cert_feedbackfile", "label": "feedbackFile", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L542"}, {"id": "scripts_test_mp_pl_plan_cert_readonlydetail", "label": "readonlyDetail", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L613"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "playwright", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_mp_pl_plan_cert_fixture_mjs", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_mp_pl_plan_cert_fixture_installcertfixture", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_start", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L12", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_pageerrors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L27", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_button", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_card", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L32", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_sheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L33", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_nooverflow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L38", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L40", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_waitpatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L53", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L58", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_latestlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L62", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_quickdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L63", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_quickready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L64", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_quickmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L65", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_quickoption", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L66", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_waitlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L68", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_directdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L75", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_tabs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L85", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_header", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L87", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_line", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L159", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_textbox", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L160", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_linebox", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L161", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L226", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_facetcall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L232", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_listgate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L295", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_upload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L334", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_certwrites", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L376", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_editattachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L389", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_editdownload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L390", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_editdelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L391", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_preview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L411", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_download", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L419", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_detail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L439", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_detailurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L465", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_contract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L495", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_feedbackcard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L525", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_feedbackpreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L526", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_feedbackdownload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L527", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_feedbackdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L535", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_feedbackfile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L542", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_readonlydetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L613", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_button", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L31", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_sheet", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L34", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_latestlist", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L62", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_quickoption", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L67", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_field", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L229", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_certwrites", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L376", "weight": 1.0}], "raw_calls": [{"caller_nid": "scripts_test_mp_pl_plan_cert_start", "callee": "hide", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L19"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_start", "callee": "observe", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L20"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_button", "callee": "getByRole", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L31"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_card", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L32"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_sheet", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L34"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_sheet", "callee": "getByText", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L35"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_nooverflow", "callee": "ok", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L39"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_nooverflow", "callee": "evaluate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L39"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L41"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "callee": "evaluate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L42"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "callee": "equal", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L48"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "callee": "ok", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L50"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitpatch", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L54"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitpatch", "callee": "waitForResponse", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L55"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitpatch", "callee": "action", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L56"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "callee": "waitFor", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L59"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "callee": "last", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L59"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L59"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "callee": "screenshot", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L60"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_latestlist", "callee": "at", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L62"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickdate", "callee": "nth", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L63"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickdate", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L63"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickready", "callee": "nth", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L64"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickready", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L64"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickmore", "callee": "nth", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L65"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickmore", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L65"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickoption", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L67"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickoption", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L67"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitlist", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L69"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitlist", "callee": "waitForResponse", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L70"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitlist", "callee": "action", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L71"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_field", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L229"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_field", "callee": "getByText", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L229"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/1c6cc8ab0ff3042f95ed540ba909d40616bfd1d8c5aaad8bc5d01c0f1c99989f.json b/web-admin/graphify-out/cache/ast/1c6cc8ab0ff3042f95ed540ba909d40616bfd1d8c5aaad8bc5d01c0f1c99989f.json
new file mode 100644
index 000000000..697572a5d
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/1c6cc8ab0ff3042f95ed540ba909d40616bfd1d8c5aaad8bc5d01c0f1c99989f.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mppageloading_vue", "label": "MpPageLoading.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpPageLoading.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/1fa49148e8bf34f935d20e6e7180668e9dd690504bb3573f968c798f99c18fcc.json b/web-admin/graphify-out/cache/ast/1fa49148e8bf34f935d20e6e7180668e9dd690504bb3573f968c798f99c18fcc.json
new file mode 100644
index 000000000..235968944
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/1fa49148e8bf34f935d20e6e7180668e9dd690504bb3573f968c798f99c18fcc.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "label": "CertUpload.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L1"}, {"id": "plan_cert_certupload_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L73"}, {"id": "plan_cert_certupload_saving", "label": "saving", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L74"}, {"id": "plan_cert_certupload_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L75"}, {"id": "plan_cert_certupload_setuploadref", "label": "setUploadRef()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L79"}, {"id": "plan_cert_certupload_hasuploading", "label": "hasUploading()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L83"}, {"id": "plan_cert_certupload_close", "label": "close()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L86"}, {"id": "plan_cert_certupload_load", "label": "load()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L93"}, {"id": "plan_cert_certupload_save", "label": "save()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L118"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L59", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L60", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_composables_usepltoxicproductcertcheck_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L61", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "composables_usepltoxicproductcertcheck_enrichplanproductshazardfromcrm", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L61", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "composables_usepltoxicproductcertcheck_getrequiredcertslots", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L61", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "composables_usepltoxicproductcertcheck_ishazardproduct", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L61", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "composables_usepltoxicproductcertcheck_hazard_cert_ready_confirm_hint", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L61", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certattachments_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L67", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L68", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_model_canedit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L68", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_model_cansave", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L68", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_model_certpayload", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L68", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L73", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_saving", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L74", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L75", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_setuploadref", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L79", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_hasuploading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L83", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_close", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L86", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L93", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_save", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L118", "weight": 1.0}, {"source": "plan_cert_certupload_close", "target": "plan_cert_certupload_hasuploading", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L87", "weight": 1.0}, {"source": "plan_cert_certupload_save", "target": "plan_cert_certupload_hasuploading", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L119", "weight": 1.0}], "raw_calls": [{"caller_nid": "plan_cert_certupload_setuploadref", "callee": "set", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L80"}, {"caller_nid": "plan_cert_certupload_setuploadref", "callee": "delete", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L81"}, {"caller_nid": "plan_cert_certupload_hasuploading", "callee": "some", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L84"}, {"caller_nid": "plan_cert_certupload_hasuploading", "callee": "values", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L84"}, {"caller_nid": "plan_cert_certupload_close", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L88"}, {"caller_nid": "plan_cert_certupload_close", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L91"}, {"caller_nid": "plan_cert_certupload_load", "callee": "clear", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L99"}, {"caller_nid": "plan_cert_certupload_load", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L101"}, {"caller_nid": "plan_cert_certupload_load", "callee": "enrichPlanProductsHazardFromCrm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L103"}, {"caller_nid": "plan_cert_certupload_load", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L106"}, {"caller_nid": "plan_cert_certupload_load", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L106"}, {"caller_nid": "plan_cert_certupload_save", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L120"}, {"caller_nid": "plan_cert_certupload_save", "callee": "canSave", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L123"}, {"caller_nid": "plan_cert_certupload_save", "callee": "updateProductCerts", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L127"}, {"caller_nid": "plan_cert_certupload_save", "callee": "certPayload", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L127"}, {"caller_nid": "plan_cert_certupload_save", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L128"}, {"caller_nid": "plan_cert_certupload_save", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L129"}, {"caller_nid": "plan_cert_certupload_save", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L130"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/20256ebf6fe35be0e4ffcaff1344535766995f4fd6312c438e77a1aaff11f615.json b/web-admin/graphify-out/cache/ast/20256ebf6fe35be0e4ffcaff1344535766995f4fd6312c438e77a1aaff11f615.json
new file mode 100644
index 000000000..8321adc33
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/20256ebf6fe35be0e4ffcaff1344535766995f4fd6312c438e77a1aaff11f615.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "label": "QuoteFormPanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1"}, {"id": "components_quoteformpanel_props", "label": "props", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1154"}, {"id": "components_quoteformpanel_ispagevariant", "label": "isPageVariant", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1168"}, {"id": "components_quoteformpanel_userstore", "label": "userStore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1176"}, {"id": "components_quoteformpanel_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1200"}, {"id": "components_quoteformpanel_route", "label": "route", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1201"}, {"id": "components_quoteformpanel_quotetypeoptions", "label": "quoteTypeOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1203"}, {"id": "components_quoteformpanel_createdefaultform", "label": "createDefaultForm()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1211"}, {"id": "components_quoteformpanel_formtitle", "label": "formTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1234"}, {"id": "components_quoteformpanel_basiclabels", "label": "basicLabels", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1238"}, {"id": "components_quoteformpanel_customershortname", "label": "customerShortName", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1257"}, {"id": "components_quoteformpanel_rules", "label": "rules", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1260"}, {"id": "components_quoteformpanel_opportunitydisplayname", "label": "opportunityDisplayName", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1305"}, {"id": "components_quoteformpanel_saveloading", "label": "saveLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1307"}, {"id": "components_quoteformpanel_productselectorvisible", "label": "productSelectorVisible", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1310"}, {"id": "components_quoteformpanel_customerselectorvisible", "label": "customerSelectorVisible", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1314"}, {"id": "components_quoteformpanel_customeroptionsloading", "label": "customerOptionsLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1316"}, {"id": "components_quoteformpanel_shortnamedialogvisible", "label": "shortNameDialogVisible", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1319"}, {"id": "components_quoteformpanel_shortnamesaving", "label": "shortNameSaving", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1320"}, {"id": "components_quoteformpanel_shortnameform", "label": "shortNameForm", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1322"}, {"id": "components_quoteformpanel_shortnamesavedsuccessfully", "label": "shortNameSavedSuccessfully", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1331"}, {"id": "components_quoteformpanel_exists", "label": "exists", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1338"}, {"id": "components_quoteformpanel_ensurecustomeroption", "label": "ensureCustomerOption()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1406"}, {"id": "components_quoteformpanel_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1452"}, {"id": "components_quoteformpanel_contactoptionsloading", "label": "contactOptionsLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1481"}, {"id": "components_quoteformpanel_contactemptyprompted", "label": "contactEmptyPrompted", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1484"}, {"id": "components_quoteformpanel_ensurecontactoption", "label": "ensureContactOption()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1530"}, {"id": "components_quoteformpanel_subtotal", "label": "subtotal", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1644"}, {"id": "components_quoteformpanel_parsed", "label": "parsed", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1666"}, {"id": "components_quoteformpanel_ossidsarray", "label": "ossIdsArray", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1680"}, {"id": "components_quoteformpanel_ossids", "label": "ossIds", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1693"}, {"id": "components_quoteformpanel_categorymap", "label": "categoryMap", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1694"}, {"id": "components_quoteformpanel_urlitems", "label": "urlItems", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1696"}, {"id": "components_quoteformpanel_match", "label": "match", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1741"}, {"id": "components_quoteformpanel_today", "label": "today", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1824"}, {"id": "components_quoteformpanel_year", "label": "year", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1825"}, {"id": "components_quoteformpanel_month", "label": "month", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1826"}, {"id": "components_quoteformpanel_day", "label": "day", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1827"}, {"id": "components_quoteformpanel_uniqueids", "label": "uniqueIds", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1876"}, {"id": "components_quoteformpanel_kept_skippednames", "label": "{ kept, skippedNames }", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1893"}, {"id": "components_quoteformpanel_primarycontact", "label": "primaryContact", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1964"}, {"id": "components_quoteformpanel_matched", "label": "matched", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2081"}, {"id": "components_quoteformpanel_nick", "label": "nick", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2088"}, {"id": "components_quoteformpanel_account", "label": "account", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2089"}, {"id": "components_quoteformpanel_list", "label": "list", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2126"}, {"id": "components_quoteformpanel_defaultsupplier", "label": "defaultSupplier", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2135"}, {"id": "components_quoteformpanel_ddindex", "label": "ddIndex", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2181"}, {"id": "components_quoteformpanel_dateandseq", "label": "dateAndSeq", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2183"}, {"id": "components_quoteformpanel_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2282"}, {"id": "components_quoteformpanel_text", "label": "text", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2318"}, {"id": "components_quoteformpanel_value", "label": "value", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2319"}, {"id": "components_quoteformpanel_ids", "label": "ids", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2334"}, {"id": "components_quoteformpanel_user", "label": "user", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2338"}, {"id": "components_quoteformpanel_supplier", "label": "supplier", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2385"}, {"id": "components_quoteformpanel_raw", "label": "raw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2400"}, {"id": "components_quoteformpanel_current", "label": "current", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2488"}, {"id": "components_quoteformpanel_days", "label": "days", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2501"}, {"id": "components_quoteformpanel_set", "label": "set", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2507"}, {"id": "components_quoteformpanel_picked", "label": "picked", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2514"}, {"id": "components_quoteformpanel_brandmeta", "label": "brandMeta", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2546"}, {"id": "components_quoteformpanel_quoteproductform", "label": "QuoteProductForm", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2548"}, {"id": "components_quoteformpanel_cachekey", "label": "cacheKey", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2605"}, {"id": "components_quoteformpanel_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2606"}, {"id": "components_quoteformpanel_meta", "label": "meta", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2612"}, {"id": "components_quoteformpanel_ext", "label": "ext", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2735"}, {"id": "components_quoteformpanel_lastdotindex", "label": "lastDotIndex", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2743"}, {"id": "components_quoteformpanel_name", "label": "name", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2748"}, {"id": "components_quoteformpanel_index", "label": "index", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2815"}, {"id": "components_quoteformpanel_link", "label": "link", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2833"}, {"id": "components_quoteformpanel_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2871"}, {"id": "components_quoteformpanel_attachmentswithcategory", "label": "attachmentsWithCategory", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2952"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_modal_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1103", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_modal_modal", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1103", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1104", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_quote_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1105", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_getquote", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1105", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_addquote", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1105", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_updatequote", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1105", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_submitquote", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1105", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_getquoteapproversetting", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1105", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_quote_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1106", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_quoteform", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1106", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_quoteproductform", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1106", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "element_plus", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1107", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "vue_router", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1108", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_user_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1109", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "modules_user_useuserstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1109", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1110", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "icons_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1111", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_imagepreview_index_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1126", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_product_selector_index_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1127", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_product_alias_brand_dialog_index_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1128", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_dictselect_index_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1129", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_customerselector_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1130", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_contactselector_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1131", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_customer_components_contactformdialog_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_opportunityselector_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1133", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_admin_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1134", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "api_admin_fetchuseroptions", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1134", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_contact_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1135", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "crm_contact_fetchcontactsbycustomerid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1135", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_customer_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "crm_customer_fetchcustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "crm_customer_fetchupdatecustomer", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_opportunity_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1137", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "opportunity_index_listopportunity", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1137", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_supplierinfo_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1138", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "supplierinfo_index_listallsupplierinfo", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1138", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "supplierinfo_index_supplierinfovo", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1138", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_owner_candidates_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1139", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_owner_candidates_filterownercandidates", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1139", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_owner_candidates_finddefaultowneruser", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1139", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_supplier_hazard_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1140", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_supplier_hazard_removeproductsnotallowedbyhazard", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1140", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_product_brand_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_applybrandselectchange", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_applymanagedproductmetatolines", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_formatbrandconstraintlabel", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_initlinebrandmetafromproduct", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_preparelinealiasandbrandforsubmit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_resolvealiasfromsavedname", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_product_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1149", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "crm_product_fetchproductdetail", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1149", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "crm_product_fetchproductlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1149", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_quote_copy_products_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1150", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_quote_copy_products_partitionquotelinesforcopy", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1150", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "vant", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "core", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1152", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1154", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ispagevariant", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1168", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_userstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1176", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1200", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1201", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_quotetypeoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1203", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_createdefaultform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1211", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_formtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1234", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_basiclabels", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1238", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_customershortname", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1260", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_opportunitydisplayname", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1305", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_saveloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1307", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_productselectorvisible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1310", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_customerselectorvisible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1314", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_customeroptionsloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1316", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_shortnamedialogvisible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1319", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_shortnamesaving", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1320", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_shortnameform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1322", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_shortnamesavedsuccessfully", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1331", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_exists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1338", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ensurecustomeroption", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1406", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1452", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1457", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_contactoptionsloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1481", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_contactemptyprompted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1484", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_exists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1495", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1521", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ensurecontactoption", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1530", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1569", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_subtotal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1644", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_parsed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1666", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ossidsarray", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1680", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ossids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1693", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_categorymap", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1694", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_urlitems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1696", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_match", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1741", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_today", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1824", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_year", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1825", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_month", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1826", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_day", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1827", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_match", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1849", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_uniqueids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1876", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_kept_skippednames", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1893", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_primarycontact", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1964", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1986", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_matched", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2081", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_nick", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2088", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_account", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2089", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2126", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_defaultsupplier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2135", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_today", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2165", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_year", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2166", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_month", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2167", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_day", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2168", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ddindex", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2181", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_dateandseq", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2183", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2282", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2315", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2318", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2319", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2334", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_user", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2338", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_supplier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2385", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_raw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2400", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_current", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2488", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_days", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2501", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2507", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_picked", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2514", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_brandmeta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2546", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_quoteproductform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2548", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_cachekey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2605", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2606", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_meta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2612", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2700", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2735", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_lastdotindex", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2743", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2748", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2749", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_index", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2815", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_link", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2833", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2871", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_link", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2872", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2889", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_attachmentswithcategory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2952", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3000", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_attachmentswithcategory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3092", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_today", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3163", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_year", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3164", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_month", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3165", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_day", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3166", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_quoteformpanel_ensurecustomeroption", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1413"}, {"caller_nid": "components_quoteformpanel_if", "callee": "clearCustomerSelection", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1453"}, {"caller_nid": "components_quoteformpanel_ensurecontactoption", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1537"}, {"caller_nid": "components_quoteformpanel_if", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1987"}, {"caller_nid": "components_quoteformpanel_if", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1987"}, {"caller_nid": "components_quoteformpanel_if", "callee": "showFailToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1988"}, {"caller_nid": "components_quoteformpanel_if", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2701"}, {"caller_nid": "components_quoteformpanel_if", "callee": "pageMissingMessage", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2890"}, {"caller_nid": "components_quoteformpanel_if", "callee": "showFailToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2892"}, {"caller_nid": "components_quoteformpanel_if", "callee": "pageMissingMessage", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3001"}, {"caller_nid": "components_quoteformpanel_if", "callee": "showFailToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3003"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/21e8ce0739ce24a7ea10b0a42fe96f74b129c32c7f96bc3cb4b278d721873a6a.json b/web-admin/graphify-out/cache/ast/21e8ce0739ce24a7ea10b0a42fe96f74b129c32c7f96bc3cb4b278d721873a6a.json
new file mode 100644
index 000000000..3ae41bcf2
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/21e8ce0739ce24a7ea10b0a42fe96f74b129c32c7f96bc3cb4b278d721873a6a.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "label": "test-mp-crm-contract.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_crm_contract_start", "label": "start()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L17"}, {"id": "scripts_test_mp_crm_contract_pageerrors", "label": "pageErrors", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L32"}, {"id": "scripts_test_mp_crm_contract_calls", "label": "calls", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L33"}, {"id": "scripts_test_mp_crm_contract_basecontract", "label": "baseContract", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L36"}, {"id": "scripts_test_mp_crm_contract_contracts", "label": "contracts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L81"}, {"id": "scripts_test_mp_crm_contract_approvals", "label": "approvals", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L101"}, {"id": "scripts_test_mp_crm_contract_dict", "label": "dict", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L126"}, {"id": "scripts_test_mp_crm_contract_navigateback", "label": "navigateBack()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L142"}, {"id": "scripts_test_mp_crm_contract_relaunch", "label": "reLaunch()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L143"}, {"id": "scripts_test_mp_crm_contract_getenv", "label": "getEnv()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L144"}, {"id": "scripts_test_mp_crm_contract_request", "label": "request", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L152"}, {"id": "scripts_test_mp_crm_contract_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L153"}, {"id": "scripts_test_mp_crm_contract_path", "label": "path", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L155"}, {"id": "scripts_test_mp_crm_contract_body", "label": "body", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L156"}, {"id": "scripts_test_mp_crm_contract_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L164"}, {"id": "scripts_test_mp_crm_contract_ticket", "label": "ticket", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L168"}, {"id": "scripts_test_mp_crm_contract_id", "label": "id", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L210"}, {"id": "scripts_test_mp_crm_contract_click", "label": "click()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L255"}, {"id": "scripts_test_mp_crm_contract_lastcall", "label": "lastCall()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L262"}, {"id": "scripts_test_mp_crm_contract_assertnooverflow", "label": "assertNoOverflow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L264"}, {"id": "scripts_test_mp_crm_contract_boxesoverlap", "label": "boxesOverlap()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L273"}, {"id": "scripts_test_mp_crm_contract_managecards", "label": "manageCards", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L306"}, {"id": "scripts_test_mp_crm_contract_filtersheet", "label": "filterSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L321"}, {"id": "scripts_test_mp_crm_contract_searchinput", "label": "searchInput", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L343"}, {"id": "scripts_test_mp_crm_contract_selectors", "label": "selectors", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L354"}, {"id": "scripts_test_mp_crm_contract_submitsheet", "label": "submitSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L358"}, {"id": "scripts_test_mp_crm_contract_submitsuccess", "label": "submitSuccess", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L368"}, {"id": "scripts_test_mp_crm_contract_attachment", "label": "attachment", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L399"}, {"id": "scripts_test_mp_crm_contract_attachmentgeometry", "label": "attachmentGeometry", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L406"}, {"id": "scripts_test_mp_crm_contract_uploadscan", "label": "uploadScan", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L434"}, {"id": "scripts_test_mp_crm_contract_approvecards", "label": "approveCards", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L455"}, {"id": "scripts_test_mp_crm_contract_approveselectors", "label": "approveSelectors", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L461"}, {"id": "scripts_test_mp_crm_contract_batchapprovesheet", "label": "batchApproveSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L466"}, {"id": "scripts_test_mp_crm_contract_approvesheet", "label": "approveSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L507"}, {"id": "scripts_test_mp_crm_contract_confirmdialog", "label": "confirmDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L510"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "playwright", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_start", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L17", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_pageerrors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L32", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_calls", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L33", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_basecontract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L36", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_contracts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L81", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_approvals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L101", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L126", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_navigateback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_relaunch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L143", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_getenv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L144", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L152", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L153", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L155", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_body", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L156", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L164", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_ticket", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L168", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L210", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_click", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L255", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_lastcall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_assertnooverflow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L264", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_boxesoverlap", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L273", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_managecards", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L306", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_filtersheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L321", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_searchinput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L343", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_selectors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L354", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_submitsheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L358", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_submitsuccess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L368", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_attachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L399", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_attachmentgeometry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L406", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_uploadscan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L434", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_approvecards", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L455", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_approveselectors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L461", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_batchapprovesheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L466", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_approvesheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L507", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_mjs", "target": "scripts_test_mp_crm_contract_confirmdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L510", "weight": 1.0}], "raw_calls": [{"caller_nid": "scripts_test_mp_crm_contract_start", "callee": "hide", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L24"}, {"caller_nid": "scripts_test_mp_crm_contract_start", "callee": "observe", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L25"}, {"caller_nid": "scripts_test_mp_crm_contract_getenv", "callee": "callback", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L145"}, {"caller_nid": "scripts_test_mp_crm_contract_click", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L256"}, {"caller_nid": "scripts_test_mp_crm_contract_click", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L256"}, {"caller_nid": "scripts_test_mp_crm_contract_click", "callee": "or", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L256"}, {"caller_nid": "scripts_test_mp_crm_contract_click", "callee": "getByRole", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L256"}, {"caller_nid": "scripts_test_mp_crm_contract_click", "callee": "getByRole", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L258"}, {"caller_nid": "scripts_test_mp_crm_contract_lastcall", "callee": "findLast", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L262"}, {"caller_nid": "scripts_test_mp_crm_contract_assertnooverflow", "callee": "setViewportSize", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L265"}, {"caller_nid": "scripts_test_mp_crm_contract_assertnooverflow", "callee": "equal", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L266"}, {"caller_nid": "scripts_test_mp_crm_contract_assertnooverflow", "callee": "evaluate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract.mjs", "source_location": "L267"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/22b599e4595472a62134dc53b329a7c16149a32c657fefffef19448a8ce54fa3.json b/web-admin/graphify-out/cache/ast/22b599e4595472a62134dc53b329a7c16149a32c657fefffef19448a8ce54fa3.json
new file mode 100644
index 000000000..1ec66f369
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/22b599e4595472a62134dc53b329a7c16149a32c657fefffef19448a8ce54fa3.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L1"}, {"id": "product_index_path", "label": "path", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L323"}, {"id": "product_index_categorydropdownoptions", "label": "categoryDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L329"}, {"id": "product_index_modeldropdownoptions", "label": "modelDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L333"}, {"id": "product_index_moreactive", "label": "moreActive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L334"}, {"id": "product_index_cards", "label": "cards", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L335"}, {"id": "product_index_hasmore", "label": "hasMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L342"}, {"id": "product_index_ensurecategorypathmap", "label": "ensureCategoryPathMap()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L344"}, {"id": "product_index_ensuremodeloptions", "label": "ensureModelOptions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L366"}, {"id": "product_index_requestsnapshot", "label": "requestSnapshot()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L394"}, {"id": "product_index_isexpanded", "label": "isExpanded()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L404"}, {"id": "product_index_snapshot", "label": "snapshot", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L419"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L246", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_confirm_showproductconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L246", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L247", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L248", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_product_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchproductlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchcategorytree", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchproductcolumnfacetvalues", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchupdateproductstatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchdeleteproduct", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_card_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L256", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_card_buildproductlistquery", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L256", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_card_buildproductcard", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L256", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_creator_delete_candeletebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_creator_delete_creator_delete_tip", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_tree_path_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_tree_path_buildpathlabelmapfromtreeroots", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_error_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L260", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "http_error_httperror", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L260", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_status_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "http_status_apistatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_product_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L263", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L323", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_categorydropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L329", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_modeldropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L333", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_moreactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L334", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_cards", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L335", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_hasmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L342", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_ensurecategorypathmap", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L344", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_ensuremodeloptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L366", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_requestsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L394", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_isexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L404", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_snapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L419", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_index_ensurecategorypathmap", "callee": "fetchCategoryTree", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L348"}, {"caller_nid": "product_index_ensurecategorypathmap", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L351"}, {"caller_nid": "product_index_ensurecategorypathmap", "callee": "buildPathLabelMapFromTreeRoots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L352"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "fetchProductColumnFacetValues", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L370"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L372"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L379"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L379"}, {"caller_nid": "product_index_requestsnapshot", "callee": "stringify", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L395"}, {"caller_nid": "product_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L396"}, {"caller_nid": "product_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L398"}, {"caller_nid": "product_index_isexpanded", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L405"}, {"caller_nid": "product_index_isexpanded", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L405"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/22c22a9190083cc2d2bf15b30181c44edfb6dcf612ffcd2e5748d341464fcc59.json b/web-admin/graphify-out/cache/ast/22c22a9190083cc2d2bf15b30181c44edfb6dcf612ffcd2e5748d341464fcc59.json
new file mode 100644
index 000000000..1a7ee1b0b
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/22c22a9190083cc2d2bf15b30181c44edfb6dcf612ffcd2e5748d341464fcc59.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L1"}, {"id": "attachment_upload_field_index_usetiles", "label": "useTiles", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L346"}, {"id": "attachment_upload_field_index_ismppreviewtoolbar", "label": "isMpPreviewToolbar", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L347"}, {"id": "attachment_upload_field_index_mpbtnsize", "label": "mpBtnSize", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L350"}, {"id": "attachment_upload_field_index_previewvisible", "label": "previewVisible", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L355"}, {"id": "attachment_upload_field_index_previewpdfsrc", "label": "previewPdfSrc", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L357"}, {"id": "attachment_upload_field_index_previewloading", "label": "previewLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L358"}, {"id": "attachment_upload_field_index_previewzoom", "label": "previewZoom", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L362"}, {"id": "attachment_upload_field_index_previewoffsetx", "label": "previewOffsetX", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L363"}, {"id": "attachment_upload_field_index_previewoffsety", "label": "previewOffsetY", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L364"}, {"id": "attachment_upload_field_index_previewdragging", "label": "previewDragging", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L365"}, {"id": "attachment_upload_field_index_previewfitbase", "label": "previewFitBase", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L366"}, {"id": "attachment_upload_field_index_ispointerinside", "label": "isPointerInside", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L367"}, {"id": "attachment_upload_field_index_isdragover", "label": "isDragOver", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L368"}, {"id": "attachment_upload_field_index_previewiconsize", "label": "previewIconSize", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L375"}, {"id": "attachment_upload_field_index_previewtransformcss", "label": "previewTransformCss", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L380"}, {"id": "attachment_upload_field_index_previewstatustext", "label": "previewStatusText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L389"}, {"id": "attachment_upload_field_index_resolvefileurl", "label": "resolveFileUrl()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L394"}, {"id": "attachment_upload_field_index_next", "label": "next", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L425"}, {"id": "attachment_upload_field_index_current", "label": "current", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L426"}, {"id": "attachment_upload_field_index_name", "label": "name", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L434"}, {"id": "attachment_upload_field_index_type", "label": "type", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L435"}, {"id": "attachment_upload_field_index_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L451"}, {"id": "attachment_upload_field_index_accept", "label": "accept", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L481"}, {"id": "attachment_upload_field_index_file", "label": "file", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L515"}, {"id": "attachment_upload_field_index_fd", "label": "fd", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L552"}, {"id": "attachment_upload_field_index_files", "label": "files", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L639"}, {"id": "attachment_upload_field_index_uploads", "label": "uploads", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L656"}, {"id": "attachment_upload_field_index_hovered", "label": "hovered", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L662"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_usetiles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L346", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_ismppreviewtoolbar", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L347", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_mpbtnsize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L350", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewvisible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L355", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewpdfsrc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L357", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L358", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewzoom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L362", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewoffsetx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L363", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewoffsety", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L364", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewdragging", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L365", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewfitbase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L366", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_ispointerinside", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L367", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_isdragover", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L368", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewiconsize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L375", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewtransformcss", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L380", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewstatustext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L389", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_resolvefileurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L394", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_next", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L425", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_current", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L434", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L435", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L443", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L444", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L449", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L450", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L451", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_accept", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L481", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L487", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L488", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L515", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_fd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L552", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L639", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_uploads", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L656", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_hovered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L662", "weight": 1.0}], "raw_calls": [{"caller_nid": "attachment_upload_field_index_resolvefileurl", "callee": "resolvePhotoDisplayUrl", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L395"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/2352690e635ddb2ad223455b98842ec3bdc57e228d6cfc39b5a9fb703121552b.json b/web-admin/graphify-out/cache/ast/2352690e635ddb2ad223455b98842ec3bdc57e228d6cfc39b5a9fb703121552b.json
new file mode 100644
index 000000000..9167148de
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/2352690e635ddb2ad223455b98842ec3bdc57e228d6cfc39b5a9fb703121552b.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "label": "RelatedPanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L1"}, {"id": "customer_relatedpanel_dict", "label": "dict", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L332"}, {"id": "customer_relatedpanel_page", "label": "page", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L335"}, {"id": "customer_relatedpanel_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L336"}, {"id": "customer_relatedpanel_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L337"}, {"id": "customer_relatedpanel_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L338"}, {"id": "customer_relatedpanel_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L339"}, {"id": "customer_relatedpanel_quick1", "label": "quick1", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L340"}, {"id": "customer_relatedpanel_quick2", "label": "quick2", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L341"}, {"id": "customer_relatedpanel_moreopen", "label": "moreOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L342"}, {"id": "customer_relatedpanel_detailopen", "label": "detailOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L346"}, {"id": "customer_relatedpanel_detailloading", "label": "detailLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L347"}, {"id": "customer_relatedpanel_detailerror", "label": "detailError", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L348"}, {"id": "customer_relatedpanel_searchplaceholder", "label": "searchPlaceholder", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L387"}, {"id": "customer_relatedpanel_quick1options", "label": "quick1Options", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L393"}, {"id": "customer_relatedpanel_quick2options", "label": "quick2Options", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L418"}, {"id": "customer_relatedpanel_moreactive", "label": "moreActive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L444"}, {"id": "customer_relatedpanel_key", "label": "key", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L569"}, {"id": "customer_relatedpanel_issubexpanded", "label": "isSubExpanded()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L572"}, {"id": "customer_relatedpanel_togglesubexpand", "label": "toggleSubExpand()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L575"}, {"id": "customer_relatedpanel_fieldtext", "label": "fieldText()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L580"}, {"id": "customer_relatedpanel_cardtitle", "label": "cardTitle()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L590"}, {"id": "customer_relatedpanel_cardmeta", "label": "cardMeta()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L597"}, {"id": "customer_relatedpanel_cardtag", "label": "cardTag()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L606"}, {"id": "customer_relatedpanel_cardtone", "label": "cardTone()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L615"}, {"id": "customer_relatedpanel_matchquick", "label": "matchQuick()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L626"}, {"id": "customer_relatedpanel_matchkeyword", "label": "matchKeyword()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L640"}, {"id": "customer_relatedpanel_filtered", "label": "filtered", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L664"}, {"id": "customer_relatedpanel_onmoreopen", "label": "onMoreOpen()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L677"}, {"id": "customer_relatedpanel_resetmore", "label": "resetMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L682"}, {"id": "customer_relatedpanel_applymore", "label": "applyMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L685"}, {"id": "customer_relatedpanel_ondetailshow", "label": "onDetailShow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L698"}, {"id": "customer_relatedpanel_closedetail", "label": "closeDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L701"}, {"id": "customer_relatedpanel_load", "label": "load()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L705"}, {"id": "customer_relatedpanel_open", "label": "open()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L740"}, {"id": "customer_relatedpanel_refreshopportunity", "label": "refreshOpportunity()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L767"}, {"id": "customer_relatedpanel_onopportunitydeleted", "label": "onOpportunityDeleted()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L771"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpstructskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L311", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfields_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L312", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_opportunityactions_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L313", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerattachments_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L314", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L315", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "utils_creator_delete_candeletebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L315", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_opportunity_labels_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L316", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "utils_crm_opportunity_labels_opportunity_source_fallback", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L316", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "utils_crm_opportunity_labels_opportunity_type_fallback", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L316", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_opportunity_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L320", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "opportunity_index_listopportunity", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L320", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "opportunity_index_getopportunity", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L320", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "opportunity_index_listfollowbyopportunity", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L320", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "opportunity_index_getstageloglist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L320", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_contract_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L326", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "contract_index_listcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L326", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_monitor_operlog_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L327", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "operlog_index_list", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L327", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_dict_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L328", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "modules_dict_usedictstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L328", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L329", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_model_unwrapdata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L329", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_model_unwraprows", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L329", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_model_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L329", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_model_field", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L329", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L332", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L335", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L336", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L337", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L338", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L339", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_quick1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L340", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_quick2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L341", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_moreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L342", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_detailopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L346", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_detailloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L347", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_detailerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L348", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_searchplaceholder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L387", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_quick1options", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L393", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_quick2options", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L418", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_moreactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L444", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L569", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_issubexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L572", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_togglesubexpand", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L575", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_fieldtext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L580", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_cardtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L590", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_cardmeta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L597", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_cardtag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L606", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_cardtone", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L615", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_matchquick", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L626", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_matchkeyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L640", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_filtered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L664", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_onmoreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L677", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_resetmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L682", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_applymore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L685", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_ondetailshow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L698", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_closedetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L701", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L705", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_open", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L740", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_refreshopportunity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L767", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_onopportunitydeleted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L771", "weight": 1.0}, {"source": "customer_relatedpanel_refreshopportunity", "target": "customer_relatedpanel_open", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L768", "weight": 1.0}, {"source": "customer_relatedpanel_refreshopportunity", "target": "customer_relatedpanel_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L769", "weight": 1.0}, {"source": "customer_relatedpanel_onopportunitydeleted", "target": "customer_relatedpanel_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L773", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_relatedpanel_fieldtext", "callee": "getLabel", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L582"}, {"caller_nid": "customer_relatedpanel_fieldtext", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L582"}, {"caller_nid": "customer_relatedpanel_fieldtext", "callee": "find", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L584"}, {"caller_nid": "customer_relatedpanel_fieldtext", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L585"}, {"caller_nid": "customer_relatedpanel_fieldtext", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L587"}, {"caller_nid": "customer_relatedpanel_cardtitle", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L591"}, {"caller_nid": "customer_relatedpanel_cardtitle", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L593"}, {"caller_nid": "customer_relatedpanel_cardtitle", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L595"}, {"caller_nid": "customer_relatedpanel_cardtag", "callee": "getLabel", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L608"}, {"caller_nid": "customer_relatedpanel_cardtag", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L608"}, {"caller_nid": "customer_relatedpanel_cardtag", "callee": "getLabel", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L611"}, {"caller_nid": "customer_relatedpanel_cardtag", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L611"}, {"caller_nid": "customer_relatedpanel_cardtag", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L613"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L616"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L618"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L619"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L619"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L620"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L620"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L628"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L629"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L631"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L632"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L634"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L635"}, {"caller_nid": "customer_relatedpanel_matchkeyword", "callee": "toLowerCase", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L641"}, {"caller_nid": "customer_relatedpanel_matchkeyword", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L641"}, {"caller_nid": "customer_relatedpanel_matchkeyword", "callee": "some", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L644"}, {"caller_nid": "customer_relatedpanel_matchkeyword", "callee": "some", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L651"}, {"caller_nid": "customer_relatedpanel_matchkeyword", "callee": "some", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L657"}, {"caller_nid": "customer_relatedpanel_onmoreopen", "callee": "emptyMore", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L678"}, {"caller_nid": "customer_relatedpanel_onmoreopen", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L680"}, {"caller_nid": "customer_relatedpanel_resetmore", "callee": "emptyMore", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L683"}, {"caller_nid": "customer_relatedpanel_load", "callee": "listOpportunity", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L719"}, {"caller_nid": "customer_relatedpanel_load", "callee": "listContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L721"}, {"caller_nid": "customer_relatedpanel_load", "callee": "listOperLog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L722"}, {"caller_nid": "customer_relatedpanel_load", "callee": "unwrapData", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L729"}, {"caller_nid": "customer_relatedpanel_load", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L730"}, {"caller_nid": "customer_relatedpanel_load", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L730"}, {"caller_nid": "customer_relatedpanel_open", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L751"}, {"caller_nid": "customer_relatedpanel_open", "callee": "getOpportunity", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L752"}, {"caller_nid": "customer_relatedpanel_open", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L752"}, {"caller_nid": "customer_relatedpanel_open", "callee": "listFollowByOpportunity", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L753"}, {"caller_nid": "customer_relatedpanel_open", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L753"}, {"caller_nid": "customer_relatedpanel_open", "callee": "getStageLogList", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L754"}, {"caller_nid": "customer_relatedpanel_open", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L754"}, {"caller_nid": "customer_relatedpanel_open", "callee": "unwrapData", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L756"}, {"caller_nid": "customer_relatedpanel_open", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L757"}, {"caller_nid": "customer_relatedpanel_open", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L758"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/2445ad94d18a12b280007b4aa9c0170805434dbcd94128327ee0cf0cf58aa1be.json b/web-admin/graphify-out/cache/ast/2445ad94d18a12b280007b4aa9c0170805434dbcd94128327ee0cf0cf58aa1be.json
new file mode 100644
index 000000000..9205fb399
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/2445ad94d18a12b280007b4aa9c0170805434dbcd94128327ee0cf0cf58aa1be.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "label": "MpQuoteList.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L1"}, {"id": "quote_mpquotelist_userstore", "label": "userStore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L317"}, {"id": "quote_mpquotelist_dictstore", "label": "dictStore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L318"}, {"id": "quote_mpquotelist_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L320"}, {"id": "quote_mpquotelist_quotetype", "label": "quoteType", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L322"}, {"id": "quote_mpquotelist_amountrange", "label": "amountRange", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L323"}, {"id": "quote_mpquotelist_quotedatebegin", "label": "quoteDateBegin", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L324"}, {"id": "quote_mpquotelist_quotedateend", "label": "quoteDateEnd", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L325"}, {"id": "quote_mpquotelist_minamount", "label": "minAmount", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L326"}, {"id": "quote_mpquotelist_maxamount", "label": "maxAmount", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L327"}, {"id": "quote_mpquotelist_moreopen", "label": "moreOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L328"}, {"id": "quote_mpquotelist_datepickeropen", "label": "datePickerOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L337"}, {"id": "quote_mpquotelist_speedopen", "label": "speedOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L340"}, {"id": "quote_mpquotelist_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L341"}, {"id": "quote_mpquotelist_forbidden", "label": "forbidden", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L342"}, {"id": "quote_mpquotelist_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L344"}, {"id": "quote_mpquotelist_pagenum", "label": "pageNum", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L345"}, {"id": "quote_mpquotelist_quotetypeoptions", "label": "quoteTypeOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L351"}, {"id": "quote_mpquotelist_amountrangeoptions", "label": "amountRangeOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L356"}, {"id": "quote_mpquotelist_headertitle", "label": "headerTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L363"}, {"id": "quote_mpquotelist_viewtabs", "label": "viewTabs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L364"}, {"id": "quote_mpquotelist_quotetypedropdownoptions", "label": "quoteTypeDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L367"}, {"id": "quote_mpquotelist_moreactive", "label": "moreActive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L368"}, {"id": "quote_mpquotelist_cards", "label": "cards", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L376"}, {"id": "quote_mpquotelist_hasmore", "label": "hasMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L384"}, {"id": "quote_mpquotelist_loadhinttext", "label": "loadHintText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L385"}, {"id": "quote_mpquotelist_resolvecurrentuserid", "label": "resolveCurrentUserId()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L400"}, {"id": "quote_mpquotelist_statuslabel", "label": "statusLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L416"}, {"id": "quote_mpquotelist_type", "label": "type", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L422"}, {"id": "quote_mpquotelist_text", "label": "text", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L638"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L256", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mplistpageskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_quote_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_index_listquote", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "utils_mp_crm_quote_card_mp_quote_approve_tabs", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "utils_mp_crm_quote_card_mp_quote_manage_tabs", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "utils_mp_crm_quote_card_buildquotecard", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "utils_mp_crm_quote_card_buildquotelistquery", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "utils_mp_crm_quote_card_mpquotemode", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "utils_mp_crm_quote_card_mpquoteview", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_user_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L267", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "modules_user_useuserstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L267", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_dict_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L268", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "modules_dict_usedictstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L268", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "core", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L269", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L270", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L270", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_error_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L271", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "http_error_httperror", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L271", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_status_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L272", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "http_status_apistatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L272", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L273", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L274", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_quote_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L275", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_userstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L317", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_dictstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L318", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L320", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_quotetype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L322", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_amountrange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L323", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_quotedatebegin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L324", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_quotedateend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L325", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_minamount", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L326", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_maxamount", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L327", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_moreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L328", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_datepickeropen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L337", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_speedopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L340", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L341", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_forbidden", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L342", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L344", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_pagenum", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L345", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_quotetypeoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L351", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_amountrangeoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L356", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_headertitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L363", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_viewtabs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L364", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_quotetypedropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L367", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_moreactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L368", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_cards", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L376", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_hasmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L384", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_loadhinttext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L385", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_resolvecurrentuserid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L400", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L416", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L422", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "target": "quote_mpquotelist_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L638", "weight": 1.0}], "raw_calls": [{"caller_nid": "quote_mpquotelist_resolvecurrentuserid", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L402"}, {"caller_nid": "quote_mpquotelist_resolvecurrentuserid", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L405"}, {"caller_nid": "quote_mpquotelist_resolvecurrentuserid", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L407"}, {"caller_nid": "quote_mpquotelist_resolvecurrentuserid", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L408"}, {"caller_nid": "quote_mpquotelist_resolvecurrentuserid", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L408"}, {"caller_nid": "quote_mpquotelist_resolvecurrentuserid", "callee": "repeat", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L409"}, {"caller_nid": "quote_mpquotelist_resolvecurrentuserid", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L410"}, {"caller_nid": "quote_mpquotelist_resolvecurrentuserid", "callee": "parse", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L410"}, {"caller_nid": "quote_mpquotelist_resolvecurrentuserid", "callee": "atob", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L410"}, {"caller_nid": "quote_mpquotelist_statuslabel", "callee": "getLabel", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L418"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/256d2458f47eb9e8dfa04dba982b24cab9d7667030120dbd8c23019e14e107c5.json b/web-admin/graphify-out/cache/ast/256d2458f47eb9e8dfa04dba982b24cab9d7667030120dbd8c23019e14e107c5.json
new file mode 100644
index 000000000..2867939d7
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/256d2458f47eb9e8dfa04dba982b24cab9d7667030120dbd8c23019e14e107c5.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_form_vue", "label": "form.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/form.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/25e0561f3ab37169e8bfcb2df26000097312cfde69327d996fa5d350dbaae0b5.json b/web-admin/graphify-out/cache/ast/25e0561f3ab37169e8bfcb2df26000097312cfde69327d996fa5d350dbaae0b5.json
new file mode 100644
index 000000000..71e187a71
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/25e0561f3ab37169e8bfcb2df26000097312cfde69327d996fa5d350dbaae0b5.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certdetail_vue", "label": "CertDetail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertDetail.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/2898a8f5da69530d61a141cde25abe9c6b11616c254cc57b880620aea0c5a2f1.json b/web-admin/graphify-out/cache/ast/2898a8f5da69530d61a141cde25abe9c6b11616c254cc57b880620aea0c5a2f1.json
new file mode 100644
index 000000000..2ecd7364f
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/2898a8f5da69530d61a141cde25abe9c6b11616c254cc57b880620aea0c5a2f1.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1"}, {"id": "contract_detail_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L663"}, {"id": "contract_detail_id", "label": "id", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L746"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L663", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L746", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/301dd39fa89986d24b184266ac7a98a5f90f7bc622e3cfac4cc63ccd6fb1b954.json b/web-admin/graphify-out/cache/ast/301dd39fa89986d24b184266ac7a98a5f90f7bc622e3cfac4cc63ccd6fb1b954.json
new file mode 100644
index 000000000..f6149a134
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/301dd39fa89986d24b184266ac7a98a5f90f7bc622e3cfac4cc63ccd6fb1b954.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_versions_vue", "label": "versions.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/versions.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/31fcfb66a111b79fdaa74d025682a441345c7803fd9896f2a109a2c1ca4e5605.json b/web-admin/graphify-out/cache/ast/31fcfb66a111b79fdaa74d025682a441345c7803fd9896f2a109a2c1ca4e5605.json
new file mode 100644
index 000000000..d9be6a383
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/31fcfb66a111b79fdaa74d025682a441345c7803fd9896f2a109a2c1ca4e5605.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "label": "ContactPanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L1"}, {"id": "customer_contactpanel_key", "label": "key", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L224"}, {"id": "customer_contactpanel_hit", "label": "hit", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L252"}, {"id": "customer_contactpanel_kw", "label": "kw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L257"}, {"id": "customer_contactpanel_onmoreopen", "label": "onMoreOpen()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L331"}, {"id": "customer_contactpanel_resetmore", "label": "resetMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L336"}, {"id": "customer_contactpanel_applymore", "label": "applyMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L339"}, {"id": "customer_contactpanel_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L391"}, {"id": "customer_contactpanel_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L418"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L224", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_hit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L252", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_kw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_onmoreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L331", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_resetmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L336", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_applymore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L339", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L391", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L418", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_contactpanel_onmoreopen", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L334"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/32ad6b183f1737980baf5ace76d5ec091f7f082cf4ed7235f4c7099ce7817368.json b/web-admin/graphify-out/cache/ast/32ad6b183f1737980baf5ace76d5ec091f7f082cf4ed7235f4c7099ce7817368.json
new file mode 100644
index 000000000..abf634b01
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/32ad6b183f1737980baf5ace76d5ec091f7f082cf4ed7235f4c7099ce7817368.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpstructskeleton_vue", "label": "MpStructSkeleton.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpStructSkeleton.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/3489dc499c17edbd92af4a60b1cabb51ae4c0b5270f2c23f4678ebece7f685fb.json b/web-admin/graphify-out/cache/ast/3489dc499c17edbd92af4a60b1cabb51ae4c0b5270f2c23f4678ebece7f685fb.json
new file mode 100644
index 000000000..8744422ef
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/3489dc499c17edbd92af4a60b1cabb51ae4c0b5270f2c23f4678ebece7f685fb.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "label": "form.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/3573985a6a06beee6cf20e37e989aeb68b379d57e369d20f527076d54ee8ad5a.json b/web-admin/graphify-out/cache/ast/3573985a6a06beee6cf20e37e989aeb68b379d57e369d20f527076d54ee8ad5a.json
new file mode 100644
index 000000000..3ba3c9445
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/3573985a6a06beee6cf20e37e989aeb68b379d57e369d20f527076d54ee8ad5a.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "label": "form.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L1"}, {"id": "quote_form_loadingcopy", "label": "loadingCopy", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L85"}, {"id": "quote_form_onloadingchange", "label": "onLoadingChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L99"}, {"id": "quote_form_golist", "label": "goList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L103"}, {"id": "quote_form_onsuccess", "label": "onSuccess()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L107"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_loadingcopy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L85", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_onloadingchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L99", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_golist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L103", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_onsuccess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L107", "weight": 1.0}, {"source": "quote_form_onsuccess", "target": "quote_form_golist", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L112", "weight": 1.0}], "raw_calls": [{"caller_nid": "quote_form_golist", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L104"}, {"caller_nid": "quote_form_onsuccess", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L109"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/39e2b1fcd515b6f4ed626eeb502437b0d41d1e2863093c1cf0b790891a1094a6.json b/web-admin/graphify-out/cache/ast/39e2b1fcd515b6f4ed626eeb502437b0d41d1e2863093c1cf0b790891a1094a6.json
new file mode 100644
index 000000000..bceb2bec6
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/39e2b1fcd515b6f4ed626eeb502437b0d41d1e2863093c1cf0b790891a1094a6.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L1"}, {"id": "customer_index_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244"}, {"id": "customer_index_dict", "label": "dict", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L245"}, {"id": "customer_index_views", "label": "views", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L246"}, {"id": "customer_index_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L253"}, {"id": "customer_index_filtersopen", "label": "filtersOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L255"}, {"id": "customer_index_poolopen", "label": "poolOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L256"}, {"id": "customer_index_speedopen", "label": "speedOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L257"}, {"id": "customer_index_selectmode", "label": "selectMode", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L258"}, {"id": "customer_index_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L261"}, {"id": "customer_index_page", "label": "page", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L262"}, {"id": "customer_index_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L263"}, {"id": "customer_index_deleting", "label": "deleting", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L264"}, {"id": "customer_index_forbidden", "label": "forbidden", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L265"}, {"id": "customer_index_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L266"}, {"id": "customer_index_listfieldsplit", "label": "listFieldSplit", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L269"}, {"id": "customer_index_selectedrows", "label": "selectedRows", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L272"}, {"id": "customer_index_candelete", "label": "canDelete", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L275"}, {"id": "customer_index_allloadedselected", "label": "allLoadedSelected", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L278"}, {"id": "customer_index_hasmore", "label": "hasMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L282"}, {"id": "customer_index_loadhinttext", "label": "loadHintText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L283"}, {"id": "customer_index_typefilter", "label": "typeFilter", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L297"}, {"id": "customer_index_levelfilter", "label": "levelFilter", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L298"}, {"id": "customer_index_typefilteroptions", "label": "typeFilterOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L299"}, {"id": "customer_index_levelfilteroptions", "label": "levelFilterOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L306"}, {"id": "customer_index_moreactive", "label": "moreActive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L313"}, {"id": "customer_index_ontypefilterchange", "label": "onTypeFilterChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L332"}, {"id": "customer_index_onlevelfilterchange", "label": "onLevelFilterChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L337"}, {"id": "customer_index_onmoreopen", "label": "onMoreOpen()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L343"}, {"id": "customer_index_requestsnapshot", "label": "requestSnapshot()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L349"}, {"id": "customer_index_fetchpage", "label": "fetchPage()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L358"}, {"id": "customer_index_reload", "label": "reload()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L417"}, {"id": "customer_index_onshellready", "label": "onShellReady()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L421"}, {"id": "customer_index_retry", "label": "retry()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L424"}, {"id": "customer_index_schedulekeywordsearch", "label": "scheduleKeywordSearch", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L427"}, {"id": "customer_index_onkeywordupdate", "label": "onKeywordUpdate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L429"}, {"id": "customer_index_onviewchange", "label": "onViewChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L433"}, {"id": "customer_index_applyfilters", "label": "applyFilters()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L437"}, {"id": "customer_index_dictlabel", "label": "dictLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L443"}, {"id": "customer_index_displayvalue", "label": "displayValue()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L446"}, {"id": "customer_index_cardmeta", "label": "cardMeta()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L451"}, {"id": "customer_index_isexpanded", "label": "isExpanded()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L458"}, {"id": "customer_index_toggleexpand", "label": "toggleExpand()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L461"}, {"id": "customer_index_statuslabel", "label": "statusLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L469"}, {"id": "customer_index_oncardclick", "label": "onCardClick()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L477"}, {"id": "customer_index_godetail", "label": "goDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L485"}, {"id": "customer_index_goedit", "label": "goEdit()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L488"}, {"id": "customer_index_gofollow", "label": "goFollow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L491"}, {"id": "customer_index_gonew", "label": "goNew()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L494"}, {"id": "customer_index_enterselectmode", "label": "enterSelectMode()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L498"}, {"id": "customer_index_leaveselectmode", "label": "leaveSelectMode()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L502"}, {"id": "customer_index_toggleselected", "label": "toggleSelected()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L506"}, {"id": "customer_index_toggleall", "label": "toggleAll()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L512"}, {"id": "customer_index_afterbatchsuccess", "label": "afterBatchSuccess()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L515"}, {"id": "customer_index_remove", "label": "remove()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L519"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "core", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L212", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L213", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L213", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L214", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L215", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mplistpageskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_customer_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchcustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchmycustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchtofollowcustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchkeycustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchdeletecustomer", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L224", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L224", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_error_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "http_error_httperror", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_status_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L226", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "http_status_apistatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L226", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_dict_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L227", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "modules_dict_usedictstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L227", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_creator_delete_allrowsdeletablebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_creator_delete_creator_delete_tip", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L229", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L231", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_customer_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L231", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_customerlistcardmeta", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L231", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_splitcustomerlistfields", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L231", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_unwrapdata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L231", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_unwraprows", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L231", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_field", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L231", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L231", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L240", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L245", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_views", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L246", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L253", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_filtersopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L255", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_poolopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L256", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_speedopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_selectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L263", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_deleting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L264", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_forbidden", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L265", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_listfieldsplit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L269", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_selectedrows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L272", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_candelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L275", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_allloadedselected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L278", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_hasmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L282", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_loadhinttext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L283", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_typefilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L297", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_levelfilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L298", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_typefilteroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L299", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_levelfilteroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L306", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_moreactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L313", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_ontypefilterchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L332", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onlevelfilterchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L337", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onmoreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L343", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_requestsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L349", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_fetchpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L358", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_reload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L417", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onshellready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L421", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_retry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L424", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_schedulekeywordsearch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onkeywordupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L429", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onviewchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L433", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_applyfilters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L437", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_dictlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L443", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_displayvalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L446", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_cardmeta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L451", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_isexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L458", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleexpand", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L461", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L469", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_oncardclick", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L477", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_godetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L485", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_goedit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L488", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_gofollow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L491", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_gonew", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L494", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_enterselectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L498", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_leaveselectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L502", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleselected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L506", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L512", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_afterbatchsuccess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L515", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_remove", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L519", "weight": 1.0}, {"source": "customer_index_ontypefilterchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L335", "weight": 1.0}, {"source": "customer_index_onlevelfilterchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L340", "weight": 1.0}, {"source": "customer_index_fetchpage", "target": "customer_index_requestsnapshot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L362", "weight": 1.0}, {"source": "customer_index_reload", "target": "customer_index_fetchpage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L418", "weight": 1.0}, {"source": "customer_index_onshellready", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L422", "weight": 1.0}, {"source": "customer_index_retry", "target": "customer_index_fetchpage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L425", "weight": 1.0}, {"source": "customer_index_onkeywordupdate", "target": "customer_index_schedulekeywordsearch", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L431", "weight": 1.0}, {"source": "customer_index_onviewchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L435", "weight": 1.0}, {"source": "customer_index_applyfilters", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L441", "weight": 1.0}, {"source": "customer_index_displayvalue", "target": "customer_index_dictlabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L448", "weight": 1.0}, {"source": "customer_index_cardmeta", "target": "customer_index_statuslabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L453", "weight": 1.0}, {"source": "customer_index_statuslabel", "target": "customer_index_dictlabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L470", "weight": 1.0}, {"source": "customer_index_oncardclick", "target": "customer_index_toggleselected", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L480", "weight": 1.0}, {"source": "customer_index_oncardclick", "target": "customer_index_godetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L483", "weight": 1.0}, {"source": "customer_index_afterbatchsuccess", "target": "customer_index_leaveselectmode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L516", "weight": 1.0}, {"source": "customer_index_afterbatchsuccess", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L517", "weight": 1.0}, {"source": "customer_index_remove", "target": "customer_index_afterbatchsuccess", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L530", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_index_onmoreopen", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L345"}, {"caller_nid": "customer_index_requestsnapshot", "callee": "stringify", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L350"}, {"caller_nid": "customer_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L352"}, {"caller_nid": "customer_index_fetchpage", "callee": "unwrapData", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L381"}, {"caller_nid": "customer_index_fetchpage", "callee": "api", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L382"}, {"caller_nid": "customer_index_fetchpage", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L386"}, {"caller_nid": "customer_index_fetchpage", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L391"}, {"caller_nid": "customer_index_fetchpage", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L393"}, {"caller_nid": "customer_index_dictlabel", "callee": "getLabel", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L444"}, {"caller_nid": "customer_index_dictlabel", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L444"}, {"caller_nid": "customer_index_dictlabel", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L444"}, {"caller_nid": "customer_index_displayvalue", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L449"}, {"caller_nid": "customer_index_cardmeta", "callee": "customerListCardMeta", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L452"}, {"caller_nid": "customer_index_isexpanded", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L459"}, {"caller_nid": "customer_index_isexpanded", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L459"}, {"caller_nid": "customer_index_toggleexpand", "callee": "stopPropagation", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L462"}, {"caller_nid": "customer_index_toggleexpand", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L463"}, {"caller_nid": "customer_index_toggleexpand", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L465"}, {"caller_nid": "customer_index_toggleexpand", "callee": "delete", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L465"}, {"caller_nid": "customer_index_toggleexpand", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L466"}, {"caller_nid": "customer_index_oncardclick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L479"}, {"caller_nid": "customer_index_oncardclick", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L480"}, {"caller_nid": "customer_index_godetail", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L486"}, {"caller_nid": "customer_index_goedit", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L489"}, {"caller_nid": "customer_index_gofollow", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L492"}, {"caller_nid": "customer_index_gonew", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L496"}, {"caller_nid": "customer_index_toggleselected", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L507"}, {"caller_nid": "customer_index_toggleselected", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L510"}, {"caller_nid": "customer_index_toggleall", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L513"}, {"caller_nid": "customer_index_remove", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L523"}, {"caller_nid": "customer_index_remove", "callee": "fetchDeleteCustomer", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L528"}, {"caller_nid": "customer_index_remove", "callee": "showSuccessToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L529"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/3cb4f6f34aac26ac51384b23804f3b9ba958d9f784d8fe9b11ff5e34ae83c7ef.json b/web-admin/graphify-out/cache/ast/3cb4f6f34aac26ac51384b23804f3b9ba958d9f784d8fe9b11ff5e34ae83c7ef.json
new file mode 100644
index 000000000..e195c023c
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/3cb4f6f34aac26ac51384b23804f3b9ba958d9f784d8fe9b11ff5e34ae83c7ef.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "label": "ContractFormDialog.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1"}, {"id": "components_contractformdialog_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1092"}, {"id": "components_contractformdialog_exists", "label": "exists", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1175"}, {"id": "components_contractformdialog_ensurecustomeroption", "label": "ensureCustomerOption()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1243"}, {"id": "components_contractformdialog_ensurecontactoption", "label": "ensureContactOption()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1307"}, {"id": "components_contractformdialog_isfw", "label": "isFw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1554"}, {"id": "components_contractformdialog_customer", "label": "customer", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1718"}, {"id": "components_contractformdialog_fwdefaults", "label": "fwDefaults", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2059"}, {"id": "components_contractformdialog_catch", "label": "catch()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2122"}, {"id": "components_contractformdialog_supplier", "label": "supplier", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2178"}, {"id": "components_contractformdialog_allowtoxic", "label": "allowToxic", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2201"}, {"id": "components_contractformdialog_allowexplosive", "label": "allowExplosive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2202"}, {"id": "components_contractformdialog_kept_removednames", "label": "{ kept, removedNames }", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2203"}, {"id": "components_contractformdialog_partyashort", "label": "partyAShort", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2277"}, {"id": "components_contractformdialog_partybshort", "label": "partyBShort", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2278"}, {"id": "components_contractformdialog_namebody", "label": "nameBody", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2279"}, {"id": "components_contractformdialog_contractno", "label": "contractNo", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2282"}, {"id": "components_contractformdialog_nextpartya_nextpartyb", "label": "{ nextPartyA, nextPartyB }", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2324"}, {"id": "components_contractformdialog_brandmeta", "label": "brandMeta", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2439"}, {"id": "components_contractformdialog_meta", "label": "meta", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2501"}, {"id": "components_contractformdialog_index", "label": "index", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2555"}, {"id": "components_contractformdialog_price", "label": "price", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2622"}, {"id": "components_contractformdialog_quantity", "label": "quantity", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2623"}, {"id": "components_contractformdialog_taxrate", "label": "taxRate", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2624"}, {"id": "components_contractformdialog_any", "label": "any", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2667"}, {"id": "components_contractformdialog_fwpricing", "label": "fwPricing", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2696"}, {"id": "components_contractformdialog_attachmentjson", "label": "attachmentJson", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2758"}, {"id": "components_contractformdialog_expandpartiesforinvalidfields", "label": "expandPartiesForInvalidFields()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2819"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1092", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_exists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1175", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_ensurecustomeroption", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1243", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_ensurecontactoption", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1307", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1323", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_isfw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1554", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_ensurecontactoption", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1686", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_customer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1718", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1756", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1956", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2011", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_isfw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2055", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_fwdefaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2059", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_catch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2122", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_supplier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2178", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_allowtoxic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2201", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_allowexplosive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2202", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_kept_removednames", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2203", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_partyashort", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2277", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_partybshort", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2278", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_namebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2279", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_contractno", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2282", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2301", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_nextpartya_nextpartyb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2324", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2338", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2398", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2428", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_isfw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2437", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_brandmeta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2439", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_meta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2501", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_index", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2555", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_price", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2622", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_quantity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2623", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_taxrate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2624", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_any", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2667", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_fwpricing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2696", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_attachmentjson", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2758", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_any", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2759", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "target": "components_contractformdialog_expandpartiesforinvalidfields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2819", "weight": 1.0}, {"source": "components_contractformdialog_if", "target": "components_contractformdialog_ensurecustomeroption", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1757", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_contractformdialog_if", "callee": "callback", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1093"}, {"caller_nid": "components_contractformdialog_ensurecustomeroption", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1250"}, {"caller_nid": "components_contractformdialog_ensurecontactoption", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1314"}, {"caller_nid": "components_contractformdialog_if", "callee": "msgWarning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1324"}, {"caller_nid": "components_contractformdialog_if", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1763"}, {"caller_nid": "components_contractformdialog_if", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1764"}, {"caller_nid": "components_contractformdialog_if", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1765"}, {"caller_nid": "components_contractformdialog_if", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1766"}, {"caller_nid": "components_contractformdialog_if", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1767"}, {"caller_nid": "components_contractformdialog_if", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1781"}, {"caller_nid": "components_contractformdialog_if", "callee": "getDefaultInvoiceInfoByCustomerId", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1782"}, {"caller_nid": "components_contractformdialog_if", "callee": "fetchCustomerDetail", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1783"}, {"caller_nid": "components_contractformdialog_if", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1783"}, {"caller_nid": "components_contractformdialog_if", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1788"}, {"caller_nid": "components_contractformdialog_if", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1838"}, {"caller_nid": "components_contractformdialog_if", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1840"}, {"caller_nid": "components_contractformdialog_if", "callee": "loadContactOptions", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1871"}, {"caller_nid": "components_contractformdialog_if", "callee": "find", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1873"}, {"caller_nid": "components_contractformdialog_if", "callee": "handleContactConfirm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1876"}, {"caller_nid": "components_contractformdialog_if", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1880"}, {"caller_nid": "components_contractformdialog_if", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1881"}, {"caller_nid": "components_contractformdialog_if", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1885"}, {"caller_nid": "components_contractformdialog_if", "callee": "rebuildContractName", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L1887"}, {"caller_nid": "components_contractformdialog_catch", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2123"}, {"caller_nid": "components_contractformdialog_if", "callee": "forEach", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2339"}, {"caller_nid": "components_contractformdialog_if", "callee": "calculateTotalAmount", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2348"}, {"caller_nid": "components_contractformdialog_if", "callee": "setDate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2401"}, {"caller_nid": "components_contractformdialog_if", "callee": "getDate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2401"}, {"caller_nid": "components_contractformdialog_if", "callee": "formatDate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2410"}, {"caller_nid": "components_contractformdialog_if", "callee": "formatDate", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2411"}, {"caller_nid": "components_contractformdialog_if", "callee": "msgWarning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractFormDialog.vue", "source_location": "L2429"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/41306605cdfaac42548af0e74a734a5da31c3301dc7b643052f7395a4b352def.json b/web-admin/graphify-out/cache/ast/41306605cdfaac42548af0e74a734a5da31c3301dc7b643052f7395a4b352def.json
new file mode 100644
index 000000000..893017093
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/41306605cdfaac42548af0e74a734a5da31c3301dc7b643052f7395a4b352def.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L1"}, {"id": "quote_detail_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L684"}, {"id": "quote_detail_id", "label": "id", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L775"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "target": "quote_detail_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L684", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "target": "quote_detail_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L775", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/42688c1ef8b2dab275d19be69b594a26a83381987aeead2a59a11637615978a0.json b/web-admin/graphify-out/cache/ast/42688c1ef8b2dab275d19be69b594a26a83381987aeead2a59a11637615978a0.json
new file mode 100644
index 000000000..15b3039d8
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/42688c1ef8b2dab275d19be69b594a26a83381987aeead2a59a11637615978a0.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1"}, {"id": "contract_detail_route", "label": "route", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L478"}, {"id": "contract_detail_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L479"}, {"id": "contract_detail_userstore", "label": "userStore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L480"}, {"id": "contract_detail_dictstore", "label": "dictStore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L481"}, {"id": "contract_detail_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L483"}, {"id": "contract_detail_acting", "label": "acting", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L484"}, {"id": "contract_detail_errortext", "label": "errorText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L485"}, {"id": "contract_detail_approverpickeropen", "label": "approverPickerOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L489"}, {"id": "contract_detail_voidopen", "label": "voidOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L490"}, {"id": "contract_detail_voidreason", "label": "voidReason", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L491"}, {"id": "contract_detail_stickyoffset", "label": "stickyOffset", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L492"}, {"id": "contract_detail_scrollmargin", "label": "scrollMargin", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L494"}, {"id": "contract_detail_moreopen", "label": "moreOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L500"}, {"id": "contract_detail_submitopen", "label": "submitOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L501"}, {"id": "contract_detail_approveopen", "label": "approveOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L502"}, {"id": "contract_detail_approveopinion", "label": "approveOpinion", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L504"}, {"id": "contract_detail_isapproveentry", "label": "isApproveEntry", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L512"}, {"id": "contract_detail_resolvecurrentuserid", "label": "resolveCurrentUserId()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L514"}, {"id": "contract_detail_detailtabs", "label": "detailTabs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L531"}, {"id": "contract_detail_statuslabel", "label": "statusLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L540"}, {"id": "contract_detail_statustone", "label": "statusTone", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L545"}, {"id": "contract_detail_contracttypelabel", "label": "contractTypeLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L553"}, {"id": "contract_detail_templatelabel", "label": "templateLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L558"}, {"id": "contract_detail_settlementlabel", "label": "settlementLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L563"}, {"id": "contract_detail_approversummary", "label": "approverSummary", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L568"}, {"id": "contract_detail_daterangetext", "label": "dateRangeText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L574"}, {"id": "contract_detail_attachmentitems", "label": "attachmentItems", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L581"}, {"id": "contract_detail_approvaltimeline", "label": "approvalTimeline", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L592"}, {"id": "contract_detail_pendingapproval", "label": "pendingApproval", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L613"}, {"id": "contract_detail_canapprovenow", "label": "canApproveNow", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L632"}, {"id": "contract_detail_candelete", "label": "canDelete", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L634"}, {"id": "contract_detail_caninvalid", "label": "canInvalid", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L638"}, {"id": "contract_detail_fabactions", "label": "fabActions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L642"}, {"id": "contract_detail_primaryactions", "label": "primaryActions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L687"}, {"id": "contract_detail_moreactions", "label": "moreActions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L688"}, {"id": "contract_detail_approvesheettitle", "label": "approveSheetTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L690"}, {"id": "contract_detail_formatapproveroptionlabel", "label": "formatApproverOptionLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L694"}, {"id": "contract_detail_loaduseroptions", "label": "loadUserOptions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L701"}, {"id": "contract_detail_resolveprefillapproverids", "label": "resolvePrefillApproverIds()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L717"}, {"id": "contract_detail_loaddetail", "label": "loadDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L728"}, {"id": "contract_detail_runrouteaction", "label": "runRouteAction()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L761"}, {"id": "contract_detail_golist", "label": "goList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L771"}, {"id": "contract_detail_runaction", "label": "runAction()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L777"}, {"id": "contract_detail_opensubmitsheet", "label": "openSubmitSheet()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L822"}, {"id": "contract_detail_confirmsubmit", "label": "confirmSubmit()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L834"}, {"id": "contract_detail_goedit", "label": "goEdit()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L854"}, {"id": "contract_detail_ondelete", "label": "onDelete()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L868"}, {"id": "contract_detail_onvoid", "label": "onVoid()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L893"}, {"id": "contract_detail_confirmvoid", "label": "confirmVoid()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L899"}, {"id": "contract_detail_onrestore", "label": "onRestore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L920"}, {"id": "contract_detail_target", "label": "target", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L952"}, {"id": "contract_detail_attachments", "label": "attachments", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L953"}, {"id": "contract_detail_onfileschosen", "label": "onFilesChosen()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L982"}, {"id": "contract_detail_confirmapprove", "label": "confirmApprove()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1015"}, {"id": "contract_detail_toggleapprover", "label": "toggleApprover()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1057"}, {"id": "contract_detail_syncstickyoffset", "label": "syncStickyOffset()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1064"}, {"id": "contract_detail_syncactivetabfromscroll", "label": "syncActiveTabFromScroll()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1071"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpapprovaltimeline_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L422", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpattachmentgrid_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L423", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L424", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpstructskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L425", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_contract_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_getcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_listcontractapproval", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_submitcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_approvecontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_rejectcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_invalidcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_restorecontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_delcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_uploadattachments", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_getcontractapproversetting", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_contractapprovalvo", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_index_contractvo", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_admin_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L440", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "api_admin_fetchuploadattachment", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L440", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_admin_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L441", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "api_admin_fetchuseroptions", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L441", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L442", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_creator_delete_candeletebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L442", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_creator_delete_creator_delete_tip", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L442", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_contract_card_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L443", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_mp_crm_contract_card_formatcontractmoney", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L443", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_product_brand_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L444", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_product_brand_formatbrandconstraintlabel", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L444", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L445", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L445", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_contracttype_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L446", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_contracttype_iscontracteditablestatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L446", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_contracttype_getcontractreeditconfirmmessage", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L446", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_attachment_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L450", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_attachment_iscrmimagefile", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L450", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_attachment_opencrmattachmentpreviewinnewtab", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L450", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_attachment_parsecrmattachmentfield", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L450", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_attachment_resolvecrmattachmentfiles", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L450", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_attachment_resolvecrmattachmenturl", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L450", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_upload_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L457", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_upload_buildattachmentuploadformdata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L457", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_crm_upload_crm_upload_biz_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L457", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L458", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_mp_webview_mp_crm_contract_approval_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L458", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "utils_mp_webview_mp_crm_contract_list_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L458", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_user_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L459", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "modules_user_useuserstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L459", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_dict_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L460", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "modules_dict_usedictstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L460", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L461", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L462", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L478", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L479", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_userstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L480", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_dictstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L481", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L483", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_acting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L484", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_errortext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L485", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approverpickeropen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L489", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_voidopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L490", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_voidreason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L491", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_stickyoffset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L492", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_scrollmargin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L494", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_moreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L500", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_submitopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L501", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approveopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L502", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approveopinion", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L504", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_isapproveentry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L512", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_resolvecurrentuserid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L514", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_detailtabs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L531", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L540", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_statustone", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L545", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_contracttypelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L553", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_templatelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L558", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_settlementlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L563", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approversummary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L568", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_daterangetext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L574", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_attachmentitems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L581", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approvaltimeline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L592", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_pendingapproval", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L613", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_canapprovenow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L632", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_candelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L634", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_caninvalid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L638", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_fabactions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L642", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_primaryactions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L687", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_moreactions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L688", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_approvesheettitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L690", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_formatapproveroptionlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L694", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_loaduseroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L701", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_resolveprefillapproverids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L717", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_loaddetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L728", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_runrouteaction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L761", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_golist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L771", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_runaction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L777", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_opensubmitsheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L822", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_confirmsubmit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L834", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_goedit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L854", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_ondelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L868", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_onvoid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L893", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_confirmvoid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L899", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_onrestore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L920", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_target", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L952", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_attachments", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L953", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_onfileschosen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L982", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_confirmapprove", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1015", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_toggleapprover", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1057", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_syncstickyoffset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1064", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_detail_vue", "target": "contract_detail_syncactivetabfromscroll", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1071", "weight": 1.0}, {"source": "contract_detail_loaddetail", "target": "contract_detail_runrouteaction", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L758", "weight": 1.0}, {"source": "contract_detail_runrouteaction", "target": "contract_detail_runaction", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L768", "weight": 1.0}, {"source": "contract_detail_runaction", "target": "contract_detail_opensubmitsheet", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L780", "weight": 1.0}, {"source": "contract_detail_runaction", "target": "contract_detail_goedit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L784", "weight": 1.0}, {"source": "contract_detail_runaction", "target": "contract_detail_ondelete", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L788", "weight": 1.0}, {"source": "contract_detail_runaction", "target": "contract_detail_onvoid", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L792", "weight": 1.0}, {"source": "contract_detail_runaction", "target": "contract_detail_onrestore", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L796", "weight": 1.0}, {"source": "contract_detail_opensubmitsheet", "target": "contract_detail_loaduseroptions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L825", "weight": 1.0}, {"source": "contract_detail_opensubmitsheet", "target": "contract_detail_resolveprefillapproverids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L826", "weight": 1.0}, {"source": "contract_detail_confirmsubmit", "target": "contract_detail_loaddetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L846", "weight": 1.0}, {"source": "contract_detail_ondelete", "target": "contract_detail_golist", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L885", "weight": 1.0}, {"source": "contract_detail_confirmvoid", "target": "contract_detail_loaddetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L912", "weight": 1.0}, {"source": "contract_detail_onrestore", "target": "contract_detail_loaddetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L937", "weight": 1.0}, {"source": "contract_detail_onfileschosen", "target": "contract_detail_loaddetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1006", "weight": 1.0}, {"source": "contract_detail_confirmapprove", "target": "contract_detail_loaddetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1049", "weight": 1.0}], "raw_calls": [{"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L516"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L519"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L521"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L522"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L522"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "repeat", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L523"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "parse", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L524"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "atob", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L524"}, {"caller_nid": "contract_detail_resolvecurrentuserid", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L525"}, {"caller_nid": "contract_detail_formatapproveroptionlabel", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L695"}, {"caller_nid": "contract_detail_formatapproveroptionlabel", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L696"}, {"caller_nid": "contract_detail_loaduseroptions", "callee": "fetchUserOptions", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L703"}, {"caller_nid": "contract_detail_loaduseroptions", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L705"}, {"caller_nid": "contract_detail_loaduseroptions", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L705"}, {"caller_nid": "contract_detail_loaduseroptions", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L705"}, {"caller_nid": "contract_detail_resolveprefillapproverids", "callee": "getContractApproverSetting", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L719"}, {"caller_nid": "contract_detail_resolveprefillapproverids", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L720"}, {"caller_nid": "contract_detail_resolveprefillapproverids", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L721"}, {"caller_nid": "contract_detail_resolveprefillapproverids", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L722"}, {"caller_nid": "contract_detail_resolveprefillapproverids", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L722"}, {"caller_nid": "contract_detail_loaddetail", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L729"}, {"caller_nid": "contract_detail_loaddetail", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L729"}, {"caller_nid": "contract_detail_loaddetail", "callee": "getContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L737"}, {"caller_nid": "contract_detail_loaddetail", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L741"}, {"caller_nid": "contract_detail_loaddetail", "callee": "listContractApproval", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L744"}, {"caller_nid": "contract_detail_loaddetail", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L746"}, {"caller_nid": "contract_detail_runrouteaction", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L762"}, {"caller_nid": "contract_detail_runrouteaction", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L766"}, {"caller_nid": "contract_detail_runrouteaction", "callee": "some", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L767"}, {"caller_nid": "contract_detail_golist", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L772"}, {"caller_nid": "contract_detail_runaction", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L802"}, {"caller_nid": "contract_detail_runaction", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L802"}, {"caller_nid": "contract_detail_runaction", "callee": "click", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L806"}, {"caller_nid": "contract_detail_confirmsubmit", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L838"}, {"caller_nid": "contract_detail_confirmsubmit", "callee": "submitContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L843"}, {"caller_nid": "contract_detail_confirmsubmit", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L844"}, {"caller_nid": "contract_detail_confirmsubmit", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L848"}, {"caller_nid": "contract_detail_goedit", "callee": "getContractReeditConfirmMessage", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L857"}, {"caller_nid": "contract_detail_goedit", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L860"}, {"caller_nid": "contract_detail_goedit", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L865"}, {"caller_nid": "contract_detail_ondelete", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L872"}, {"caller_nid": "contract_detail_ondelete", "callee": "delContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L883"}, {"caller_nid": "contract_detail_ondelete", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L883"}, {"caller_nid": "contract_detail_ondelete", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L884"}, {"caller_nid": "contract_detail_ondelete", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L887"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L901"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L901"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L904"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "invalidContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L909"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L910"}, {"caller_nid": "contract_detail_confirmvoid", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L914"}, {"caller_nid": "contract_detail_onrestore", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L924"}, {"caller_nid": "contract_detail_onrestore", "callee": "restoreContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L935"}, {"caller_nid": "contract_detail_onrestore", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L936"}, {"caller_nid": "contract_detail_onrestore", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L939"}, {"caller_nid": "contract_detail_onfileschosen", "callee": "from", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L984"}, {"caller_nid": "contract_detail_onfileschosen", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L991"}, {"caller_nid": "contract_detail_onfileschosen", "callee": "parseCrmAttachmentField", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L991"}, {"caller_nid": "contract_detail_onfileschosen", "callee": "buildAttachmentUploadFormData", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L996"}, {"caller_nid": "contract_detail_onfileschosen", "callee": "fetchUploadAttachment", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L999"}, {"caller_nid": "contract_detail_onfileschosen", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1001"}, {"caller_nid": "contract_detail_onfileschosen", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1002"}, {"caller_nid": "contract_detail_onfileschosen", "callee": "uploadAttachments", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1004"}, {"caller_nid": "contract_detail_onfileschosen", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1005"}, {"caller_nid": "contract_detail_onfileschosen", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1009"}, {"caller_nid": "contract_detail_confirmapprove", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1018"}, {"caller_nid": "contract_detail_confirmapprove", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1021"}, {"caller_nid": "contract_detail_confirmapprove", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1022"}, {"caller_nid": "contract_detail_confirmapprove", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1027"}, {"caller_nid": "contract_detail_confirmapprove", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1041"}, {"caller_nid": "contract_detail_confirmapprove", "callee": "rejectContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1043"}, {"caller_nid": "contract_detail_confirmapprove", "callee": "approveContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1045"}, {"caller_nid": "contract_detail_confirmapprove", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1047"}, {"caller_nid": "contract_detail_confirmapprove", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1051"}, {"caller_nid": "contract_detail_toggleapprover", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1059"}, {"caller_nid": "contract_detail_toggleapprover", "callee": "delete", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1059"}, {"caller_nid": "contract_detail_toggleapprover", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1060"}, {"caller_nid": "contract_detail_syncstickyoffset", "callee": "querySelector", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1065"}, {"caller_nid": "contract_detail_syncstickyoffset", "callee": "ceil", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1068"}, {"caller_nid": "contract_detail_syncstickyoffset", "callee": "getBoundingClientRect", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1068"}, {"caller_nid": "contract_detail_syncactivetabfromscroll", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1072"}, {"caller_nid": "contract_detail_syncactivetabfromscroll", "callee": "getElementById", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1076"}, {"caller_nid": "contract_detail_syncactivetabfromscroll", "callee": "getBoundingClientRect", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/detail.vue", "source_location": "L1078"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/429998702198e6dedca9120bf08f0b56580466e824e1c87e2eee49dc2bb92419.json b/web-admin/graphify-out/cache/ast/429998702198e6dedca9120bf08f0b56580466e824e1c87e2eee49dc2bb92419.json
new file mode 100644
index 000000000..0d737ad68
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/429998702198e6dedca9120bf08f0b56580466e824e1c87e2eee49dc2bb92419.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_confirm_dom_mjs", "label": "test-mp-crm-product-confirm-dom.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_crm_product_confirm_dom_root", "label": "root", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs", "source_location": "L4"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_confirm_dom_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_confirm_dom_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_confirm_dom_mjs", "target": "scripts_test_mp_crm_product_confirm_dom_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs", "source_location": "L4", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/44d08b8e5f53b6e0486f27cab3e07d536b97457b80d35c458233be1fe5f74400.json b/web-admin/graphify-out/cache/ast/44d08b8e5f53b6e0486f27cab3e07d536b97457b80d35c458233be1fe5f74400.json
new file mode 100644
index 000000000..2633ec60c
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/44d08b8e5f53b6e0486f27cab3e07d536b97457b80d35c458233be1fe5f74400.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "label": "PlanCard.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/PlanCard.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/49cb506a4fd853853e9446cf5971c45655b72f837ebd549d060682cfbd11c30d.json b/web-admin/graphify-out/cache/ast/49cb506a4fd853853e9446cf5971c45655b72f837ebd549d060682cfbd11c30d.json
new file mode 100644
index 000000000..62bc0eadb
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/49cb506a4fd853853e9446cf5971c45655b72f837ebd549d060682cfbd11c30d.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_dom_mjs", "label": "test-mp-crm-contract-dom.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract-dom.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_crm_contract_dom_root", "label": "root", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract-dom.mjs", "source_location": "L4"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_dom_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract-dom.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_dom_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract-dom.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_contract_dom_mjs", "target": "scripts_test_mp_crm_contract_dom_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-contract-dom.mjs", "source_location": "L4", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/4d28b2fef36138c384a44498df67191f0a4bdc1e5e4613444813575ba4a3f833.json b/web-admin/graphify-out/cache/ast/4d28b2fef36138c384a44498df67191f0a4bdc1e5e4613444813575ba4a3f833.json
new file mode 100644
index 000000000..8f7c63244
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/4d28b2fef36138c384a44498df67191f0a4bdc1e5e4613444813575ba4a3f833.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "label": "mp-crm-product-confirm.test.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L1"}, {"id": "utils_mp_crm_product_confirm_test_opts", "label": "opts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L7"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "node_test", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "utils_mp_crm_product_confirm_buildproductconfirmoptions", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "utils_mp_crm_product_confirm_test_opts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "utils_mp_crm_product_confirm_test_opts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L22", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "utils_mp_crm_product_confirm_test_opts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L39", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "utils_mp_crm_product_confirm_test_opts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L48", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/5186bff7e9f7a25ac32da0cd88ff95606d2f57bf7bf38b084834118e676be116.json b/web-admin/graphify-out/cache/ast/5186bff7e9f7a25ac32da0cd88ff95606d2f57bf7bf38b084834118e676be116.json
new file mode 100644
index 000000000..1df17a9a3
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/5186bff7e9f7a25ac32da0cd88ff95606d2f57bf7bf38b084834118e676be116.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "label": "mp-crm-product-confirm.test.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L1"}, {"id": "utils_mp_crm_product_confirm_test_opts", "label": "opts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L7"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "node_test", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "utils_mp_crm_product_confirm_buildproductconfirmoptions", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "utils_mp_crm_product_confirm_test_opts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_test_ts", "target": "utils_mp_crm_product_confirm_test_opts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.test.ts", "source_location": "L18", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/53cc88830917300f30a656f1e2eecd983221ae61d020188afebc7c8b91bf0ead.json b/web-admin/graphify-out/cache/ast/53cc88830917300f30a656f1e2eecd983221ae61d020188afebc7c8b91bf0ead.json
new file mode 100644
index 000000000..0aa4e4c38
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/53cc88830917300f30a656f1e2eecd983221ae61d020188afebc7c8b91bf0ead.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L1"}, {"id": "plan_cert_index_tab", "label": "tab", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L141"}, {"id": "plan_cert_index_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L142"}, {"id": "plan_cert_index_appliedkeyword", "label": "appliedKeyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L143"}, {"id": "plan_cert_index_datekind", "label": "dateKind", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L145"}, {"id": "plan_cert_index_dateoptions", "label": "dateOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L146"}, {"id": "plan_cert_index_readyoptions", "label": "readyOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L153"}, {"id": "plan_cert_index_filters_toqueryparams", "label": "{ filters, toQueryParams }", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L158"}, {"id": "plan_cert_index_sort", "label": "sort", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L161"}, {"id": "plan_cert_index_quickpanel", "label": "quickPanel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L162"}, {"id": "plan_cert_index_readykind", "label": "readyKind", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L163"}, {"id": "plan_cert_index_datelabel", "label": "dateLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L164"}, {"id": "plan_cert_index_readylabel", "label": "readyLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L167"}, {"id": "plan_cert_index_datedropdownoptions", "label": "dateDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L170"}, {"id": "plan_cert_index_readydropdownoptions", "label": "readyDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L173"}, {"id": "plan_cert_index_extrafiltercount", "label": "extraFilterCount", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L178"}, {"id": "plan_cert_index_filtersopen", "label": "filtersOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L193"}, {"id": "plan_cert_index_uploadopen", "label": "uploadOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L194"}, {"id": "plan_cert_index_uploadid", "label": "uploadId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L195"}, {"id": "plan_cert_index_canupload", "label": "canUpload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L196"}, {"id": "plan_cert_index_canready", "label": "canReady", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L197"}, {"id": "plan_cert_index_canprice", "label": "canPrice", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L198"}, {"id": "plan_cert_index_permissionerror", "label": "permissionError", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L199"}, {"id": "plan_cert_index_permissionsloaded", "label": "permissionsLoaded", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L200"}, {"id": "plan_cert_index_page", "label": "page", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L202"}, {"id": "plan_cert_index_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L203"}, {"id": "plan_cert_index_selected", "label": "selected", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L204"}, {"id": "plan_cert_index_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L205"}, {"id": "plan_cert_index_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L206"}, {"id": "plan_cert_index_failedmore", "label": "failedMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L207"}, {"id": "plan_cert_index_acting", "label": "acting", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L208"}, {"id": "plan_cert_index_selectedplans", "label": "selectedPlans", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L210"}, {"id": "plan_cert_index_visiblecards", "label": "visibleCards", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L211"}, {"id": "plan_cert_index_query", "label": "query()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L222"}, {"id": "plan_cert_index_load", "label": "load()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L240"}, {"id": "plan_cert_index_search", "label": "search()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L269"}, {"id": "plan_cert_index_schedulekeywordsearch", "label": "scheduleKeywordSearch", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L273"}, {"id": "plan_cert_index_onkeywordupdate", "label": "onKeywordUpdate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L274"}, {"id": "plan_cert_index_toggle", "label": "toggle()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L291"}, {"id": "plan_cert_index_changetab", "label": "changeTab()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L297"}, {"id": "plan_cert_index_togglequickpanel", "label": "toggleQuickPanel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L307"}, {"id": "plan_cert_index_openmorefilters", "label": "openMoreFilters()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L310"}, {"id": "plan_cert_index_setdate", "label": "setDate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L315"}, {"id": "plan_cert_index_setreadyfilter", "label": "setReadyFilter()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L322"}, {"id": "plan_cert_index_applyfilters", "label": "applyFilters()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L330"}, {"id": "plan_cert_index_opendetail", "label": "openDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L353"}, {"id": "plan_cert_index_opencontract", "label": "openContract()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L356"}, {"id": "plan_cert_index_openupload", "label": "openUpload()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L359"}, {"id": "plan_cert_index_eligible", "label": "eligible()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L367"}, {"id": "plan_cert_index_saved", "label": "saved()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L370"}, {"id": "plan_cert_index_setready", "label": "setReady()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L374"}, {"id": "plan_cert_index_loadpermissions", "label": "loadPermissions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L425"}, {"id": "plan_cert_index_init", "label": "init()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L442"}, {"id": "plan_cert_index_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L445"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L114", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L115", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L116", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L116", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L117", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L118", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_pl_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L119", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "pl_index_planapi", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L119", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "pl_index_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L119", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "pl_index_planlistresponse", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L119", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_auth_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L120", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "api_auth_fetchgetmenucodes", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L120", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L121", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L121", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_display_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L122", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_display_pl_plan_cert_tabs", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L122", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_display_pl_plan_default_follow_statuses", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L122", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_pl_plan_cert_columnfilterdefs_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L123", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_columnfilterdefs_plplancertcolumnfilterdefs", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L123", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_composables_useservercolumnfilters_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L124", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "composables_useservercolumnfilters_useservercolumnfilters", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L124", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_plan_list_display_rows_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L125", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_list_display_rows_flattenplanarchivepairrows", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L125", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_plan_pair_list_query_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L126", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_applymergedcustomerqueryparams", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L126", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_applycontractsidequeryparams", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L126", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_selectedcontractstopkinds", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L126", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_selectedkeywordsfromfilter", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L126", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_composables_usepltoxicproductcertcheck_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "composables_usepltoxicproductcertcheck_planhashazardproducts", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "composables_usepltoxicproductcertcheck_hazard_cert_ready_confirm_hint", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_buildquery", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_canedit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_readytargets", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_dateshortcut", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certfilters_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L137", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L138", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L139", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_cert_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L140", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_tab", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_appliedkeyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L143", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_datekind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L145", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_dateoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L146", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readyoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L153", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_filters_toqueryparams", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L158", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_sort", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L161", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_quickpanel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L162", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readykind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L163", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_datelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L164", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readylabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L167", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_datedropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L170", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readydropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L173", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_extrafiltercount", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L178", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_filtersopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L193", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_uploadopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L194", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_uploadid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L195", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_canupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L196", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_canready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L197", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_canprice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L198", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_permissionerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L199", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_permissionsloaded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L200", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L202", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L203", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_selected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L204", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L205", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L206", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_failedmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L207", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_acting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L208", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_selectedplans", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L210", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_visiblecards", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L211", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L222", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L240", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_search", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L269", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_schedulekeywordsearch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L273", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_onkeywordupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L274", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_toggle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L291", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_changetab", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L297", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_togglequickpanel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L307", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_openmorefilters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L310", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_setdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L315", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_setreadyfilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L322", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_applyfilters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L330", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_opendetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L353", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_opencontract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L356", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_openupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L359", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_eligible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L367", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_saved", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L370", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_setready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L374", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_loadpermissions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L425", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_init", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L442", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L445", "weight": 1.0}, {"source": "plan_cert_index_load", "target": "plan_cert_index_query", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L253", "weight": 1.0}, {"source": "plan_cert_index_search", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L271", "weight": 1.0}, {"source": "plan_cert_index_onkeywordupdate", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L278", "weight": 1.0}, {"source": "plan_cert_index_onkeywordupdate", "target": "plan_cert_index_schedulekeywordsearch", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L281", "weight": 1.0}, {"source": "plan_cert_index_changetab", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L305", "weight": 1.0}, {"source": "plan_cert_index_openmorefilters", "target": "plan_cert_index_toggle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L312", "weight": 1.0}, {"source": "plan_cert_index_setdate", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L320", "weight": 1.0}, {"source": "plan_cert_index_setreadyfilter", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L328", "weight": 1.0}, {"source": "plan_cert_index_applyfilters", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L351", "weight": 1.0}, {"source": "plan_cert_index_saved", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L371", "weight": 1.0}, {"source": "plan_cert_index_saved", "target": "plan_cert_index_opendetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L372", "weight": 1.0}, {"source": "plan_cert_index_setready", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L420", "weight": 1.0}, {"source": "plan_cert_index_init", "target": "plan_cert_index_loadpermissions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L443", "weight": 1.0}, {"source": "plan_cert_index_init", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L443", "weight": 1.0}], "raw_calls": [{"caller_nid": "plan_cert_index_query", "callee": "buildQuery", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L223"}, {"caller_nid": "plan_cert_index_query", "callee": "toQueryParams", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L225"}, {"caller_nid": "plan_cert_index_query", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L232"}, {"caller_nid": "plan_cert_index_query", "callee": "applyMergedCustomerQueryParams", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L236"}, {"caller_nid": "plan_cert_index_query", "callee": "applyContractSideQueryParams", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L237"}, {"caller_nid": "plan_cert_index_load", "callee": "list", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L253"}, {"caller_nid": "plan_cert_index_load", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L257"}, {"caller_nid": "plan_cert_index_load", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L261"}, {"caller_nid": "plan_cert_index_onkeywordupdate", "callee": "Boolean", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L275"}, {"caller_nid": "plan_cert_index_onkeywordupdate", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L275"}, {"caller_nid": "plan_cert_index_onkeywordupdate", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L275"}, {"caller_nid": "plan_cert_index_toggle", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L293"}, {"caller_nid": "plan_cert_index_toggle", "callee": "delete", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L293"}, {"caller_nid": "plan_cert_index_toggle", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L294"}, {"caller_nid": "plan_cert_index_setdate", "callee": "dateShortcut", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L317"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "forEach", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L331"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "keys", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L331"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "assign", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L332"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "assign", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L333"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L345"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L345"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L346"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L346"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L347"}, {"caller_nid": "plan_cert_index_opendetail", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L354"}, {"caller_nid": "plan_cert_index_opencontract", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L357"}, {"caller_nid": "plan_cert_index_openupload", "callee": "canEdit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L360"}, {"caller_nid": "plan_cert_index_openupload", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L361"}, {"caller_nid": "plan_cert_index_eligible", "callee": "readyTargets", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L368"}, {"caller_nid": "plan_cert_index_setready", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L384"}, {"caller_nid": "plan_cert_index_setready", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L385"}, {"caller_nid": "plan_cert_index_setready", "callee": "readyTargets", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L390"}, {"caller_nid": "plan_cert_index_setready", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L393"}, {"caller_nid": "plan_cert_index_setready", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L398"}, {"caller_nid": "plan_cert_index_setready", "callee": "setHazardCertReady", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L410"}, {"caller_nid": "plan_cert_index_setready", "callee": "ElMessage", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L416"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "fetchGetMenuCodes", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L431"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L433"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L434"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L435"}, {"caller_nid": "plan_cert_index_init", "callee": "allSettled", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L443"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/54141c7896a2d423013185dd07445bd81993331f254bb0422f46ff17826b649f.json b/web-admin/graphify-out/cache/ast/54141c7896a2d423013185dd07445bd81993331f254bb0422f46ff17826b649f.json
new file mode 100644
index 000000000..f6149a134
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/54141c7896a2d423013185dd07445bd81993331f254bb0422f46ff17826b649f.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_versions_vue", "label": "versions.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/versions.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/57a5ea87447a4795f965304bf823b9b355b14c05b0974defe6c1d345236ae7fc.json b/web-admin/graphify-out/cache/ast/57a5ea87447a4795f965304bf823b9b355b14c05b0974defe6c1d345236ae7fc.json
new file mode 100644
index 000000000..014d47790
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/57a5ea87447a4795f965304bf823b9b355b14c05b0974defe6c1d345236ae7fc.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_customer_confirm_dom_mjs", "label": "test-mp-crm-customer-confirm-dom.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-customer-confirm-dom.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_crm_customer_confirm_dom_root", "label": "root", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-customer-confirm-dom.mjs", "source_location": "L4"}, {"id": "scripts_test_mp_crm_customer_confirm_dom_files", "label": "files", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-customer-confirm-dom.mjs", "source_location": "L5"}, {"id": "scripts_test_mp_crm_customer_confirm_dom_sources", "label": "sources", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-customer-confirm-dom.mjs", "source_location": "L16"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_customer_confirm_dom_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-customer-confirm-dom.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_customer_confirm_dom_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-customer-confirm-dom.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_customer_confirm_dom_mjs", "target": "scripts_test_mp_crm_customer_confirm_dom_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-customer-confirm-dom.mjs", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_customer_confirm_dom_mjs", "target": "scripts_test_mp_crm_customer_confirm_dom_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-customer-confirm-dom.mjs", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_customer_confirm_dom_mjs", "target": "scripts_test_mp_crm_customer_confirm_dom_sources", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-customer-confirm-dom.mjs", "source_location": "L16", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/5a56cc87b2e0c4b807fd16c437b5ba349334a7ef8aed7707c5c0001566b59317.json b/web-admin/graphify-out/cache/ast/5a56cc87b2e0c4b807fd16c437b5ba349334a7ef8aed7707c5c0001566b59317.json
new file mode 100644
index 000000000..30936fca4
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/5a56cc87b2e0c4b807fd16c437b5ba349334a7ef8aed7707c5c0001566b59317.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "label": "ContactPanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L1"}, {"id": "customer_contactpanel_key", "label": "key", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L224"}, {"id": "customer_contactpanel_hit", "label": "hit", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L252"}, {"id": "customer_contactpanel_kw", "label": "kw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L257"}, {"id": "customer_contactpanel_onmoreopen", "label": "onMoreOpen()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L331"}, {"id": "customer_contactpanel_resetmore", "label": "resetMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L336"}, {"id": "customer_contactpanel_applymore", "label": "applyMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L339"}, {"id": "customer_contactpanel_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L399"}, {"id": "customer_contactpanel_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L426"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L224", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_hit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L252", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_kw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_onmoreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L331", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_resetmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L336", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_applymore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L339", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L399", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L426", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_contactpanel_onmoreopen", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L334"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/5f0577862b81c6a1f187e71edbf73973d84a565819a146789253af91b500d407.json b/web-admin/graphify-out/cache/ast/5f0577862b81c6a1f187e71edbf73973d84a565819a146789253af91b500d407.json
new file mode 100644
index 000000000..1a7ee1b0b
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/5f0577862b81c6a1f187e71edbf73973d84a565819a146789253af91b500d407.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L1"}, {"id": "attachment_upload_field_index_usetiles", "label": "useTiles", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L346"}, {"id": "attachment_upload_field_index_ismppreviewtoolbar", "label": "isMpPreviewToolbar", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L347"}, {"id": "attachment_upload_field_index_mpbtnsize", "label": "mpBtnSize", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L350"}, {"id": "attachment_upload_field_index_previewvisible", "label": "previewVisible", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L355"}, {"id": "attachment_upload_field_index_previewpdfsrc", "label": "previewPdfSrc", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L357"}, {"id": "attachment_upload_field_index_previewloading", "label": "previewLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L358"}, {"id": "attachment_upload_field_index_previewzoom", "label": "previewZoom", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L362"}, {"id": "attachment_upload_field_index_previewoffsetx", "label": "previewOffsetX", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L363"}, {"id": "attachment_upload_field_index_previewoffsety", "label": "previewOffsetY", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L364"}, {"id": "attachment_upload_field_index_previewdragging", "label": "previewDragging", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L365"}, {"id": "attachment_upload_field_index_previewfitbase", "label": "previewFitBase", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L366"}, {"id": "attachment_upload_field_index_ispointerinside", "label": "isPointerInside", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L367"}, {"id": "attachment_upload_field_index_isdragover", "label": "isDragOver", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L368"}, {"id": "attachment_upload_field_index_previewiconsize", "label": "previewIconSize", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L375"}, {"id": "attachment_upload_field_index_previewtransformcss", "label": "previewTransformCss", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L380"}, {"id": "attachment_upload_field_index_previewstatustext", "label": "previewStatusText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L389"}, {"id": "attachment_upload_field_index_resolvefileurl", "label": "resolveFileUrl()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L394"}, {"id": "attachment_upload_field_index_next", "label": "next", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L425"}, {"id": "attachment_upload_field_index_current", "label": "current", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L426"}, {"id": "attachment_upload_field_index_name", "label": "name", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L434"}, {"id": "attachment_upload_field_index_type", "label": "type", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L435"}, {"id": "attachment_upload_field_index_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L451"}, {"id": "attachment_upload_field_index_accept", "label": "accept", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L481"}, {"id": "attachment_upload_field_index_file", "label": "file", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L515"}, {"id": "attachment_upload_field_index_fd", "label": "fd", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L552"}, {"id": "attachment_upload_field_index_files", "label": "files", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L639"}, {"id": "attachment_upload_field_index_uploads", "label": "uploads", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L656"}, {"id": "attachment_upload_field_index_hovered", "label": "hovered", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L662"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_usetiles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L346", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_ismppreviewtoolbar", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L347", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_mpbtnsize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L350", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewvisible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L355", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewpdfsrc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L357", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L358", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewzoom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L362", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewoffsetx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L363", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewoffsety", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L364", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewdragging", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L365", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewfitbase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L366", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_ispointerinside", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L367", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_isdragover", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L368", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewiconsize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L375", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewtransformcss", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L380", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_previewstatustext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L389", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_resolvefileurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L394", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_next", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L425", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_current", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L434", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L435", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L443", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L444", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L449", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L450", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L451", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_accept", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L481", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L487", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L488", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L515", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_fd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L552", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L639", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_uploads", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L656", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_hovered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L662", "weight": 1.0}], "raw_calls": [{"caller_nid": "attachment_upload_field_index_resolvefileurl", "callee": "resolvePhotoDisplayUrl", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L395"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/6290dc755d0a65887493a10eee76cf7c980873f525f4b7883dfbff113627bd08.json b/web-admin/graphify-out/cache/ast/6290dc755d0a65887493a10eee76cf7c980873f525f4b7883dfbff113627bd08.json
new file mode 100644
index 000000000..085c6758f
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/6290dc755d0a65887493a10eee76cf7c980873f525f4b7883dfbff113627bd08.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "label": "MpContractList.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1"}, {"id": "contract_mpcontractlist_frominfo", "label": "fromInfo", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L569"}, {"id": "contract_mpcontractlist_b64", "label": "b64", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L575"}, {"id": "contract_mpcontractlist_pad", "label": "pad", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L576"}, {"id": "contract_mpcontractlist_obj", "label": "obj", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L577"}, {"id": "contract_mpcontractlist_map", "label": "map", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L630"}, {"id": "contract_mpcontractlist_set", "label": "set", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L660"}, {"id": "contract_mpcontractlist_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L688"}, {"id": "contract_mpcontractlist_text", "label": "text", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L904"}, {"id": "contract_mpcontractlist_next", "label": "next", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L921"}, {"id": "contract_mpcontractlist_valid", "label": "valid", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L979"}, {"id": "contract_mpcontractlist_opinion", "label": "opinion", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1078"}, {"id": "contract_mpcontractlist_reason", "label": "reason", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1129"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_frominfo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L569", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_b64", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L575", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_pad", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L576", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_obj", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L577", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_map", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L630", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L660", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L688", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L904", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_next", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L921", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_valid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L979", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_opinion", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1078", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_reason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1129", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/640e819acff06eb29e3cab9dd1848dabbb5398e407a31c692c2d76139c04047c.json b/web-admin/graphify-out/cache/ast/640e819acff06eb29e3cab9dd1848dabbb5398e407a31c692c2d76139c04047c.json
new file mode 100644
index 000000000..e6838ef87
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/640e819acff06eb29e3cab9dd1848dabbb5398e407a31c692c2d76139c04047c.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L1"}, {"id": "product_index_path", "label": "path", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L324"}, {"id": "product_index_categorydropdownoptions", "label": "categoryDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L330"}, {"id": "product_index_modeldropdownoptions", "label": "modelDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L334"}, {"id": "product_index_moreactive", "label": "moreActive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L335"}, {"id": "product_index_cards", "label": "cards", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L336"}, {"id": "product_index_hasmore", "label": "hasMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L343"}, {"id": "product_index_ensurecategorypathmap", "label": "ensureCategoryPathMap()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L345"}, {"id": "product_index_ensuremodeloptions", "label": "ensureModelOptions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L367"}, {"id": "product_index_requestsnapshot", "label": "requestSnapshot()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L395"}, {"id": "product_index_isexpanded", "label": "isExpanded()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L405"}, {"id": "product_index_snapshot", "label": "snapshot", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L420"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "core", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L246", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L247", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_confirm_showproductconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L247", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L248", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_product_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchproductlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchcategorytree", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchproductcolumnfacetvalues", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchupdateproductstatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchdeleteproduct", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_card_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_card_buildproductlistquery", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_card_buildproductcard", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_creator_delete_candeletebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_creator_delete_creator_delete_tip", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_tree_path_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_tree_path_buildpathlabelmapfromtreeroots", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L260", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L260", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_error_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "http_error_httperror", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_status_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "http_status_apistatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L263", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_product_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L264", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L324", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_categorydropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L330", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_modeldropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L334", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_moreactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L335", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_cards", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L336", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_hasmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L343", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_ensurecategorypathmap", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L345", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_ensuremodeloptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L367", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_requestsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L395", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_isexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L405", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_snapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L420", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_index_ensurecategorypathmap", "callee": "fetchCategoryTree", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L349"}, {"caller_nid": "product_index_ensurecategorypathmap", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L352"}, {"caller_nid": "product_index_ensurecategorypathmap", "callee": "buildPathLabelMapFromTreeRoots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L353"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "fetchProductColumnFacetValues", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L371"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L373"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L380"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L380"}, {"caller_nid": "product_index_requestsnapshot", "callee": "stringify", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L396"}, {"caller_nid": "product_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L397"}, {"caller_nid": "product_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L399"}, {"caller_nid": "product_index_isexpanded", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L406"}, {"caller_nid": "product_index_isexpanded", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L406"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/668374c9fadf8fb5b53b6eff0efc217fe27f873d4ba7188e7f977b2479bb3737.json b/web-admin/graphify-out/cache/ast/668374c9fadf8fb5b53b6eff0efc217fe27f873d4ba7188e7f977b2479bb3737.json
new file mode 100644
index 000000000..34524b369
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/668374c9fadf8fb5b53b6eff0efc217fe27f873d4ba7188e7f977b2479bb3737.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "label": "test-mp-crm-product.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_crm_product_pageerrors", "label": "pageErrors", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L17"}, {"id": "scripts_test_mp_crm_product_calls", "label": "calls", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L18"}, {"id": "scripts_test_mp_crm_product_unknownpaths", "label": "unknownPaths", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L19"}, {"id": "scripts_test_mp_crm_product_ownproduct", "label": "ownProduct", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L23"}, {"id": "scripts_test_mp_crm_product_foreignproduct", "label": "foreignProduct", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L46"}, {"id": "scripts_test_mp_crm_product_navigateback", "label": "navigateBack()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L61"}, {"id": "scripts_test_mp_crm_product_relaunch", "label": "reLaunch()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L62"}, {"id": "scripts_test_mp_crm_product_getenv", "label": "getEnv()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L63"}, {"id": "scripts_test_mp_crm_product_request", "label": "request", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L78"}, {"id": "scripts_test_mp_crm_product_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L79"}, {"id": "scripts_test_mp_crm_product_path", "label": "path", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L81"}, {"id": "scripts_test_mp_crm_product_body", "label": "body", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L82"}, {"id": "scripts_test_mp_crm_product_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L92"}, {"id": "scripts_test_mp_crm_product_lastcall", "label": "lastCall()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L182"}, {"id": "scripts_test_mp_crm_product_assertnooverflow", "label": "assertNoOverflow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L183"}, {"id": "scripts_test_mp_crm_product_hidedevtools", "label": "hideDevtools()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L192"}, {"id": "scripts_test_mp_crm_product_firstcard", "label": "firstCard", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L222"}, {"id": "scripts_test_mp_crm_product_item", "label": "item", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L243"}, {"id": "scripts_test_mp_crm_product_search", "label": "search", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L250"}, {"id": "scripts_test_mp_crm_product_moresheet", "label": "moreSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L290"}, {"id": "scripts_test_mp_crm_product_loadmore", "label": "loadMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L302"}, {"id": "scripts_test_mp_crm_product_pageerror", "label": "pageError", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L307"}, {"id": "scripts_test_mp_crm_product_pagetwocalls", "label": "pageTwoCalls", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L313"}, {"id": "scripts_test_mp_crm_product_slowrequest", "label": "slowRequest", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L355"}, {"id": "scripts_test_mp_crm_product_slowresponse", "label": "slowResponse", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L363"}, {"id": "scripts_test_mp_crm_product_fastresponse", "label": "fastResponse", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L375"}, {"id": "scripts_test_mp_crm_product_formback", "label": "formBack", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L393"}, {"id": "scripts_test_mp_crm_product_btn", "label": "btn", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L406"}, {"id": "scripts_test_mp_crm_product_uploadinput", "label": "uploadInput", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L424"}, {"id": "scripts_test_mp_crm_product_uploadpreview", "label": "uploadPreview", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L440"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "playwright", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_pageerrors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L17", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_calls", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L18", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_unknownpaths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L19", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_ownproduct", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L23", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_foreignproduct", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L46", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_navigateback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L61", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_relaunch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L62", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_getenv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L63", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L78", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L79", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L81", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_body", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L82", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L92", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_lastcall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L182", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_assertnooverflow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L183", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_hidedevtools", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L192", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_firstcard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L222", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L243", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_search", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_moresheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L290", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_loadmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L302", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_pageerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L307", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_pagetwocalls", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L313", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_slowrequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L355", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_slowresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L363", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_fastresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L375", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_formback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L393", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_btn", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L406", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_uploadinput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L424", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_mjs", "target": "scripts_test_mp_crm_product_uploadpreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L440", "weight": 1.0}], "raw_calls": [{"caller_nid": "scripts_test_mp_crm_product_getenv", "callee": "callback", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L64"}, {"caller_nid": "scripts_test_mp_crm_product_lastcall", "callee": "findLast", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L182"}, {"caller_nid": "scripts_test_mp_crm_product_assertnooverflow", "callee": "setViewportSize", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L184"}, {"caller_nid": "scripts_test_mp_crm_product_assertnooverflow", "callee": "equal", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L185"}, {"caller_nid": "scripts_test_mp_crm_product_assertnooverflow", "callee": "evaluate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L186"}, {"caller_nid": "scripts_test_mp_crm_product_hidedevtools", "callee": "addStyleTag", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product.mjs", "source_location": "L193"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/67c7faa3d1917bcf2577312a343d16e7e7175590bda50a73bc237d6ba68b647c.json b/web-admin/graphify-out/cache/ast/67c7faa3d1917bcf2577312a343d16e7e7175590bda50a73bc237d6ba68b647c.json
new file mode 100644
index 000000000..506f09999
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/67c7faa3d1917bcf2577312a343d16e7e7175590bda50a73bc237d6ba68b647c.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L1"}, {"id": "customer_index_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L257"}, {"id": "customer_index_dict", "label": "dict", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L258"}, {"id": "customer_index_views", "label": "views", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L259"}, {"id": "customer_index_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L266"}, {"id": "customer_index_filtersopen", "label": "filtersOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L268"}, {"id": "customer_index_poolopen", "label": "poolOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L269"}, {"id": "customer_index_speedopen", "label": "speedOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L270"}, {"id": "customer_index_selectmode", "label": "selectMode", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L271"}, {"id": "customer_index_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L274"}, {"id": "customer_index_page", "label": "page", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L275"}, {"id": "customer_index_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L276"}, {"id": "customer_index_deleting", "label": "deleting", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L277"}, {"id": "customer_index_forbidden", "label": "forbidden", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L278"}, {"id": "customer_index_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L279"}, {"id": "customer_index_listfieldsplit", "label": "listFieldSplit", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L282"}, {"id": "customer_index_selectedrows", "label": "selectedRows", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L285"}, {"id": "customer_index_candelete", "label": "canDelete", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L288"}, {"id": "customer_index_allloadedselected", "label": "allLoadedSelected", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L291"}, {"id": "customer_index_hasmore", "label": "hasMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L295"}, {"id": "customer_index_loadhinttext", "label": "loadHintText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L296"}, {"id": "customer_index_typefilter", "label": "typeFilter", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L310"}, {"id": "customer_index_levelfilter", "label": "levelFilter", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L311"}, {"id": "customer_index_typefilteroptions", "label": "typeFilterOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L312"}, {"id": "customer_index_levelfilteroptions", "label": "levelFilterOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L319"}, {"id": "customer_index_moreactive", "label": "moreActive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L326"}, {"id": "customer_index_ontypefilterchange", "label": "onTypeFilterChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L345"}, {"id": "customer_index_onlevelfilterchange", "label": "onLevelFilterChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L350"}, {"id": "customer_index_onmoreopen", "label": "onMoreOpen()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L356"}, {"id": "customer_index_requestsnapshot", "label": "requestSnapshot()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L362"}, {"id": "customer_index_fetchpage", "label": "fetchPage()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L371"}, {"id": "customer_index_reload", "label": "reload()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L430"}, {"id": "customer_index_onshellready", "label": "onShellReady()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L434"}, {"id": "customer_index_retry", "label": "retry()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L437"}, {"id": "customer_index_schedulekeywordsearch", "label": "scheduleKeywordSearch", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L440"}, {"id": "customer_index_onkeywordupdate", "label": "onKeywordUpdate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L442"}, {"id": "customer_index_onviewchange", "label": "onViewChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L446"}, {"id": "customer_index_applyfilters", "label": "applyFilters()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L450"}, {"id": "customer_index_dictlabel", "label": "dictLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L456"}, {"id": "customer_index_displayvalue", "label": "displayValue()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L459"}, {"id": "customer_index_cardmeta", "label": "cardMeta()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L464"}, {"id": "customer_index_isexpanded", "label": "isExpanded()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L471"}, {"id": "customer_index_toggleexpand", "label": "toggleExpand()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L474"}, {"id": "customer_index_statuslabel", "label": "statusLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L482"}, {"id": "customer_index_oncardclick", "label": "onCardClick()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L490"}, {"id": "customer_index_godetail", "label": "goDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L498"}, {"id": "customer_index_goedit", "label": "goEdit()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L501"}, {"id": "customer_index_gofollow", "label": "goFollow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L504"}, {"id": "customer_index_gonew", "label": "goNew()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L507"}, {"id": "customer_index_enterselectmode", "label": "enterSelectMode()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L511"}, {"id": "customer_index_leaveselectmode", "label": "leaveSelectMode()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L515"}, {"id": "customer_index_toggleselected", "label": "toggleSelected()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L519"}, {"id": "customer_index_toggleall", "label": "toggleAll()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L525"}, {"id": "customer_index_afterbatchsuccess", "label": "afterBatchSuccess()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L528"}, {"id": "customer_index_remove", "label": "remove()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L532"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "core", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L226", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L226", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L227", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mplistpageskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L229", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_customer_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchcustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchmycustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchtofollowcustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchkeycustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchdeletecustomer", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L237", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L237", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_error_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L238", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "http_error_httperror", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L238", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_status_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "http_status_apistatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_dict_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L240", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "modules_dict_usedictstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L240", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L241", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_creator_delete_allrowsdeletablebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L241", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_creator_delete_creator_delete_tip", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L241", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L242", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L243", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_customer_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_customerlistcardmeta", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_splitcustomerlistfields", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_unwrapdata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_unwraprows", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_field", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L253", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_views", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_filtersopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L268", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_poolopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L269", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_speedopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L270", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_selectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L271", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L274", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L275", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L276", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_deleting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L277", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_forbidden", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L278", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L279", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_listfieldsplit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L282", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_selectedrows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L285", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_candelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L288", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_allloadedselected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L291", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_hasmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L295", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_loadhinttext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L296", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_typefilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L310", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_levelfilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L311", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_typefilteroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L312", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_levelfilteroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L319", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_moreactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L326", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_ontypefilterchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L345", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onlevelfilterchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L350", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onmoreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L356", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_requestsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L362", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_fetchpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L371", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_reload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L430", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onshellready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L434", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_retry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L437", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_schedulekeywordsearch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L440", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onkeywordupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L442", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onviewchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L446", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_applyfilters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L450", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_dictlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L456", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_displayvalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L459", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_cardmeta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L464", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_isexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L471", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleexpand", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L474", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L482", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_oncardclick", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L490", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_godetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L498", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_goedit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L501", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_gofollow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L504", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_gonew", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L507", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_enterselectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L511", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_leaveselectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L515", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleselected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L519", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L525", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_afterbatchsuccess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L528", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_remove", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L532", "weight": 1.0}, {"source": "customer_index_ontypefilterchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L348", "weight": 1.0}, {"source": "customer_index_onlevelfilterchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L353", "weight": 1.0}, {"source": "customer_index_fetchpage", "target": "customer_index_requestsnapshot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L375", "weight": 1.0}, {"source": "customer_index_reload", "target": "customer_index_fetchpage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L431", "weight": 1.0}, {"source": "customer_index_onshellready", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L435", "weight": 1.0}, {"source": "customer_index_retry", "target": "customer_index_fetchpage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L438", "weight": 1.0}, {"source": "customer_index_onkeywordupdate", "target": "customer_index_schedulekeywordsearch", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L444", "weight": 1.0}, {"source": "customer_index_onviewchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L448", "weight": 1.0}, {"source": "customer_index_applyfilters", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L454", "weight": 1.0}, {"source": "customer_index_displayvalue", "target": "customer_index_dictlabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L461", "weight": 1.0}, {"source": "customer_index_cardmeta", "target": "customer_index_statuslabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L466", "weight": 1.0}, {"source": "customer_index_statuslabel", "target": "customer_index_dictlabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L483", "weight": 1.0}, {"source": "customer_index_oncardclick", "target": "customer_index_toggleselected", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L493", "weight": 1.0}, {"source": "customer_index_oncardclick", "target": "customer_index_godetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L496", "weight": 1.0}, {"source": "customer_index_afterbatchsuccess", "target": "customer_index_leaveselectmode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L529", "weight": 1.0}, {"source": "customer_index_afterbatchsuccess", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L530", "weight": 1.0}, {"source": "customer_index_remove", "target": "customer_index_afterbatchsuccess", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L543", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_index_onmoreopen", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L358"}, {"caller_nid": "customer_index_requestsnapshot", "callee": "stringify", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L363"}, {"caller_nid": "customer_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L365"}, {"caller_nid": "customer_index_fetchpage", "callee": "unwrapData", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L394"}, {"caller_nid": "customer_index_fetchpage", "callee": "api", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L395"}, {"caller_nid": "customer_index_fetchpage", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L399"}, {"caller_nid": "customer_index_fetchpage", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L404"}, {"caller_nid": "customer_index_fetchpage", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L406"}, {"caller_nid": "customer_index_dictlabel", "callee": "getLabel", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L457"}, {"caller_nid": "customer_index_dictlabel", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L457"}, {"caller_nid": "customer_index_dictlabel", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L457"}, {"caller_nid": "customer_index_displayvalue", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L462"}, {"caller_nid": "customer_index_cardmeta", "callee": "customerListCardMeta", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L465"}, {"caller_nid": "customer_index_isexpanded", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L472"}, {"caller_nid": "customer_index_isexpanded", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L472"}, {"caller_nid": "customer_index_toggleexpand", "callee": "stopPropagation", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L475"}, {"caller_nid": "customer_index_toggleexpand", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L476"}, {"caller_nid": "customer_index_toggleexpand", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L478"}, {"caller_nid": "customer_index_toggleexpand", "callee": "delete", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L478"}, {"caller_nid": "customer_index_toggleexpand", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L479"}, {"caller_nid": "customer_index_oncardclick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L492"}, {"caller_nid": "customer_index_oncardclick", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L493"}, {"caller_nid": "customer_index_godetail", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L499"}, {"caller_nid": "customer_index_goedit", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L502"}, {"caller_nid": "customer_index_gofollow", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L505"}, {"caller_nid": "customer_index_gonew", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L509"}, {"caller_nid": "customer_index_toggleselected", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L520"}, {"caller_nid": "customer_index_toggleselected", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L523"}, {"caller_nid": "customer_index_toggleall", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L526"}, {"caller_nid": "customer_index_remove", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L536"}, {"caller_nid": "customer_index_remove", "callee": "fetchDeleteCustomer", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L541"}, {"caller_nid": "customer_index_remove", "callee": "showSuccessToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L542"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/69054a953b5b98f50a8722ca63cf573a985319de5aca95b324dbcccd75db5311.json b/web-admin/graphify-out/cache/ast/69054a953b5b98f50a8722ca63cf573a985319de5aca95b324dbcccd75db5311.json
new file mode 100644
index 000000000..2908a8b18
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/69054a953b5b98f50a8722ca63cf573a985319de5aca95b324dbcccd75db5311.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L1"}, {"id": "customer_index_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L252"}, {"id": "customer_index_dict", "label": "dict", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L253"}, {"id": "customer_index_views", "label": "views", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L254"}, {"id": "customer_index_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L261"}, {"id": "customer_index_filtersopen", "label": "filtersOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L263"}, {"id": "customer_index_poolopen", "label": "poolOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L264"}, {"id": "customer_index_speedopen", "label": "speedOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L265"}, {"id": "customer_index_selectmode", "label": "selectMode", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L266"}, {"id": "customer_index_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L269"}, {"id": "customer_index_page", "label": "page", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L270"}, {"id": "customer_index_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L271"}, {"id": "customer_index_deleting", "label": "deleting", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L272"}, {"id": "customer_index_forbidden", "label": "forbidden", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L273"}, {"id": "customer_index_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L274"}, {"id": "customer_index_listfieldsplit", "label": "listFieldSplit", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L277"}, {"id": "customer_index_selectedrows", "label": "selectedRows", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L280"}, {"id": "customer_index_candelete", "label": "canDelete", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L283"}, {"id": "customer_index_allloadedselected", "label": "allLoadedSelected", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L286"}, {"id": "customer_index_hasmore", "label": "hasMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L290"}, {"id": "customer_index_loadhinttext", "label": "loadHintText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L291"}, {"id": "customer_index_typefilter", "label": "typeFilter", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L305"}, {"id": "customer_index_levelfilter", "label": "levelFilter", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L306"}, {"id": "customer_index_typefilteroptions", "label": "typeFilterOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L307"}, {"id": "customer_index_levelfilteroptions", "label": "levelFilterOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L314"}, {"id": "customer_index_moreactive", "label": "moreActive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L321"}, {"id": "customer_index_ontypefilterchange", "label": "onTypeFilterChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L340"}, {"id": "customer_index_onlevelfilterchange", "label": "onLevelFilterChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L345"}, {"id": "customer_index_onmoreopen", "label": "onMoreOpen()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L351"}, {"id": "customer_index_requestsnapshot", "label": "requestSnapshot()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L357"}, {"id": "customer_index_fetchpage", "label": "fetchPage()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L366"}, {"id": "customer_index_reload", "label": "reload()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L425"}, {"id": "customer_index_onshellready", "label": "onShellReady()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L429"}, {"id": "customer_index_retry", "label": "retry()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L432"}, {"id": "customer_index_schedulekeywordsearch", "label": "scheduleKeywordSearch", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L435"}, {"id": "customer_index_onkeywordupdate", "label": "onKeywordUpdate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L437"}, {"id": "customer_index_onviewchange", "label": "onViewChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L441"}, {"id": "customer_index_applyfilters", "label": "applyFilters()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L445"}, {"id": "customer_index_dictlabel", "label": "dictLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L451"}, {"id": "customer_index_displayvalue", "label": "displayValue()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L454"}, {"id": "customer_index_cardmeta", "label": "cardMeta()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L459"}, {"id": "customer_index_isexpanded", "label": "isExpanded()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L466"}, {"id": "customer_index_toggleexpand", "label": "toggleExpand()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L469"}, {"id": "customer_index_statuslabel", "label": "statusLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L477"}, {"id": "customer_index_oncardclick", "label": "onCardClick()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L485"}, {"id": "customer_index_godetail", "label": "goDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L493"}, {"id": "customer_index_goedit", "label": "goEdit()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L496"}, {"id": "customer_index_gofollow", "label": "goFollow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L499"}, {"id": "customer_index_gonew", "label": "goNew()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L502"}, {"id": "customer_index_enterselectmode", "label": "enterSelectMode()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L506"}, {"id": "customer_index_leaveselectmode", "label": "leaveSelectMode()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L510"}, {"id": "customer_index_toggleselected", "label": "toggleSelected()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L514"}, {"id": "customer_index_toggleall", "label": "toggleAll()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L520"}, {"id": "customer_index_afterbatchsuccess", "label": "afterBatchSuccess()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L523"}, {"id": "customer_index_remove", "label": "remove()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L527"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "core", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L220", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L221", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L221", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L222", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L223", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mplistpageskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L224", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_customer_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchcustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchmycustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchtofollowcustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchkeycustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchdeletecustomer", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L232", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L232", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_error_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L233", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "http_error_httperror", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L233", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_status_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L234", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "http_status_apistatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L234", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_dict_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L235", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "modules_dict_usedictstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L235", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L236", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_creator_delete_allrowsdeletablebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L236", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_creator_delete_creator_delete_tip", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L236", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L237", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L238", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_customer_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_customerlistcardmeta", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_splitcustomerlistfields", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_unwrapdata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_unwraprows", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_field", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L248", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L252", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L253", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_views", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L254", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_filtersopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L263", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_poolopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L264", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_speedopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L265", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_selectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L269", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L270", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L271", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_deleting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L272", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_forbidden", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L273", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L274", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_listfieldsplit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L277", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_selectedrows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L280", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_candelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L283", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_allloadedselected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L286", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_hasmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L290", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_loadhinttext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L291", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_typefilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L305", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_levelfilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L306", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_typefilteroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L307", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_levelfilteroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L314", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_moreactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L321", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_ontypefilterchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L340", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onlevelfilterchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L345", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onmoreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L351", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_requestsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L357", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_fetchpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L366", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_reload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L425", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onshellready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L429", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_retry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L432", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_schedulekeywordsearch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L435", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onkeywordupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L437", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onviewchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L441", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_applyfilters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L445", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_dictlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L451", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_displayvalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L454", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_cardmeta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L459", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_isexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L466", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleexpand", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L469", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L477", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_oncardclick", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L485", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_godetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L493", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_goedit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L496", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_gofollow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L499", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_gonew", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L502", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_enterselectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L506", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_leaveselectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L510", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleselected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L514", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L520", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_afterbatchsuccess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L523", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_remove", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L527", "weight": 1.0}, {"source": "customer_index_ontypefilterchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L343", "weight": 1.0}, {"source": "customer_index_onlevelfilterchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L348", "weight": 1.0}, {"source": "customer_index_fetchpage", "target": "customer_index_requestsnapshot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L370", "weight": 1.0}, {"source": "customer_index_reload", "target": "customer_index_fetchpage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L426", "weight": 1.0}, {"source": "customer_index_onshellready", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L430", "weight": 1.0}, {"source": "customer_index_retry", "target": "customer_index_fetchpage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L433", "weight": 1.0}, {"source": "customer_index_onkeywordupdate", "target": "customer_index_schedulekeywordsearch", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L439", "weight": 1.0}, {"source": "customer_index_onviewchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L443", "weight": 1.0}, {"source": "customer_index_applyfilters", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L449", "weight": 1.0}, {"source": "customer_index_displayvalue", "target": "customer_index_dictlabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L456", "weight": 1.0}, {"source": "customer_index_cardmeta", "target": "customer_index_statuslabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L461", "weight": 1.0}, {"source": "customer_index_statuslabel", "target": "customer_index_dictlabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L478", "weight": 1.0}, {"source": "customer_index_oncardclick", "target": "customer_index_toggleselected", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L488", "weight": 1.0}, {"source": "customer_index_oncardclick", "target": "customer_index_godetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L491", "weight": 1.0}, {"source": "customer_index_afterbatchsuccess", "target": "customer_index_leaveselectmode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L524", "weight": 1.0}, {"source": "customer_index_afterbatchsuccess", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L525", "weight": 1.0}, {"source": "customer_index_remove", "target": "customer_index_afterbatchsuccess", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L538", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_index_onmoreopen", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L353"}, {"caller_nid": "customer_index_requestsnapshot", "callee": "stringify", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L358"}, {"caller_nid": "customer_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L360"}, {"caller_nid": "customer_index_fetchpage", "callee": "unwrapData", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L389"}, {"caller_nid": "customer_index_fetchpage", "callee": "api", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L390"}, {"caller_nid": "customer_index_fetchpage", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L394"}, {"caller_nid": "customer_index_fetchpage", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L399"}, {"caller_nid": "customer_index_fetchpage", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L401"}, {"caller_nid": "customer_index_dictlabel", "callee": "getLabel", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L452"}, {"caller_nid": "customer_index_dictlabel", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L452"}, {"caller_nid": "customer_index_dictlabel", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L452"}, {"caller_nid": "customer_index_displayvalue", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L457"}, {"caller_nid": "customer_index_cardmeta", "callee": "customerListCardMeta", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L460"}, {"caller_nid": "customer_index_isexpanded", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L467"}, {"caller_nid": "customer_index_isexpanded", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L467"}, {"caller_nid": "customer_index_toggleexpand", "callee": "stopPropagation", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L470"}, {"caller_nid": "customer_index_toggleexpand", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L471"}, {"caller_nid": "customer_index_toggleexpand", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L473"}, {"caller_nid": "customer_index_toggleexpand", "callee": "delete", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L473"}, {"caller_nid": "customer_index_toggleexpand", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L474"}, {"caller_nid": "customer_index_oncardclick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L487"}, {"caller_nid": "customer_index_oncardclick", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L488"}, {"caller_nid": "customer_index_godetail", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L494"}, {"caller_nid": "customer_index_goedit", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L497"}, {"caller_nid": "customer_index_gofollow", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L500"}, {"caller_nid": "customer_index_gonew", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L504"}, {"caller_nid": "customer_index_toggleselected", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L515"}, {"caller_nid": "customer_index_toggleselected", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L518"}, {"caller_nid": "customer_index_toggleall", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L521"}, {"caller_nid": "customer_index_remove", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L531"}, {"caller_nid": "customer_index_remove", "callee": "fetchDeleteCustomer", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L536"}, {"caller_nid": "customer_index_remove", "callee": "showSuccessToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L537"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/694d95a4779949db73852b3fe95661d7b482189c6e54919fc55964aab3daebed.json b/web-admin/graphify-out/cache/ast/694d95a4779949db73852b3fe95661d7b482189c6e54919fc55964aab3daebed.json
new file mode 100644
index 000000000..de9982bb5
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/694d95a4779949db73852b3fe95661d7b482189c6e54919fc55964aab3daebed.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_dom_mjs", "label": "test-mp-crm-quote-dom.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote-dom.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_crm_quote_dom_root", "label": "root", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote-dom.mjs", "source_location": "L4"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_dom_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote-dom.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_dom_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote-dom.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_dom_mjs", "target": "scripts_test_mp_crm_quote_dom_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote-dom.mjs", "source_location": "L4", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/69d954be9c68be369661c6df4ce3364f476e7ee2d0020a5055b3e9f89042bf84.json b/web-admin/graphify-out/cache/ast/69d954be9c68be369661c6df4ce3364f476e7ee2d0020a5055b3e9f89042bf84.json
new file mode 100644
index 000000000..b56b650ee
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/69d954be9c68be369661c6df4ce3364f476e7ee2d0020a5055b3e9f89042bf84.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L1"}, {"id": "attachment_preview_dialog_index_route", "label": "route", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L113"}, {"id": "attachment_preview_dialog_index_ismppreviewtoolbar", "label": "isMpPreviewToolbar", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L114"}, {"id": "attachment_preview_dialog_index_mpbtnsize", "label": "mpBtnSize", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L115"}, {"id": "attachment_preview_dialog_index_props", "label": "props", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L117"}, {"id": "attachment_preview_dialog_index_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L147"}, {"id": "attachment_preview_dialog_index_pdfsrc", "label": "pdfSrc", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L148"}, {"id": "attachment_preview_dialog_index_previewzoom", "label": "previewZoom", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L152"}, {"id": "attachment_preview_dialog_index_previewoffsetx", "label": "previewOffsetX", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L153"}, {"id": "attachment_preview_dialog_index_previewoffsety", "label": "previewOffsetY", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L154"}, {"id": "attachment_preview_dialog_index_previewdragging", "label": "previewDragging", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L155"}, {"id": "attachment_preview_dialog_index_previewfitbase", "label": "previewFitBase", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L156"}, {"id": "attachment_preview_dialog_index_resolvedurl", "label": "resolvedUrl", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L164"}, {"id": "attachment_preview_dialog_index_kind", "label": "kind", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L170"}, {"id": "attachment_preview_dialog_index_previewtransformcss", "label": "previewTransformCss", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L178"}, {"id": "attachment_preview_dialog_index_previewstatustext", "label": "previewStatusText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L187"}, {"id": "attachment_preview_dialog_index_refreshpreviewfitbase", "label": "refreshPreviewFitBase()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L192"}, {"id": "attachment_preview_dialog_index_resetallpreviewview", "label": "resetAllPreviewView()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L209"}, {"id": "attachment_preview_dialog_index_resetpreviewzoompan", "label": "resetPreviewZoomPan()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L218"}, {"id": "attachment_preview_dialog_index_rotatepreview", "label": "rotatePreview()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L225"}, {"id": "attachment_preview_dialog_index_nudgepreviewzoom", "label": "nudgePreviewZoom()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L230"}, {"id": "attachment_preview_dialog_index_handlepreviewimageload", "label": "handlePreviewImageLoad()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L239"}, {"id": "attachment_preview_dialog_index_handlepreviewwheel", "label": "handlePreviewWheel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L243"}, {"id": "attachment_preview_dialog_index_handlepreviewpointerdown", "label": "handlePreviewPointerDown()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L248"}, {"id": "attachment_preview_dialog_index_handlepreviewpointermove", "label": "handlePreviewPointerMove()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L260"}, {"id": "attachment_preview_dialog_index_handlepreviewpointerup", "label": "handlePreviewPointerUp()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L266"}, {"id": "attachment_preview_dialog_index_handlepreviewkeydown", "label": "handlePreviewKeydown()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L276"}, {"id": "attachment_preview_dialog_index_handlepreviewwindowresize", "label": "handlePreviewWindowResize()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L285"}, {"id": "attachment_preview_dialog_index_preparepreview", "label": "preparePreview()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L290"}, {"id": "attachment_preview_dialog_index_handleclosed", "label": "handleClosed()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L311"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "vue_router", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L94", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "icons_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L95", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_download_attachment_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L96", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "utils_download_attachment_detectattachmentpreviewkind", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L96", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "utils_download_attachment_resolveattachmentpreviewurl", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L96", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "utils_download_attachment_attachmentpreviewkind", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L96", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_image_preview_transform_js", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L101", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "utils_image_preview_transform_image_preview_zoom_min", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L101", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "utils_image_preview_transform_image_preview_zoom_max", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L101", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "utils_image_preview_transform_image_preview_zoom_step", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L101", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "utils_image_preview_transform_clamppreviewzoom", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L101", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "utils_image_preview_transform_computefitbasescale", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L101", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "utils_image_preview_transform_buildpreviewtransformcss", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L101", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L109", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "utils_mp_webview_ismpwebviewpath", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L109", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L113", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_ismppreviewtoolbar", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L114", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_mpbtnsize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L115", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L117", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_pdfsrc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L148", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_previewzoom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L152", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_previewoffsetx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L153", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_previewoffsety", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L154", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_previewdragging", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L155", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_previewfitbase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L156", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_resolvedurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L164", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_kind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L170", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_previewtransformcss", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L178", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_previewstatustext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L187", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_refreshpreviewfitbase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L192", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_resetallpreviewview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L209", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_resetpreviewzoompan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L218", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_rotatepreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_nudgepreviewzoom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_handlepreviewimageload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_handlepreviewwheel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L243", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_handlepreviewpointerdown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L248", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_handlepreviewpointermove", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L260", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_handlepreviewpointerup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_handlepreviewkeydown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L276", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_handlepreviewwindowresize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L285", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_preparepreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L290", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_preview_dialog_index_vue", "target": "attachment_preview_dialog_index_handleclosed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L311", "weight": 1.0}, {"source": "attachment_preview_dialog_index_handlepreviewimageload", "target": "attachment_preview_dialog_index_refreshpreviewfitbase", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L240", "weight": 1.0}, {"source": "attachment_preview_dialog_index_handlepreviewwheel", "target": "attachment_preview_dialog_index_nudgepreviewzoom", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L245", "weight": 1.0}, {"source": "attachment_preview_dialog_index_handlepreviewkeydown", "target": "attachment_preview_dialog_index_rotatepreview", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L278", "weight": 1.0}, {"source": "attachment_preview_dialog_index_handlepreviewkeydown", "target": "attachment_preview_dialog_index_nudgepreviewzoom", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L280", "weight": 1.0}, {"source": "attachment_preview_dialog_index_handlepreviewkeydown", "target": "attachment_preview_dialog_index_resetpreviewzoompan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L282", "weight": 1.0}, {"source": "attachment_preview_dialog_index_handlepreviewwindowresize", "target": "attachment_preview_dialog_index_refreshpreviewfitbase", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L287", "weight": 1.0}, {"source": "attachment_preview_dialog_index_preparepreview", "target": "attachment_preview_dialog_index_resetallpreviewview", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L292", "weight": 1.0}, {"source": "attachment_preview_dialog_index_handleclosed", "target": "attachment_preview_dialog_index_resetallpreviewview", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L314", "weight": 1.0}], "raw_calls": [{"caller_nid": "attachment_preview_dialog_index_refreshpreviewfitbase", "callee": "max", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L196"}, {"caller_nid": "attachment_preview_dialog_index_refreshpreviewfitbase", "callee": "max", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L197"}, {"caller_nid": "attachment_preview_dialog_index_refreshpreviewfitbase", "callee": "computeFitBaseScale", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L198"}, {"caller_nid": "attachment_preview_dialog_index_resetallpreviewview", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L215"}, {"caller_nid": "attachment_preview_dialog_index_resetpreviewzoompan", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L222"}, {"caller_nid": "attachment_preview_dialog_index_rotatepreview", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L227"}, {"caller_nid": "attachment_preview_dialog_index_nudgepreviewzoom", "callee": "clampPreviewZoom", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L231"}, {"caller_nid": "attachment_preview_dialog_index_handlepreviewpointerdown", "callee": "setPointerCapture", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L257"}, {"caller_nid": "attachment_preview_dialog_index_handlepreviewpointerup", "callee": "releasePointerCapture", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L270"}, {"caller_nid": "attachment_preview_dialog_index_preparepreview", "callee": "test", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L298"}, {"caller_nid": "attachment_preview_dialog_index_preparepreview", "callee": "resolveAttachmentPreviewUrl", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-preview-dialog/index.vue", "source_location": "L302"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/6b8af7b76fd21d5846b6dc9b963f0772068f783ec350f7003c055b3f1e41bcb7.json b/web-admin/graphify-out/cache/ast/6b8af7b76fd21d5846b6dc9b963f0772068f783ec350f7003c055b3f1e41bcb7.json
new file mode 100644
index 000000000..f96d5422e
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/6b8af7b76fd21d5846b6dc9b963f0772068f783ec350f7003c055b3f1e41bcb7.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L1"}, {"id": "plan_cert_index_tab", "label": "tab", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L162"}, {"id": "plan_cert_index_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L163"}, {"id": "plan_cert_index_appliedkeyword", "label": "appliedKeyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L164"}, {"id": "plan_cert_index_datekind", "label": "dateKind", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L166"}, {"id": "plan_cert_index_dateoptions", "label": "dateOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L167"}, {"id": "plan_cert_index_readyoptions", "label": "readyOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L174"}, {"id": "plan_cert_index_filters_toqueryparams", "label": "{ filters, toQueryParams }", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L179"}, {"id": "plan_cert_index_sort", "label": "sort", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L182"}, {"id": "plan_cert_index_quickpanel", "label": "quickPanel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L183"}, {"id": "plan_cert_index_readykind", "label": "readyKind", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L184"}, {"id": "plan_cert_index_datelabel", "label": "dateLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L185"}, {"id": "plan_cert_index_readylabel", "label": "readyLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L188"}, {"id": "plan_cert_index_datedropdownoptions", "label": "dateDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L191"}, {"id": "plan_cert_index_readydropdownoptions", "label": "readyDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L194"}, {"id": "plan_cert_index_extrafiltercount", "label": "extraFilterCount", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L199"}, {"id": "plan_cert_index_filtersopen", "label": "filtersOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L214"}, {"id": "plan_cert_index_uploadopen", "label": "uploadOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L215"}, {"id": "plan_cert_index_uploadid", "label": "uploadId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L216"}, {"id": "plan_cert_index_canupload", "label": "canUpload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L217"}, {"id": "plan_cert_index_canready", "label": "canReady", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L218"}, {"id": "plan_cert_index_canprice", "label": "canPrice", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L219"}, {"id": "plan_cert_index_permissionerror", "label": "permissionError", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L220"}, {"id": "plan_cert_index_permissionsloaded", "label": "permissionsLoaded", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L221"}, {"id": "plan_cert_index_page", "label": "page", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L223"}, {"id": "plan_cert_index_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L224"}, {"id": "plan_cert_index_selected", "label": "selected", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L225"}, {"id": "plan_cert_index_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L226"}, {"id": "plan_cert_index_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L227"}, {"id": "plan_cert_index_failedmore", "label": "failedMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L228"}, {"id": "plan_cert_index_acting", "label": "acting", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L229"}, {"id": "plan_cert_index_selectedplans", "label": "selectedPlans", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L231"}, {"id": "plan_cert_index_visiblecards", "label": "visibleCards", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L232"}, {"id": "plan_cert_index_query", "label": "query()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L243"}, {"id": "plan_cert_index_load", "label": "load()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L261"}, {"id": "plan_cert_index_search", "label": "search()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L290"}, {"id": "plan_cert_index_schedulekeywordsearch", "label": "scheduleKeywordSearch", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L294"}, {"id": "plan_cert_index_onkeywordupdate", "label": "onKeywordUpdate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L295"}, {"id": "plan_cert_index_toggle", "label": "toggle()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L312"}, {"id": "plan_cert_index_changetab", "label": "changeTab()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L318"}, {"id": "plan_cert_index_togglequickpanel", "label": "toggleQuickPanel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L328"}, {"id": "plan_cert_index_openmorefilters", "label": "openMoreFilters()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L331"}, {"id": "plan_cert_index_setdate", "label": "setDate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L336"}, {"id": "plan_cert_index_setreadyfilter", "label": "setReadyFilter()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L343"}, {"id": "plan_cert_index_applyfilters", "label": "applyFilters()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L351"}, {"id": "plan_cert_index_opendetail", "label": "openDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L374"}, {"id": "plan_cert_index_opencontract", "label": "openContract()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L377"}, {"id": "plan_cert_index_openupload", "label": "openUpload()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L380"}, {"id": "plan_cert_index_eligible", "label": "eligible()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L388"}, {"id": "plan_cert_index_saved", "label": "saved()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L391"}, {"id": "plan_cert_index_setready", "label": "setReady()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L395"}, {"id": "plan_cert_index_loadpermissions", "label": "loadPermissions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L446"}, {"id": "plan_cert_index_init", "label": "init()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L463"}, {"id": "plan_cert_index_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L466"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L134", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L135", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mplistpageskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L137", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L137", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L138", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L139", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_pl_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L140", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "pl_index_planapi", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L140", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "pl_index_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L140", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "pl_index_planlistresponse", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L140", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_auth_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "api_auth_fetchgetmenucodes", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_display_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L143", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_display_pl_plan_cert_tabs", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L143", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_display_pl_plan_default_follow_statuses", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L143", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_pl_plan_cert_columnfilterdefs_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L144", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_columnfilterdefs_plplancertcolumnfilterdefs", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L144", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_composables_useservercolumnfilters_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L145", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "composables_useservercolumnfilters_useservercolumnfilters", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L145", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_plan_list_display_rows_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L146", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_list_display_rows_flattenplanarchivepairrows", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L146", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_plan_pair_list_query_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_applymergedcustomerqueryparams", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_applycontractsidequeryparams", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_selectedcontractstopkinds", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_selectedkeywordsfromfilter", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_composables_usepltoxicproductcertcheck_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L153", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "composables_usepltoxicproductcertcheck_planhashazardproducts", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L153", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "composables_usepltoxicproductcertcheck_hazard_cert_ready_confirm_hint", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L153", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L157", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_buildquery", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L157", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_canedit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L157", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_readytargets", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L157", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_dateshortcut", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L157", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certfilters_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L158", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L159", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L160", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_cert_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L161", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_tab", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L162", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L163", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_appliedkeyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L164", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_datekind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L166", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_dateoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L167", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readyoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L174", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_filters_toqueryparams", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L179", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_sort", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L182", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_quickpanel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L183", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readykind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L184", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_datelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L185", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readylabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L188", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_datedropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L191", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readydropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L194", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_extrafiltercount", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L199", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_filtersopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L214", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_uploadopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L215", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_uploadid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_canupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_canready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L218", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_canprice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L219", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_permissionerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L220", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_permissionsloaded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L221", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L223", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L224", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_selected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L226", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L227", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_failedmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_acting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L229", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_selectedplans", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L231", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_visiblecards", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L232", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L243", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_search", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L290", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_schedulekeywordsearch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L294", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_onkeywordupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L295", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_toggle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L312", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_changetab", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L318", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_togglequickpanel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L328", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_openmorefilters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L331", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_setdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L336", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_setreadyfilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L343", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_applyfilters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L351", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_opendetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L374", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_opencontract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L377", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_openupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L380", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_eligible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L388", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_saved", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L391", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_setready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L395", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_loadpermissions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L446", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_init", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L463", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L466", "weight": 1.0}, {"source": "plan_cert_index_load", "target": "plan_cert_index_query", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L274", "weight": 1.0}, {"source": "plan_cert_index_search", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L292", "weight": 1.0}, {"source": "plan_cert_index_onkeywordupdate", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L299", "weight": 1.0}, {"source": "plan_cert_index_onkeywordupdate", "target": "plan_cert_index_schedulekeywordsearch", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L302", "weight": 1.0}, {"source": "plan_cert_index_changetab", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L326", "weight": 1.0}, {"source": "plan_cert_index_openmorefilters", "target": "plan_cert_index_toggle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L333", "weight": 1.0}, {"source": "plan_cert_index_setdate", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L341", "weight": 1.0}, {"source": "plan_cert_index_setreadyfilter", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L349", "weight": 1.0}, {"source": "plan_cert_index_applyfilters", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L372", "weight": 1.0}, {"source": "plan_cert_index_saved", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L392", "weight": 1.0}, {"source": "plan_cert_index_saved", "target": "plan_cert_index_opendetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L393", "weight": 1.0}, {"source": "plan_cert_index_setready", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L441", "weight": 1.0}, {"source": "plan_cert_index_init", "target": "plan_cert_index_loadpermissions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L464", "weight": 1.0}, {"source": "plan_cert_index_init", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L464", "weight": 1.0}], "raw_calls": [{"caller_nid": "plan_cert_index_query", "callee": "buildQuery", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L244"}, {"caller_nid": "plan_cert_index_query", "callee": "toQueryParams", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L246"}, {"caller_nid": "plan_cert_index_query", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L253"}, {"caller_nid": "plan_cert_index_query", "callee": "applyMergedCustomerQueryParams", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L257"}, {"caller_nid": "plan_cert_index_query", "callee": "applyContractSideQueryParams", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L258"}, {"caller_nid": "plan_cert_index_load", "callee": "list", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L274"}, {"caller_nid": "plan_cert_index_load", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L278"}, {"caller_nid": "plan_cert_index_load", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L282"}, {"caller_nid": "plan_cert_index_onkeywordupdate", "callee": "Boolean", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L296"}, {"caller_nid": "plan_cert_index_onkeywordupdate", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L296"}, {"caller_nid": "plan_cert_index_onkeywordupdate", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L296"}, {"caller_nid": "plan_cert_index_toggle", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L314"}, {"caller_nid": "plan_cert_index_toggle", "callee": "delete", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L314"}, {"caller_nid": "plan_cert_index_toggle", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L315"}, {"caller_nid": "plan_cert_index_setdate", "callee": "dateShortcut", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L338"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "forEach", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L352"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "keys", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L352"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "assign", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L353"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "assign", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L354"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L366"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L366"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L367"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L367"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L368"}, {"caller_nid": "plan_cert_index_opendetail", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L375"}, {"caller_nid": "plan_cert_index_opencontract", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L378"}, {"caller_nid": "plan_cert_index_openupload", "callee": "canEdit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L381"}, {"caller_nid": "plan_cert_index_openupload", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L382"}, {"caller_nid": "plan_cert_index_eligible", "callee": "readyTargets", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L389"}, {"caller_nid": "plan_cert_index_setready", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L405"}, {"caller_nid": "plan_cert_index_setready", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L406"}, {"caller_nid": "plan_cert_index_setready", "callee": "readyTargets", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L411"}, {"caller_nid": "plan_cert_index_setready", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L414"}, {"caller_nid": "plan_cert_index_setready", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L419"}, {"caller_nid": "plan_cert_index_setready", "callee": "setHazardCertReady", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L431"}, {"caller_nid": "plan_cert_index_setready", "callee": "ElMessage", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L437"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "fetchGetMenuCodes", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L452"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L454"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L455"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L456"}, {"caller_nid": "plan_cert_index_init", "callee": "allSettled", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L464"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/6e24b2242764f2d09053b6bc9825e40ee8a76d5a377d7460d881166de1fbdb63.json b/web-admin/graphify-out/cache/ast/6e24b2242764f2d09053b6bc9825e40ee8a76d5a377d7460d881166de1fbdb63.json
new file mode 100644
index 000000000..71e187a71
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/6e24b2242764f2d09053b6bc9825e40ee8a76d5a377d7460d881166de1fbdb63.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certdetail_vue", "label": "CertDetail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertDetail.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/6ef36c8a0e492c20b3019b1534b8065bc7153fdebd48035d50c2b8de85930841.json b/web-admin/graphify-out/cache/ast/6ef36c8a0e492c20b3019b1534b8065bc7153fdebd48035d50c2b8de85930841.json
new file mode 100644
index 000000000..510af8cfd
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/6ef36c8a0e492c20b3019b1534b8065bc7153fdebd48035d50c2b8de85930841.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/detail.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/702ad354ad56e4e1eeba9308218103b37549ecacd83bdf3f6c01020d9104f67c.json b/web-admin/graphify-out/cache/ast/702ad354ad56e4e1eeba9308218103b37549ecacd83bdf3f6c01020d9104f67c.json
new file mode 100644
index 000000000..6880b63da
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/702ad354ad56e4e1eeba9308218103b37549ecacd83bdf3f6c01020d9104f67c.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L1"}, {"id": "product_detail_statuslabel", "label": "statusLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L212"}, {"id": "product_detail_statustagtype", "label": "statusTagType", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L213"}, {"id": "product_detail_statusactionlabel", "label": "statusActionLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L214"}, {"id": "product_detail_showtoxic", "label": "showToxic", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L215"}, {"id": "product_detail_showexplosive", "label": "showExplosive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L216"}, {"id": "product_detail_candelete", "label": "canDelete", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L217"}, {"id": "product_detail_categorypathtext", "label": "categoryPathText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L219"}, {"id": "product_detail_taxratetext", "label": "taxRateText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L227"}, {"id": "product_detail_stocktext", "label": "stockText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L232"}, {"id": "product_detail_lowstocktext", "label": "lowStockText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L236"}, {"id": "product_detail_descriptiontext", "label": "descriptionText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L240"}, {"id": "product_detail_remarktext", "label": "remarkText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L241"}, {"id": "product_detail_imagelist", "label": "imageList", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L243"}, {"id": "product_detail_setsectionref", "label": "setSectionRef()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L255"}, {"id": "product_detail_syncstickyoffset", "label": "syncStickyOffset()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L260"}, {"id": "product_detail_scrolltosection", "label": "scrollToSection()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L266"}, {"id": "product_detail_syncactivetabfromscroll", "label": "syncActiveTabFromScroll()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L274"}, {"id": "product_detail_onscroll", "label": "onScroll()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L286"}, {"id": "product_detail_previewimages", "label": "previewImages()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L294"}, {"id": "product_detail_requestedid", "label": "requestedId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L320"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L212", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_statustagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L213", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_statusactionlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L214", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_showtoxic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L215", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_showexplosive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_candelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_categorypathtext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L219", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_taxratetext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L227", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_stocktext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L232", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_lowstocktext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L236", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_descriptiontext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L240", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_remarktext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L241", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_imagelist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L243", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_setsectionref", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L255", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_syncstickyoffset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L260", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_scrolltosection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_syncactivetabfromscroll", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L274", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_onscroll", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L286", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_previewimages", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L294", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_requestedid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L320", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_detail_syncstickyoffset", "callee": "querySelector", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L262"}, {"caller_nid": "product_detail_syncstickyoffset", "callee": "ceil", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L263"}, {"caller_nid": "product_detail_syncstickyoffset", "callee": "getBoundingClientRect", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L263"}, {"caller_nid": "product_detail_scrolltosection", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L268"}, {"caller_nid": "product_detail_scrolltosection", "callee": "scrollIntoView", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L271"}, {"caller_nid": "product_detail_syncactivetabfromscroll", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L275"}, {"caller_nid": "product_detail_syncactivetabfromscroll", "callee": "getBoundingClientRect", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L281"}, {"caller_nid": "product_detail_onscroll", "callee": "requestAnimationFrame", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L288"}, {"caller_nid": "product_detail_previewimages", "callee": "showImagePreview", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L295"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/705f8285615c2f66421aa600c57fdeaaefe673e73829cd7e377886239c84b2ee.json b/web-admin/graphify-out/cache/ast/705f8285615c2f66421aa600c57fdeaaefe673e73829cd7e377886239c84b2ee.json
new file mode 100644
index 000000000..ab50a706c
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/705f8285615c2f66421aa600c57fdeaaefe673e73829cd7e377886239c84b2ee.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "label": "form.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L1"}, {"id": "quote_form_route", "label": "route", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L34"}, {"id": "quote_form_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L35"}, {"id": "quote_form_contentloading", "label": "contentLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L36"}, {"id": "quote_form_copyfrom", "label": "copyFrom", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L40"}, {"id": "quote_form_pagetitle", "label": "pageTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L45"}, {"id": "quote_form_quoteid", "label": "quoteId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L51"}, {"id": "quote_form_copyfromid", "label": "copyFromId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L57"}, {"id": "quote_form_formkey", "label": "formKey", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L63"}, {"id": "quote_form_loadingcopy", "label": "loadingCopy", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L68"}, {"id": "quote_form_onloadingchange", "label": "onLoadingChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L82"}, {"id": "quote_form_golist", "label": "goList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L86"}, {"id": "quote_form_onsuccess", "label": "onSuccess()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L90"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "vue_router", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L24", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L25", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L26", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpstructskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L27", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformdialog_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L28", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L29", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "utils_mp_webview_mp_crm_quote_list_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L29", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L30", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_quote_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L32", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L34", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L35", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_contentloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L36", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_copyfrom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L40", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_pagetitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L45", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_quoteid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L51", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_copyfromid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L57", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_formkey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L63", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_loadingcopy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L68", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_onloadingchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L82", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_golist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L86", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_onsuccess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L90", "weight": 1.0}, {"source": "quote_form_onsuccess", "target": "quote_form_golist", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L95", "weight": 1.0}], "raw_calls": [{"caller_nid": "quote_form_golist", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L87"}, {"caller_nid": "quote_form_onsuccess", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L92"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/7499751f1af98bd98ccb65110315f12abd94e09e211ea9a2fd120f997d265d1a.json b/web-admin/graphify-out/cache/ast/7499751f1af98bd98ccb65110315f12abd94e09e211ea9a2fd120f997d265d1a.json
new file mode 100644
index 000000000..f79f3103d
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/7499751f1af98bd98ccb65110315f12abd94e09e211ea9a2fd120f997d265d1a.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_followpanel_vue", "label": "FollowPanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/FollowPanel.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/75d3f86d794fef330233d13d5d107f370065920ebb2ae343989cafdc8fd06289.json b/web-admin/graphify-out/cache/ast/75d3f86d794fef330233d13d5d107f370065920ebb2ae343989cafdc8fd06289.json
new file mode 100644
index 000000000..74d3881cc
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/75d3f86d794fef330233d13d5d107f370065920ebb2ae343989cafdc8fd06289.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L1"}, {"id": "product_index_path", "label": "path", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L324"}, {"id": "product_index_categorydropdownoptions", "label": "categoryDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L330"}, {"id": "product_index_modeldropdownoptions", "label": "modelDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L334"}, {"id": "product_index_moreactive", "label": "moreActive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L335"}, {"id": "product_index_cards", "label": "cards", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L336"}, {"id": "product_index_hasmore", "label": "hasMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L343"}, {"id": "product_index_ensurecategorypathmap", "label": "ensureCategoryPathMap()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L354"}, {"id": "product_index_ensuremodeloptions", "label": "ensureModelOptions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L376"}, {"id": "product_index_requestsnapshot", "label": "requestSnapshot()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L404"}, {"id": "product_index_isexpanded", "label": "isExpanded()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L414"}, {"id": "product_index_snapshot", "label": "snapshot", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L429"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "core", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L245", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mplistpageskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L246", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L247", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_confirm_showproductconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L247", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L248", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_product_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchproductlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchcategorytree", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchproductcolumnfacetvalues", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchupdateproductstatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchdeleteproduct", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_card_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_card_buildproductlistquery", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_card_buildproductcard", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_creator_delete_candeletebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_creator_delete_creator_delete_tip", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L258", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_tree_path_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_tree_path_buildpathlabelmapfromtreeroots", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L259", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L260", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L260", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_error_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "http_error_httperror", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_status_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "http_status_apistatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L263", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_product_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L264", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L324", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_categorydropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L330", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_modeldropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L334", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_moreactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L335", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_cards", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L336", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_hasmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L343", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_ensurecategorypathmap", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L354", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_ensuremodeloptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L376", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_requestsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L404", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_isexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L414", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_snapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L429", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_index_ensurecategorypathmap", "callee": "fetchCategoryTree", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L358"}, {"caller_nid": "product_index_ensurecategorypathmap", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L361"}, {"caller_nid": "product_index_ensurecategorypathmap", "callee": "buildPathLabelMapFromTreeRoots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L362"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "fetchProductColumnFacetValues", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L380"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L382"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L389"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L389"}, {"caller_nid": "product_index_requestsnapshot", "callee": "stringify", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L405"}, {"caller_nid": "product_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L406"}, {"caller_nid": "product_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L408"}, {"caller_nid": "product_index_isexpanded", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L415"}, {"caller_nid": "product_index_isexpanded", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L415"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/7894c7068ddbdc510f4cb1e07ca32b1005a3fbf4f6f8568df16956ecbff30c23.json b/web-admin/graphify-out/cache/ast/7894c7068ddbdc510f4cb1e07ca32b1005a3fbf4f6f8568df16956ecbff30c23.json
new file mode 100644
index 000000000..1d44c3386
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/7894c7068ddbdc510f4cb1e07ca32b1005a3fbf4f6f8568df16956ecbff30c23.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "label": "form.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L1"}, {"id": "quote_form_loadingcopy", "label": "loadingCopy", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L84"}, {"id": "quote_form_onloadingchange", "label": "onLoadingChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L98"}, {"id": "quote_form_golist", "label": "goList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L102"}, {"id": "quote_form_onsuccess", "label": "onSuccess()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L106"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_loadingcopy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L84", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_onloadingchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L98", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_golist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L102", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_form_vue", "target": "quote_form_onsuccess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L106", "weight": 1.0}, {"source": "quote_form_onsuccess", "target": "quote_form_golist", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L111", "weight": 1.0}], "raw_calls": [{"caller_nid": "quote_form_golist", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L103"}, {"caller_nid": "quote_form_onsuccess", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/form.vue", "source_location": "L108"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/7b47040bac4dedc13517b10be52107788891ff096412b4c0a5df40525115fbac.json b/web-admin/graphify-out/cache/ast/7b47040bac4dedc13517b10be52107788891ff096412b4c0a5df40525115fbac.json
new file mode 100644
index 000000000..7165441fd
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/7b47040bac4dedc13517b10be52107788891ff096412b4c0a5df40525115fbac.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "label": "MpContractList.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1"}, {"id": "contract_mpcontractlist_frominfo", "label": "fromInfo", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L587"}, {"id": "contract_mpcontractlist_b64", "label": "b64", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L593"}, {"id": "contract_mpcontractlist_pad", "label": "pad", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L594"}, {"id": "contract_mpcontractlist_obj", "label": "obj", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L595"}, {"id": "contract_mpcontractlist_map", "label": "map", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L648"}, {"id": "contract_mpcontractlist_set", "label": "set", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L678"}, {"id": "contract_mpcontractlist_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L706"}, {"id": "contract_mpcontractlist_text", "label": "text", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L922"}, {"id": "contract_mpcontractlist_next", "label": "next", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L939"}, {"id": "contract_mpcontractlist_valid", "label": "valid", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L997"}, {"id": "contract_mpcontractlist_opinion", "label": "opinion", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1096"}, {"id": "contract_mpcontractlist_reason", "label": "reason", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1147"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_frominfo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L587", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_b64", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L593", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_pad", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L594", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_obj", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L595", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_map", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L648", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L678", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L706", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L922", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_next", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L939", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_valid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L997", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_opinion", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1096", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_reason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1147", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/7bd1b8c088e5e145a2586f3a679e1b8789d7eabab450e8d610b9f71fd21eb50c.json b/web-admin/graphify-out/cache/ast/7bd1b8c088e5e145a2586f3a679e1b8789d7eabab450e8d610b9f71fd21eb50c.json
new file mode 100644
index 000000000..78d628651
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/7bd1b8c088e5e145a2586f3a679e1b8789d7eabab450e8d610b9f71fd21eb50c.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L1"}, {"id": "plan_detail_headertitle", "label": "headerTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L423"}, {"id": "plan_detail_statuslabel", "label": "statusLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L427"}, {"id": "plan_detail_statustagtype", "label": "statusTagType", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L428"}, {"id": "plan_detail_typelabel", "label": "typeLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L429"}, {"id": "plan_detail_plate", "label": "plate", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L430"}, {"id": "plan_detail_plandatetext", "label": "planDateText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L431"}, {"id": "plan_detail_isarranged", "label": "isArranged", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L432"}, {"id": "plan_detail_hasvehicle", "label": "hasVehicle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L433"}, {"id": "plan_detail_load", "label": "load", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L437"}, {"id": "plan_detail_deliveries", "label": "deliveries", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L438"}, {"id": "plan_detail_activedelivery", "label": "activeDelivery", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L439"}, {"id": "plan_detail_arrangedriverurl", "label": "arrangeDriverUrl", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L440"}, {"id": "plan_detail_loadcontracttext", "label": "loadContractText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L443"}, {"id": "plan_detail_deliverycontracttext", "label": "deliveryContractText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L448"}, {"id": "plan_detail_n", "label": "n", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L480"}, {"id": "plan_detail_el", "label": "el", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L680"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_headertitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L423", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L427", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_statustagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L428", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_typelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L429", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_plate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L430", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_plandatetext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L431", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_isarranged", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L432", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_hasvehicle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L433", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L437", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_deliveries", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L438", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_activedelivery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L439", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_arrangedriverurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L440", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_loadcontracttext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L443", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_deliverycontracttext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L448", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_n", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L480", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_detail_vue", "target": "plan_detail_el", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/detail.vue", "source_location": "L680", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/7ec6166f580e4dff33597bfb36be17b04819ad59a7745ee25bec10f1b8f27ec6.json b/web-admin/graphify-out/cache/ast/7ec6166f580e4dff33597bfb36be17b04819ad59a7745ee25bec10f1b8f27ec6.json
new file mode 100644
index 000000000..bca128f9e
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/7ec6166f580e4dff33597bfb36be17b04819ad59a7745ee25bec10f1b8f27ec6.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "label": "mp-crm-product-confirm.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L1"}, {"id": "utils_mp_crm_product_confirm_productconfirmkind", "label": "ProductConfirmKind", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L3"}, {"id": "utils_mp_crm_product_confirm_buildproductconfirminput", "label": "BuildProductConfirmInput", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L5"}, {"id": "utils_mp_crm_product_confirm_escapehtml", "label": "escapeHtml()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L12"}, {"id": "utils_mp_crm_product_confirm_dangermessagehtml", "label": "dangerMessageHtml()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L21"}, {"id": "utils_mp_crm_product_confirm_buildproductconfirmoptions", "label": "buildProductConfirmOptions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L28"}, {"id": "utils_mp_crm_product_confirm_showproductconfirmdialog", "label": "showProductConfirmDialog()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L40"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "target": "vant", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "target": "utils_mp_crm_product_confirm_productconfirmkind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "target": "utils_mp_crm_product_confirm_buildproductconfirminput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "target": "utils_mp_crm_product_confirm_escapehtml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L12", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "target": "utils_mp_crm_product_confirm_dangermessagehtml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L21", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "target": "utils_mp_crm_product_confirm_buildproductconfirmoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L28", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "target": "utils_mp_crm_product_confirm_showproductconfirmdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L40", "weight": 1.0}, {"source": "utils_mp_crm_product_confirm_dangermessagehtml", "target": "utils_mp_crm_product_confirm_escapehtml", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L24", "weight": 1.0}, {"source": "utils_mp_crm_product_confirm_buildproductconfirmoptions", "target": "utils_mp_crm_product_confirm_dangermessagehtml", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L32", "weight": 1.0}, {"source": "utils_mp_crm_product_confirm_showproductconfirmdialog", "target": "utils_mp_crm_product_confirm_buildproductconfirmoptions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L41", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_mp_crm_product_confirm_escapehtml", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L13"}, {"caller_nid": "utils_mp_crm_product_confirm_escapehtml", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L13"}, {"caller_nid": "utils_mp_crm_product_confirm_escapehtml", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L13"}, {"caller_nid": "utils_mp_crm_product_confirm_escapehtml", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L13"}, {"caller_nid": "utils_mp_crm_product_confirm_escapehtml", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L13"}, {"caller_nid": "utils_mp_crm_product_confirm_showproductconfirmdialog", "callee": "showConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-product-confirm.ts", "source_location": "L41"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/836f82e8f1612bba2f0bc38fb30ee94bfbe935e3fc1239e479a921ecbacb7528.json b/web-admin/graphify-out/cache/ast/836f82e8f1612bba2f0bc38fb30ee94bfbe935e3fc1239e479a921ecbacb7528.json
new file mode 100644
index 000000000..151b4676d
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/836f82e8f1612bba2f0bc38fb30ee94bfbe935e3fc1239e479a921ecbacb7528.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "label": "ContractAttachmentPanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L1"}, {"id": "components_contractattachmentpanel_getshortfilename", "label": "getShortFileName()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L252"}, {"id": "components_contractattachmentpanel_isfileaccepted", "label": "isFileAccepted()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L262"}, {"id": "components_contractattachmentpanel_normalizeincomingfile", "label": "normalizeIncomingFile()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L266"}, {"id": "components_contractattachmentpanel_collectclipboardfiles", "label": "collectClipboardFiles()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L274"}, {"id": "components_contractattachmentpanel_formdata", "label": "formData", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L314"}, {"id": "components_contractattachmentpanel_files", "label": "files", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L405"}, {"id": "components_contractattachmentpanel_kind", "label": "kind", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L433"}, {"id": "components_contractattachmentpanel_index", "label": "index", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L461"}, {"id": "components_contractattachmentpanel_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L475"}, {"id": "components_contractattachmentpanel_downloadcrmattachment", "label": "downloadCrmAttachment()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L480"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_getshortfilename", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L252", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_isfileaccepted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_normalizeincomingfile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_collectclipboardfiles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L274", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_formdata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L314", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L405", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L411", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_kind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L433", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_index", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L461", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L475", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_downloadcrmattachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L480", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_contractattachmentpanel_getshortfilename", "callee": "lastIndexOf", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L254"}, {"caller_nid": "components_contractattachmentpanel_getshortfilename", "callee": "substring", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L255"}, {"caller_nid": "components_contractattachmentpanel_getshortfilename", "callee": "substring", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L256"}, {"caller_nid": "components_contractattachmentpanel_getshortfilename", "callee": "substring", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L257"}, {"caller_nid": "components_contractattachmentpanel_getshortfilename", "callee": "substring", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L259"}, {"caller_nid": "components_contractattachmentpanel_isfileaccepted", "callee": "test", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L263"}, {"caller_nid": "components_contractattachmentpanel_normalizeincomingfile", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L267"}, {"caller_nid": "components_contractattachmentpanel_normalizeincomingfile", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L268"}, {"caller_nid": "components_contractattachmentpanel_normalizeincomingfile", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L269"}, {"caller_nid": "components_contractattachmentpanel_collectclipboardfiles", "callee": "forEach", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L278"}, {"caller_nid": "components_contractattachmentpanel_collectclipboardfiles", "callee": "from", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L278"}, {"caller_nid": "components_contractattachmentpanel_collectclipboardfiles", "callee": "forEach", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L285"}, {"caller_nid": "components_contractattachmentpanel_collectclipboardfiles", "callee": "from", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L285"}, {"caller_nid": "components_contractattachmentpanel_if", "callee": "msgError", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L476"}, {"caller_nid": "components_contractattachmentpanel_downloadcrmattachment", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L482"}, {"caller_nid": "components_contractattachmentpanel_downloadcrmattachment", "callee": "msgError", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L483"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/862017cf225acd082df77b1569c33ce88980c2ce178e4343612d373be117f927.json b/web-admin/graphify-out/cache/ast/862017cf225acd082df77b1569c33ce88980c2ce178e4343612d373be117f927.json
new file mode 100644
index 000000000..83739c619
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/862017cf225acd082df77b1569c33ce88980c2ce178e4343612d373be117f927.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpcontractselectsheet_vue", "label": "MpContractSelectSheet.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpContractSelectSheet.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/89c3399d594bdb56f87bfb91f035bd468d014f5f78baaea2c7cdc89d6fd51eaa.json b/web-admin/graphify-out/cache/ast/89c3399d594bdb56f87bfb91f035bd468d014f5f78baaea2c7cdc89d6fd51eaa.json
new file mode 100644
index 000000000..a776ae15f
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/89c3399d594bdb56f87bfb91f035bd468d014f5f78baaea2c7cdc89d6fd51eaa.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "label": "test-mp-crm-quote.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_crm_quote_pageerrors", "label": "pageErrors", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L17"}, {"id": "scripts_test_mp_crm_quote_calls", "label": "calls", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L18"}, {"id": "scripts_test_mp_crm_quote_quote", "label": "quote", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L21"}, {"id": "scripts_test_mp_crm_quote_approvals", "label": "approvals", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L63"}, {"id": "scripts_test_mp_crm_quote_dict", "label": "dict", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L81"}, {"id": "scripts_test_mp_crm_quote_navigateback", "label": "navigateBack()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L94"}, {"id": "scripts_test_mp_crm_quote_relaunch", "label": "reLaunch()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L95"}, {"id": "scripts_test_mp_crm_quote_getenv", "label": "getEnv()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L96"}, {"id": "scripts_test_mp_crm_quote_request", "label": "request", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L104"}, {"id": "scripts_test_mp_crm_quote_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L105"}, {"id": "scripts_test_mp_crm_quote_path", "label": "path", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L107"}, {"id": "scripts_test_mp_crm_quote_body", "label": "body", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L108"}, {"id": "scripts_test_mp_crm_quote_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L116"}, {"id": "scripts_test_mp_crm_quote_click", "label": "click()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L191"}, {"id": "scripts_test_mp_crm_quote_lastcall", "label": "lastCall()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L193"}, {"id": "scripts_test_mp_crm_quote_openmoresheet", "label": "openMoreSheet()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L195"}, {"id": "scripts_test_mp_crm_quote_assertnooverflow", "label": "assertNoOverflow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L202"}, {"id": "scripts_test_mp_crm_quote_asserttouchtarget", "label": "assertTouchTarget()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L211"}, {"id": "scripts_test_mp_crm_quote_firstmanagecard", "label": "firstManageCard", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L233"}, {"id": "scripts_test_mp_crm_quote_search", "label": "search", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L251"}, {"id": "scripts_test_mp_crm_quote_filtersheet", "label": "filterSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L277"}, {"id": "scripts_test_mp_crm_quote_stalepagerequest", "label": "stalePageRequest", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L310"}, {"id": "scripts_test_mp_crm_quote_submitsheet", "label": "submitSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L347"}, {"id": "scripts_test_mp_crm_quote_deleteaction", "label": "deleteAction", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L368"}, {"id": "scripts_test_mp_crm_quote_deletedialog", "label": "deleteDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L371"}, {"id": "scripts_test_mp_crm_quote_voiddialog", "label": "voidDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L378"}, {"id": "scripts_test_mp_crm_quote_attachment", "label": "attachment", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L401"}, {"id": "scripts_test_mp_crm_quote_previewdialog", "label": "previewDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L413"}, {"id": "scripts_test_mp_crm_quote_approvalcard", "label": "approvalCard", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L495"}, {"id": "scripts_test_mp_crm_quote_button", "label": "button", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L497"}, {"id": "scripts_test_mp_crm_quote_rejectsheet", "label": "rejectSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L504"}, {"id": "scripts_test_mp_crm_quote_rejectconfirm", "label": "rejectConfirm", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L509"}, {"id": "scripts_test_mp_crm_quote_rejectdialog", "label": "rejectDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L519"}, {"id": "scripts_test_mp_crm_quote_approvesheet", "label": "approveSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L542"}, {"id": "scripts_test_mp_crm_quote_approveconfirm", "label": "approveConfirm", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L544"}, {"id": "scripts_test_mp_crm_quote_confirmdialog", "label": "confirmDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L547"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "playwright", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_pageerrors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L17", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_calls", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L18", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_quote", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L21", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_approvals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L63", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L81", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_navigateback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L94", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_relaunch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L95", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_getenv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L96", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L104", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L105", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L107", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_body", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L108", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L116", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_click", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L191", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_lastcall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L193", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_openmoresheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L195", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_assertnooverflow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L202", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_asserttouchtarget", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L211", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_firstmanagecard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L233", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_search", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L251", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_filtersheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L277", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_stalepagerequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L310", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_submitsheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L347", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_deleteaction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L368", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_deletedialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L371", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_voiddialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L378", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_attachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L401", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_previewdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L413", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_approvalcard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L495", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_button", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L497", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_rejectsheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L504", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_rejectconfirm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L509", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_rejectdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L519", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_approvesheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L542", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_approveconfirm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L544", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_confirmdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L547", "weight": 1.0}, {"source": "scripts_test_mp_crm_quote_openmoresheet", "target": "scripts_test_mp_crm_quote_click", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L196", "weight": 1.0}], "raw_calls": [{"caller_nid": "scripts_test_mp_crm_quote_getenv", "callee": "callback", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L97"}, {"caller_nid": "scripts_test_mp_crm_quote_click", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L192"}, {"caller_nid": "scripts_test_mp_crm_quote_click", "callee": "getByRole", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L192"}, {"caller_nid": "scripts_test_mp_crm_quote_lastcall", "callee": "findLast", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L193"}, {"caller_nid": "scripts_test_mp_crm_quote_openmoresheet", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L196"}, {"caller_nid": "scripts_test_mp_crm_quote_openmoresheet", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L197"}, {"caller_nid": "scripts_test_mp_crm_quote_openmoresheet", "callee": "getByRole", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L197"}, {"caller_nid": "scripts_test_mp_crm_quote_openmoresheet", "callee": "waitFor", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L198"}, {"caller_nid": "scripts_test_mp_crm_quote_assertnooverflow", "callee": "setViewportSize", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L203"}, {"caller_nid": "scripts_test_mp_crm_quote_assertnooverflow", "callee": "equal", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L204"}, {"caller_nid": "scripts_test_mp_crm_quote_assertnooverflow", "callee": "evaluate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L205"}, {"caller_nid": "scripts_test_mp_crm_quote_asserttouchtarget", "callee": "boundingBox", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L212"}, {"caller_nid": "scripts_test_mp_crm_quote_asserttouchtarget", "callee": "ok", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L213"}, {"caller_nid": "scripts_test_mp_crm_quote_asserttouchtarget", "callee": "ok", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L214"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/8a6ad548502a871b55634cd83d53fe8194ccf243cf0eac995a728c3e717c7f56.json b/web-admin/graphify-out/cache/ast/8a6ad548502a871b55634cd83d53fe8194ccf243cf0eac995a728c3e717c7f56.json
new file mode 100644
index 000000000..26c3f2e18
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/8a6ad548502a871b55634cd83d53fe8194ccf243cf0eac995a728c3e717c7f56.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "label": "MpContractList.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1"}, {"id": "contract_mpcontractlist_frominfo", "label": "fromInfo", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L582"}, {"id": "contract_mpcontractlist_b64", "label": "b64", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L588"}, {"id": "contract_mpcontractlist_pad", "label": "pad", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L589"}, {"id": "contract_mpcontractlist_obj", "label": "obj", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L590"}, {"id": "contract_mpcontractlist_map", "label": "map", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L643"}, {"id": "contract_mpcontractlist_set", "label": "set", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L673"}, {"id": "contract_mpcontractlist_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L701"}, {"id": "contract_mpcontractlist_text", "label": "text", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L917"}, {"id": "contract_mpcontractlist_next", "label": "next", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L934"}, {"id": "contract_mpcontractlist_valid", "label": "valid", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L992"}, {"id": "contract_mpcontractlist_opinion", "label": "opinion", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1091"}, {"id": "contract_mpcontractlist_reason", "label": "reason", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1142"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_frominfo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L582", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_b64", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L588", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_pad", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L589", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_obj", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L590", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_map", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L643", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L673", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L701", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L917", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_next", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L934", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_valid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L992", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_opinion", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1091", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_mpcontractlist_vue", "target": "contract_mpcontractlist_reason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/MpContractList.vue", "source_location": "L1142", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/8c80101bfe2fefb241895e163dc3ecd345aa1e3c2c485374eae76cfe55743bd5.json b/web-admin/graphify-out/cache/ast/8c80101bfe2fefb241895e163dc3ecd345aa1e3c2c485374eae76cfe55743bd5.json
new file mode 100644
index 000000000..215fb810c
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/8c80101bfe2fefb241895e163dc3ecd345aa1e3c2c485374eae76cfe55743bd5.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "label": "categories.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L1"}, {"id": "product_categories_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L424"}, {"id": "product_categories_payload", "label": "payload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L481"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "target": "product_categories_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L424", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "target": "product_categories_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L481", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_categories_if", "callee": "showFailToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L425"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/8deae29121a6fe09bd06edd48bd1a0cedbd1d9508fe9b3f3b28a3293f70f470b.json b/web-admin/graphify-out/cache/ast/8deae29121a6fe09bd06edd48bd1a0cedbd1d9508fe9b3f3b28a3293f70f470b.json
new file mode 100644
index 000000000..330bef686
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/8deae29121a6fe09bd06edd48bd1a0cedbd1d9508fe9b3f3b28a3293f70f470b.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L1"}, {"id": "product_detail_statuslabel", "label": "statusLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L213"}, {"id": "product_detail_statustagtype", "label": "statusTagType", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L214"}, {"id": "product_detail_statusactionlabel", "label": "statusActionLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L215"}, {"id": "product_detail_showtoxic", "label": "showToxic", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L216"}, {"id": "product_detail_showexplosive", "label": "showExplosive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L217"}, {"id": "product_detail_candelete", "label": "canDelete", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L218"}, {"id": "product_detail_categorypathtext", "label": "categoryPathText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L220"}, {"id": "product_detail_taxratetext", "label": "taxRateText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L228"}, {"id": "product_detail_stocktext", "label": "stockText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L233"}, {"id": "product_detail_lowstocktext", "label": "lowStockText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L237"}, {"id": "product_detail_descriptiontext", "label": "descriptionText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L241"}, {"id": "product_detail_remarktext", "label": "remarkText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L242"}, {"id": "product_detail_imagelist", "label": "imageList", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L244"}, {"id": "product_detail_setsectionref", "label": "setSectionRef()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L256"}, {"id": "product_detail_syncstickyoffset", "label": "syncStickyOffset()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L261"}, {"id": "product_detail_scrolltosection", "label": "scrollToSection()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L267"}, {"id": "product_detail_syncactivetabfromscroll", "label": "syncActiveTabFromScroll()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L275"}, {"id": "product_detail_onscroll", "label": "onScroll()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L287"}, {"id": "product_detail_previewimages", "label": "previewImages()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L295"}, {"id": "product_detail_requestedid", "label": "requestedId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L321"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L213", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_statustagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L214", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_statusactionlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L215", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_showtoxic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_showexplosive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_candelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L218", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_categorypathtext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L220", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_taxratetext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_stocktext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L233", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_lowstocktext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L237", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_descriptiontext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L241", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_remarktext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L242", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_imagelist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_setsectionref", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L256", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_syncstickyoffset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_scrolltosection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L267", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_syncactivetabfromscroll", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L275", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_onscroll", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L287", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_previewimages", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L295", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_requestedid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L321", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_detail_syncstickyoffset", "callee": "querySelector", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L263"}, {"caller_nid": "product_detail_syncstickyoffset", "callee": "ceil", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L264"}, {"caller_nid": "product_detail_syncstickyoffset", "callee": "getBoundingClientRect", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L264"}, {"caller_nid": "product_detail_scrolltosection", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L269"}, {"caller_nid": "product_detail_scrolltosection", "callee": "scrollIntoView", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L272"}, {"caller_nid": "product_detail_syncactivetabfromscroll", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L276"}, {"caller_nid": "product_detail_syncactivetabfromscroll", "callee": "getBoundingClientRect", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L282"}, {"caller_nid": "product_detail_onscroll", "callee": "requestAnimationFrame", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L289"}, {"caller_nid": "product_detail_previewimages", "callee": "showImagePreview", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L296"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/8fc9107b5ae01863ab2e1e7d6e8131f925154a632b7e226513ca75a8d2da5dd7.json b/web-admin/graphify-out/cache/ast/8fc9107b5ae01863ab2e1e7d6e8131f925154a632b7e226513ca75a8d2da5dd7.json
new file mode 100644
index 000000000..6ea30aa59
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/8fc9107b5ae01863ab2e1e7d6e8131f925154a632b7e226513ca75a8d2da5dd7.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L1"}, {"id": "customer_index_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L243"}, {"id": "customer_index_dict", "label": "dict", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244"}, {"id": "customer_index_views", "label": "views", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L245"}, {"id": "customer_index_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L252"}, {"id": "customer_index_filtersopen", "label": "filtersOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L254"}, {"id": "customer_index_poolopen", "label": "poolOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L255"}, {"id": "customer_index_speedopen", "label": "speedOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L256"}, {"id": "customer_index_selectmode", "label": "selectMode", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L257"}, {"id": "customer_index_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L260"}, {"id": "customer_index_page", "label": "page", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L261"}, {"id": "customer_index_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L262"}, {"id": "customer_index_deleting", "label": "deleting", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L263"}, {"id": "customer_index_forbidden", "label": "forbidden", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L264"}, {"id": "customer_index_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L265"}, {"id": "customer_index_listfieldsplit", "label": "listFieldSplit", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L268"}, {"id": "customer_index_selectedrows", "label": "selectedRows", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L271"}, {"id": "customer_index_candelete", "label": "canDelete", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L274"}, {"id": "customer_index_allloadedselected", "label": "allLoadedSelected", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L277"}, {"id": "customer_index_hasmore", "label": "hasMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L281"}, {"id": "customer_index_loadhinttext", "label": "loadHintText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L282"}, {"id": "customer_index_typefilter", "label": "typeFilter", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L296"}, {"id": "customer_index_levelfilter", "label": "levelFilter", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L297"}, {"id": "customer_index_typefilteroptions", "label": "typeFilterOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L298"}, {"id": "customer_index_levelfilteroptions", "label": "levelFilterOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L305"}, {"id": "customer_index_moreactive", "label": "moreActive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L312"}, {"id": "customer_index_ontypefilterchange", "label": "onTypeFilterChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L331"}, {"id": "customer_index_onlevelfilterchange", "label": "onLevelFilterChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L336"}, {"id": "customer_index_onmoreopen", "label": "onMoreOpen()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L342"}, {"id": "customer_index_requestsnapshot", "label": "requestSnapshot()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L348"}, {"id": "customer_index_fetchpage", "label": "fetchPage()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L357"}, {"id": "customer_index_reload", "label": "reload()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L416"}, {"id": "customer_index_onshellready", "label": "onShellReady()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L420"}, {"id": "customer_index_retry", "label": "retry()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L423"}, {"id": "customer_index_onkeywordupdate", "label": "onKeywordUpdate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L426"}, {"id": "customer_index_onviewchange", "label": "onViewChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L431"}, {"id": "customer_index_applyfilters", "label": "applyFilters()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L435"}, {"id": "customer_index_dictlabel", "label": "dictLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L441"}, {"id": "customer_index_displayvalue", "label": "displayValue()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L444"}, {"id": "customer_index_cardmeta", "label": "cardMeta()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L449"}, {"id": "customer_index_isexpanded", "label": "isExpanded()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L456"}, {"id": "customer_index_toggleexpand", "label": "toggleExpand()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L459"}, {"id": "customer_index_statuslabel", "label": "statusLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L467"}, {"id": "customer_index_oncardclick", "label": "onCardClick()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L475"}, {"id": "customer_index_godetail", "label": "goDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L483"}, {"id": "customer_index_goedit", "label": "goEdit()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L486"}, {"id": "customer_index_gofollow", "label": "goFollow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L489"}, {"id": "customer_index_gonew", "label": "goNew()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L492"}, {"id": "customer_index_enterselectmode", "label": "enterSelectMode()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L496"}, {"id": "customer_index_leaveselectmode", "label": "leaveSelectMode()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L500"}, {"id": "customer_index_toggleselected", "label": "toggleSelected()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L504"}, {"id": "customer_index_toggleall", "label": "toggleAll()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L510"}, {"id": "customer_index_afterbatchsuccess", "label": "afterBatchSuccess()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L513"}, {"id": "customer_index_remove", "label": "remove()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L517"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L212", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L212", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L213", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L214", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mplistpageskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L215", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_customer_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchcustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchmycustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchtofollowcustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchkeycustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "crm_customer_fetchdeletecustomer", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L223", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L223", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_error_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L224", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "http_error_httperror", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L224", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_status_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "http_status_apistatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_dict_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L226", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "modules_dict_usedictstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L226", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L227", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_creator_delete_allrowsdeletablebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L227", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "utils_creator_delete_creator_delete_tip", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L227", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerpoolsheet_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L229", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_customer_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_customerlistcardmeta", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_splitcustomerlistfields", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_unwrapdata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_unwraprows", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_field", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_model_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L243", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_views", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L245", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L252", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_filtersopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L254", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_poolopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L255", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_speedopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L256", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_selectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L260", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_deleting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L263", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_forbidden", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L264", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L265", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_listfieldsplit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L268", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_selectedrows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L271", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_candelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L274", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_allloadedselected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L277", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_hasmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L281", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_loadhinttext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L282", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_typefilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L296", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_levelfilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L297", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_typefilteroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L298", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_levelfilteroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L305", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_moreactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L312", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_ontypefilterchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L331", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onlevelfilterchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L336", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onmoreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L342", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_requestsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L348", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_fetchpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L357", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_reload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L416", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onshellready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L420", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_retry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L423", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onkeywordupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L426", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_onviewchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L431", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_applyfilters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L435", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_dictlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L441", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_displayvalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L444", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_cardmeta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L449", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_isexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L456", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleexpand", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L459", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L467", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_oncardclick", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L475", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_godetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L483", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_goedit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L486", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_gofollow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L489", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_gonew", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L492", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_enterselectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L496", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_leaveselectmode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L500", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleselected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L504", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_toggleall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L510", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_afterbatchsuccess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L513", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_index_vue", "target": "customer_index_remove", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L517", "weight": 1.0}, {"source": "customer_index_ontypefilterchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L334", "weight": 1.0}, {"source": "customer_index_onlevelfilterchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L339", "weight": 1.0}, {"source": "customer_index_fetchpage", "target": "customer_index_requestsnapshot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L361", "weight": 1.0}, {"source": "customer_index_reload", "target": "customer_index_fetchpage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L417", "weight": 1.0}, {"source": "customer_index_onshellready", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L421", "weight": 1.0}, {"source": "customer_index_retry", "target": "customer_index_fetchpage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L424", "weight": 1.0}, {"source": "customer_index_onkeywordupdate", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L429", "weight": 1.0}, {"source": "customer_index_onviewchange", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L433", "weight": 1.0}, {"source": "customer_index_applyfilters", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L439", "weight": 1.0}, {"source": "customer_index_displayvalue", "target": "customer_index_dictlabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L446", "weight": 1.0}, {"source": "customer_index_cardmeta", "target": "customer_index_statuslabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L451", "weight": 1.0}, {"source": "customer_index_statuslabel", "target": "customer_index_dictlabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L468", "weight": 1.0}, {"source": "customer_index_oncardclick", "target": "customer_index_toggleselected", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L478", "weight": 1.0}, {"source": "customer_index_oncardclick", "target": "customer_index_godetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L481", "weight": 1.0}, {"source": "customer_index_afterbatchsuccess", "target": "customer_index_leaveselectmode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L514", "weight": 1.0}, {"source": "customer_index_afterbatchsuccess", "target": "customer_index_reload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L515", "weight": 1.0}, {"source": "customer_index_remove", "target": "customer_index_afterbatchsuccess", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L528", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_index_onmoreopen", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L344"}, {"caller_nid": "customer_index_requestsnapshot", "callee": "stringify", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L349"}, {"caller_nid": "customer_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L351"}, {"caller_nid": "customer_index_fetchpage", "callee": "unwrapData", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L380"}, {"caller_nid": "customer_index_fetchpage", "callee": "api", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L381"}, {"caller_nid": "customer_index_fetchpage", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L385"}, {"caller_nid": "customer_index_fetchpage", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L390"}, {"caller_nid": "customer_index_fetchpage", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L392"}, {"caller_nid": "customer_index_onkeywordupdate", "callee": "Boolean", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L427"}, {"caller_nid": "customer_index_onkeywordupdate", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L427"}, {"caller_nid": "customer_index_onkeywordupdate", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L427"}, {"caller_nid": "customer_index_dictlabel", "callee": "getLabel", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L442"}, {"caller_nid": "customer_index_dictlabel", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L442"}, {"caller_nid": "customer_index_dictlabel", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L442"}, {"caller_nid": "customer_index_displayvalue", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L447"}, {"caller_nid": "customer_index_cardmeta", "callee": "customerListCardMeta", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L450"}, {"caller_nid": "customer_index_isexpanded", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L457"}, {"caller_nid": "customer_index_isexpanded", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L457"}, {"caller_nid": "customer_index_toggleexpand", "callee": "stopPropagation", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L460"}, {"caller_nid": "customer_index_toggleexpand", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L461"}, {"caller_nid": "customer_index_toggleexpand", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L463"}, {"caller_nid": "customer_index_toggleexpand", "callee": "delete", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L463"}, {"caller_nid": "customer_index_toggleexpand", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L464"}, {"caller_nid": "customer_index_oncardclick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L477"}, {"caller_nid": "customer_index_oncardclick", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L478"}, {"caller_nid": "customer_index_godetail", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L484"}, {"caller_nid": "customer_index_goedit", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L487"}, {"caller_nid": "customer_index_gofollow", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L490"}, {"caller_nid": "customer_index_gonew", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L494"}, {"caller_nid": "customer_index_toggleselected", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L505"}, {"caller_nid": "customer_index_toggleselected", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L508"}, {"caller_nid": "customer_index_toggleall", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L511"}, {"caller_nid": "customer_index_remove", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L521"}, {"caller_nid": "customer_index_remove", "callee": "fetchDeleteCustomer", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L526"}, {"caller_nid": "customer_index_remove", "callee": "showSuccessToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/index.vue", "source_location": "L527"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/90f934fe033341e2b8571a068f5929c7ded90f4233d1ca2d9571c3b7ae5d389a.json b/web-admin/graphify-out/cache/ast/90f934fe033341e2b8571a068f5929c7ded90f4233d1ca2d9571c3b7ae5d389a.json
new file mode 100644
index 000000000..cd6dc4261
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/90f934fe033341e2b8571a068f5929c7ded90f4233d1ca2d9571c3b7ae5d389a.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpattachmentgrid_vue", "label": "MpAttachmentGrid.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpAttachmentGrid.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/93d27f5b28dead228272a5394085f595a02ea0d934585f953fcfbad18905c1a4.json b/web-admin/graphify-out/cache/ast/93d27f5b28dead228272a5394085f595a02ea0d934585f953fcfbad18905c1a4.json
new file mode 100644
index 000000000..ae103c803
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/93d27f5b28dead228272a5394085f595a02ea0d934585f953fcfbad18905c1a4.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mplistpageskeleton_vue", "label": "MpListPageSkeleton.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpListPageSkeleton.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/956be5d11b51c772745059d25963e3f5a66ebc7fe00e981efb4c392b06b83dae.json b/web-admin/graphify-out/cache/ast/956be5d11b51c772745059d25963e3f5a66ebc7fe00e981efb4c392b06b83dae.json
new file mode 100644
index 000000000..1a444e389
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/956be5d11b51c772745059d25963e3f5a66ebc7fe00e981efb4c392b06b83dae.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "label": "MpBusinessHeader.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpBusinessHeader.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/95ad930afb170877b5f7747306867935e67a813c58a7e21a0ca32d0a6acf6b7d.json b/web-admin/graphify-out/cache/ast/95ad930afb170877b5f7747306867935e67a813c58a7e21a0ca32d0a6acf6b7d.json
new file mode 100644
index 000000000..cd6dc4261
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/95ad930afb170877b5f7747306867935e67a813c58a7e21a0ca32d0a6acf6b7d.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpattachmentgrid_vue", "label": "MpAttachmentGrid.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpAttachmentGrid.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/95bf79e50fe640d89b9a581592de4ed6a4b713351365b568de352d9505583bfd.json b/web-admin/graphify-out/cache/ast/95bf79e50fe640d89b9a581592de4ed6a4b713351365b568de352d9505583bfd.json
new file mode 100644
index 000000000..e8422948a
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/95bf79e50fe640d89b9a581592de4ed6a4b713351365b568de352d9505583bfd.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L1"}, {"id": "product_detail_statuslabel", "label": "statusLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L213"}, {"id": "product_detail_statustagtype", "label": "statusTagType", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L214"}, {"id": "product_detail_statusactionlabel", "label": "statusActionLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L215"}, {"id": "product_detail_showtoxic", "label": "showToxic", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L216"}, {"id": "product_detail_showexplosive", "label": "showExplosive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L217"}, {"id": "product_detail_candelete", "label": "canDelete", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L218"}, {"id": "product_detail_categorypathtext", "label": "categoryPathText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L220"}, {"id": "product_detail_taxratetext", "label": "taxRateText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L228"}, {"id": "product_detail_stocktext", "label": "stockText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L233"}, {"id": "product_detail_lowstocktext", "label": "lowStockText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L237"}, {"id": "product_detail_descriptiontext", "label": "descriptionText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L241"}, {"id": "product_detail_remarktext", "label": "remarkText", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L242"}, {"id": "product_detail_setsectionref", "label": "setSectionRef()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L261"}, {"id": "product_detail_syncstickyoffset", "label": "syncStickyOffset()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L266"}, {"id": "product_detail_scrolltosection", "label": "scrollToSection()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L272"}, {"id": "product_detail_syncactivetabfromscroll", "label": "syncActiveTabFromScroll()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L280"}, {"id": "product_detail_onscroll", "label": "onScroll()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L292"}, {"id": "product_detail_previewattachment", "label": "previewAttachment()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L300"}, {"id": "product_detail_downloadattachment", "label": "downloadAttachment()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L304"}, {"id": "product_detail_requestedid", "label": "requestedId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L330"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L213", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_statustagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L214", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_statusactionlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L215", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_showtoxic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L216", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_showexplosive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_candelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L218", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_categorypathtext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L220", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_taxratetext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_stocktext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L233", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_lowstocktext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L237", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_descriptiontext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L241", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_remarktext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L242", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_setsectionref", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_syncstickyoffset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_scrolltosection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L272", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_syncactivetabfromscroll", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L280", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_onscroll", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L292", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_previewattachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L300", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_downloadattachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L304", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_detail_vue", "target": "product_detail_requestedid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L330", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_detail_syncstickyoffset", "callee": "querySelector", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L268"}, {"caller_nid": "product_detail_syncstickyoffset", "callee": "ceil", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L269"}, {"caller_nid": "product_detail_syncstickyoffset", "callee": "getBoundingClientRect", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L269"}, {"caller_nid": "product_detail_scrolltosection", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L274"}, {"caller_nid": "product_detail_scrolltosection", "callee": "scrollIntoView", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L277"}, {"caller_nid": "product_detail_syncactivetabfromscroll", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L281"}, {"caller_nid": "product_detail_syncactivetabfromscroll", "callee": "getBoundingClientRect", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L287"}, {"caller_nid": "product_detail_onscroll", "callee": "requestAnimationFrame", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L294"}, {"caller_nid": "product_detail_previewattachment", "callee": "openCrmAttachmentPreviewInNewTab", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L301"}, {"caller_nid": "product_detail_downloadattachment", "callee": "downloadCrmAttachment", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/detail.vue", "source_location": "L305"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/95d72731a24ddff5c37a68531aab22ab1122a0dec3ce2d54f2203a0e20365fb7.json b/web-admin/graphify-out/cache/ast/95d72731a24ddff5c37a68531aab22ab1122a0dec3ce2d54f2203a0e20365fb7.json
new file mode 100644
index 000000000..4176e500d
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/95d72731a24ddff5c37a68531aab22ab1122a0dec3ce2d54f2203a0e20365fb7.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "label": "test-mp-crm-quote.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_crm_quote_pageerrors", "label": "pageErrors", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L17"}, {"id": "scripts_test_mp_crm_quote_calls", "label": "calls", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L18"}, {"id": "scripts_test_mp_crm_quote_quote", "label": "quote", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L21"}, {"id": "scripts_test_mp_crm_quote_approvals", "label": "approvals", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L63"}, {"id": "scripts_test_mp_crm_quote_dict", "label": "dict", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L81"}, {"id": "scripts_test_mp_crm_quote_navigateback", "label": "navigateBack()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L94"}, {"id": "scripts_test_mp_crm_quote_relaunch", "label": "reLaunch()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L95"}, {"id": "scripts_test_mp_crm_quote_getenv", "label": "getEnv()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L96"}, {"id": "scripts_test_mp_crm_quote_request", "label": "request", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L104"}, {"id": "scripts_test_mp_crm_quote_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L105"}, {"id": "scripts_test_mp_crm_quote_path", "label": "path", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L107"}, {"id": "scripts_test_mp_crm_quote_body", "label": "body", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L108"}, {"id": "scripts_test_mp_crm_quote_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L116"}, {"id": "scripts_test_mp_crm_quote_click", "label": "click()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L188"}, {"id": "scripts_test_mp_crm_quote_lastcall", "label": "lastCall()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L190"}, {"id": "scripts_test_mp_crm_quote_openmoresheet", "label": "openMoreSheet()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L192"}, {"id": "scripts_test_mp_crm_quote_assertnooverflow", "label": "assertNoOverflow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L199"}, {"id": "scripts_test_mp_crm_quote_asserttouchtarget", "label": "assertTouchTarget()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L208"}, {"id": "scripts_test_mp_crm_quote_firstmanagecard", "label": "firstManageCard", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L230"}, {"id": "scripts_test_mp_crm_quote_search", "label": "search", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L248"}, {"id": "scripts_test_mp_crm_quote_filtersheet", "label": "filterSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L274"}, {"id": "scripts_test_mp_crm_quote_stalepagerequest", "label": "stalePageRequest", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L307"}, {"id": "scripts_test_mp_crm_quote_submitsheet", "label": "submitSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L344"}, {"id": "scripts_test_mp_crm_quote_deleteaction", "label": "deleteAction", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L365"}, {"id": "scripts_test_mp_crm_quote_deletedialog", "label": "deleteDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L368"}, {"id": "scripts_test_mp_crm_quote_voiddialog", "label": "voidDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L375"}, {"id": "scripts_test_mp_crm_quote_attachment", "label": "attachment", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L398"}, {"id": "scripts_test_mp_crm_quote_previewdialog", "label": "previewDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L410"}, {"id": "scripts_test_mp_crm_quote_approvalcard", "label": "approvalCard", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L492"}, {"id": "scripts_test_mp_crm_quote_button", "label": "button", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L494"}, {"id": "scripts_test_mp_crm_quote_rejectsheet", "label": "rejectSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L501"}, {"id": "scripts_test_mp_crm_quote_rejectconfirm", "label": "rejectConfirm", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L506"}, {"id": "scripts_test_mp_crm_quote_rejectdialog", "label": "rejectDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L516"}, {"id": "scripts_test_mp_crm_quote_approvesheet", "label": "approveSheet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L539"}, {"id": "scripts_test_mp_crm_quote_approveconfirm", "label": "approveConfirm", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L541"}, {"id": "scripts_test_mp_crm_quote_confirmdialog", "label": "confirmDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L544"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "playwright", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_pageerrors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L17", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_calls", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L18", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_quote", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L21", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_approvals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L63", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L81", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_navigateback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L94", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_relaunch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L95", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_getenv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L96", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L104", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L105", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L107", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_body", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L108", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L116", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_click", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L188", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_lastcall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L190", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_openmoresheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L192", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_assertnooverflow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L199", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_asserttouchtarget", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L208", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_firstmanagecard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L230", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_search", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L248", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_filtersheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L274", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_stalepagerequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L307", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_submitsheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L344", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_deleteaction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L365", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_deletedialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L368", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_voiddialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L375", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_attachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L398", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_previewdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L410", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_approvalcard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L492", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_button", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L494", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_rejectsheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L501", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_rejectconfirm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L506", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_rejectdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L516", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_approvesheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L539", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_approveconfirm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L541", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_mjs", "target": "scripts_test_mp_crm_quote_confirmdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L544", "weight": 1.0}, {"source": "scripts_test_mp_crm_quote_openmoresheet", "target": "scripts_test_mp_crm_quote_click", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L193", "weight": 1.0}], "raw_calls": [{"caller_nid": "scripts_test_mp_crm_quote_getenv", "callee": "callback", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L97"}, {"caller_nid": "scripts_test_mp_crm_quote_click", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L189"}, {"caller_nid": "scripts_test_mp_crm_quote_click", "callee": "getByRole", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L189"}, {"caller_nid": "scripts_test_mp_crm_quote_lastcall", "callee": "findLast", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L190"}, {"caller_nid": "scripts_test_mp_crm_quote_openmoresheet", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L193"}, {"caller_nid": "scripts_test_mp_crm_quote_openmoresheet", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L194"}, {"caller_nid": "scripts_test_mp_crm_quote_openmoresheet", "callee": "getByRole", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L194"}, {"caller_nid": "scripts_test_mp_crm_quote_openmoresheet", "callee": "waitFor", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L195"}, {"caller_nid": "scripts_test_mp_crm_quote_assertnooverflow", "callee": "setViewportSize", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L200"}, {"caller_nid": "scripts_test_mp_crm_quote_assertnooverflow", "callee": "equal", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L201"}, {"caller_nid": "scripts_test_mp_crm_quote_assertnooverflow", "callee": "evaluate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L202"}, {"caller_nid": "scripts_test_mp_crm_quote_asserttouchtarget", "callee": "boundingBox", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L209"}, {"caller_nid": "scripts_test_mp_crm_quote_asserttouchtarget", "callee": "ok", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L210"}, {"caller_nid": "scripts_test_mp_crm_quote_asserttouchtarget", "callee": "ok", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote.mjs", "source_location": "L211"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/9a4d8b839d729e6309348b5b3c180c8371d8a2fbfd02c8873385558117a2c96c.json b/web-admin/graphify-out/cache/ast/9a4d8b839d729e6309348b5b3c180c8371d8a2fbfd02c8873385558117a2c96c.json
new file mode 100644
index 000000000..42600ebf9
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/9a4d8b839d729e6309348b5b3c180c8371d8a2fbfd02c8873385558117a2c96c.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_mpquotelist_vue", "label": "MpQuoteList.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/MpQuoteList.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/9afab4b8c1365b68e7c7afba427173719079509dfee084863ca012d693702415.json b/web-admin/graphify-out/cache/ast/9afab4b8c1365b68e7c7afba427173719079509dfee084863ca012d693702415.json
new file mode 100644
index 000000000..16d87ecce
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/9afab4b8c1365b68e7c7afba427173719079509dfee084863ca012d693702415.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certattachments_vue", "label": "CertAttachments.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertAttachments.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/9b78d1fdb31df6b620285c88cb4e9c6884d0d99ba575d83f29cca5c336189a21.json b/web-admin/graphify-out/cache/ast/9b78d1fdb31df6b620285c88cb4e9c6884d0d99ba575d83f29cca5c336189a21.json
new file mode 100644
index 000000000..fd9cd0490
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/9b78d1fdb31df6b620285c88cb4e9c6884d0d99ba575d83f29cca5c336189a21.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "label": "mp-crm-quote-card.test.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L1"}, {"id": "utils_mp_crm_quote_card_test_q", "label": "q", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L50"}, {"id": "utils_mp_crm_quote_card_test_card", "label": "card", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L140"}, {"id": "utils_mp_crm_quote_card_test_approvals", "label": "approvals", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L187"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "node_test", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_mp_quote_manage_tabs", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_mp_quote_approve_tabs", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_buildquotelistquery", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_buildquotecard", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_formatquotemoney", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_formatquoteproductinfoforcard", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_findpendingquoteapproval", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_quotetypelabel", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_quotetypetagtype", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_test_q", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L50", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_test_q", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L65", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_test_q", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L78", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_test_q", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L91", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_test_q", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L105", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_test_card", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L140", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_test_approvals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L187", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_test_approvals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L196", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_test_approvals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L205", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_test_ts", "target": "utils_mp_crm_quote_card_test_approvals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.test.ts", "source_location": "L213", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/9c75a9912e5de3a5076efacf1fb7dc5c5473a4dc27edfad8031e407e07cdb779.json b/web-admin/graphify-out/cache/ast/9c75a9912e5de3a5076efacf1fb7dc5c5473a4dc27edfad8031e407e07cdb779.json
new file mode 100644
index 000000000..1ac6f29b5
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/9c75a9912e5de3a5076efacf1fb7dc5c5473a4dc27edfad8031e407e07cdb779.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpcarrierlibraryselectsheet_vue", "label": "MpCarrierLibrarySelectSheet.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpCarrierLibrarySelectSheet.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/9cb71bdb25c08a490c99cf70405e15c73dc44de51981e1910cc4c7e5c5eb2408.json b/web-admin/graphify-out/cache/ast/9cb71bdb25c08a490c99cf70405e15c73dc44de51981e1910cc4c7e5c5eb2408.json
new file mode 100644
index 000000000..799db4a70
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/9cb71bdb25c08a490c99cf70405e15c73dc44de51981e1910cc4c7e5c5eb2408.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "label": "CustomerFilters.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L1"}, {"id": "customer_customerfilters_defs", "label": "defs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L236"}, {"id": "customer_customerfilters_enumdefswithoptions", "label": "enumDefsWithOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L237"}, {"id": "customer_customerfilters_enumdefsneedfacet", "label": "enumDefsNeedFacet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L240"}, {"id": "customer_customerfilters_textdefs", "label": "textDefs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L243"}, {"id": "customer_customerfilters_datetimedefs", "label": "datetimeDefs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L244"}, {"id": "customer_customerfilters_numberdefs", "label": "numberDefs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L245"}, {"id": "customer_customerfilters_viewoptions", "label": "viewOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L247"}, {"id": "customer_customerfilters_numberopoptions", "label": "numberOpOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L253"}, {"id": "customer_customerfilters_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L270"}, {"id": "customer_customerfilters_number", "label": "number", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L271"}, {"id": "customer_customerfilters_singleopen", "label": "singleOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L275"}, {"id": "customer_customerfilters_numberopprop", "label": "numberOpProp", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L277"}, {"id": "customer_customerfilters_singlecolumns", "label": "singleColumns", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L278"}, {"id": "customer_customerfilters_singlevalue", "label": "singleValue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L284"}, {"id": "customer_customerfilters_enumopen", "label": "enumOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L289"}, {"id": "customer_customerfilters_enumprop", "label": "enumProp", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L290"}, {"id": "customer_customerfilters_enumtitle", "label": "enumTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L291"}, {"id": "customer_customerfilters_enumremote", "label": "enumRemote", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L294"}, {"id": "customer_customerfilters_enumkeyword", "label": "enumKeyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L295"}, {"id": "customer_customerfilters_enumloading", "label": "enumLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L296"}, {"id": "customer_customerfilters_dateopen", "label": "dateOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L300"}, {"id": "customer_customerfilters_datekey", "label": "dateKey", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L301"}, {"id": "customer_customerfilters_viewlabel", "label": "viewLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L305"}, {"id": "customer_customerfilters_numberoplabel", "label": "numberOpLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L308"}, {"id": "customer_customerfilters_displaydatetime", "label": "displayDateTime()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L311"}, {"id": "customer_customerfilters_enumsummary", "label": "enumSummary()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L315"}, {"id": "customer_customerfilters_clearfacets", "label": "clearFacets()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L322"}, {"id": "customer_customerfilters_resetdraft", "label": "resetDraft()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L329"}, {"id": "customer_customerfilters_scheduleliveapply", "label": "scheduleLiveApply", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L341"}, {"id": "customer_customerfilters_syncfromprops", "label": "syncFromProps()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L350"}, {"id": "customer_customerfilters_close", "label": "close()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L409"}, {"id": "customer_customerfilters_rawcontext", "label": "rawContext", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L445"}, {"id": "customer_customerfilters_context", "label": "context", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L453"}, {"id": "customer_customerfilters_idx", "label": "idx", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L525"}, {"id": "customer_customerfilters_set", "label": "set", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L530"}, {"id": "customer_customerfilters_raw", "label": "raw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L550"}, {"id": "customer_customerfilters_row", "label": "Row", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L573"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_defs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L236", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumdefswithoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L237", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumdefsneedfacet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L240", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_textdefs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L243", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_datetimedefs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L244", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_numberdefs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L245", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_viewoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L247", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_numberopoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L253", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L270", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_number", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L271", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_singleopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L275", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_numberopprop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L277", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_singlecolumns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L278", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_singlevalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L284", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L289", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumprop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L290", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L291", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumremote", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L294", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumkeyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L295", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L296", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_dateopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L300", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_datekey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L301", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_viewlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L305", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_numberoplabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L308", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_displaydatetime", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L311", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumsummary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L315", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_clearfacets", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L322", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_resetdraft", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L329", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_scheduleliveapply", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L341", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_syncfromprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L350", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_close", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L409", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_rawcontext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L445", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L453", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_idx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L525", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L530", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_raw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L550", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L573", "weight": 1.0}, {"source": "customer_customerfilters_syncfromprops", "target": "customer_customerfilters_resetdraft", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L352", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_customerfilters_numberoplabel", "callee": "find", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L309"}, {"caller_nid": "customer_customerfilters_displaydatetime", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L312"}, {"caller_nid": "customer_customerfilters_displaydatetime", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L312"}, {"caller_nid": "customer_customerfilters_displaydatetime", "callee": "slice", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L313"}, {"caller_nid": "customer_customerfilters_displaydatetime", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L313"}, {"caller_nid": "customer_customerfilters_enumsummary", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L316"}, {"caller_nid": "customer_customerfilters_enumsummary", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L318"}, {"caller_nid": "customer_customerfilters_enumsummary", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L319"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "fromEntries", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L331"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L331"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L331"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "fromEntries", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L332"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L333"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L333"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "assign", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L353"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L357"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L358"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L367"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L367"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "keys", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L373"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "test", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L374"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L375"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L378"}, {"caller_nid": "customer_customerfilters_close", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L410"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/9dd915c3d7b196b855e40a52d3315739f6eecc95f36807ef26e328c9806d1a53.json b/web-admin/graphify-out/cache/ast/9dd915c3d7b196b855e40a52d3315739f6eecc95f36807ef26e328c9806d1a53.json
new file mode 100644
index 000000000..2867939d7
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/9dd915c3d7b196b855e40a52d3315739f6eecc95f36807ef26e328c9806d1a53.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_form_vue", "label": "form.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/form.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/9e6fbbe4d84c4774d26abc4e23973eee948ac94df9916adc9913eec04b9dc77e.json b/web-admin/graphify-out/cache/ast/9e6fbbe4d84c4774d26abc4e23973eee948ac94df9916adc9913eec04b9dc77e.json
new file mode 100644
index 000000000..9c887167a
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/9e6fbbe4d84c4774d26abc4e23973eee948ac94df9916adc9913eec04b9dc77e.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certfilters_vue", "label": "CertFilters.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertFilters.vue", "source_location": "L1"}, {"id": "plan_cert_certfilters_q", "label": "q", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertFilters.vue", "source_location": "L175"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certfilters_vue", "target": "plan_cert_certfilters_q", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertFilters.vue", "source_location": "L175", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/a084a8ac9325ce2d9e7e8ab8ce16f0e49ef5a1d289fdf1f4699ef76a63cb19c2.json b/web-admin/graphify-out/cache/ast/a084a8ac9325ce2d9e7e8ab8ce16f0e49ef5a1d289fdf1f4699ef76a63cb19c2.json
new file mode 100644
index 000000000..28d310f2e
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/a084a8ac9325ce2d9e7e8ab8ce16f0e49ef5a1d289fdf1f4699ef76a63cb19c2.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerattachments_vue", "label": "CustomerAttachments.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerAttachments.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/a19d8cac8d7284e32b40ecf96ab3f329c9df9dcd1e8587225b44c0d009a3d9ad.json b/web-admin/graphify-out/cache/ast/a19d8cac8d7284e32b40ecf96ab3f329c9df9dcd1e8587225b44c0d009a3d9ad.json
new file mode 100644
index 000000000..2624f895a
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/a19d8cac8d7284e32b40ecf96ab3f329c9df9dcd1e8587225b44c0d009a3d9ad.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L1"}, {"id": "product_index_path", "label": "path", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L328"}, {"id": "product_index_categorydropdownoptions", "label": "categoryDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L334"}, {"id": "product_index_modeldropdownoptions", "label": "modelDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L338"}, {"id": "product_index_moreactive", "label": "moreActive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L339"}, {"id": "product_index_cards", "label": "cards", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L340"}, {"id": "product_index_hasmore", "label": "hasMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L347"}, {"id": "product_index_ensurecategorypathmap", "label": "ensureCategoryPathMap()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L358"}, {"id": "product_index_ensuremodeloptions", "label": "ensureModelOptions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L380"}, {"id": "product_index_requestsnapshot", "label": "requestSnapshot()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L408"}, {"id": "product_index_isexpanded", "label": "isExpanded()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L418"}, {"id": "product_index_snapshot", "label": "snapshot", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L433"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "core", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mplistpageskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L251", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_confirm_showproductconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L251", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L252", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L253", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_product_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L254", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchproductlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L254", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchcategorytree", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L254", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchproductcolumnfacetvalues", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L254", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchupdateproductstatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L254", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "crm_product_fetchdeleteproduct", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L254", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_product_card_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_card_buildproductlistquery", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_crm_product_card_buildproductcard", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L261", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_creator_delete_candeletebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_creator_delete_creator_delete_tip", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_tree_path_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L263", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_tree_path_buildpathlabelmapfromtreeroots", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L263", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L264", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L264", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_error_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L265", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "http_error_httperror", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L265", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_status_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "http_status_apistatus", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L267", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_product_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L268", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L328", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_categorydropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L334", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_modeldropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L338", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_moreactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L339", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_cards", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L340", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_hasmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L347", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_ensurecategorypathmap", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L358", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_ensuremodeloptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L380", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_requestsnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L408", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_isexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L418", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_index_vue", "target": "product_index_snapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L433", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_index_ensurecategorypathmap", "callee": "fetchCategoryTree", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L362"}, {"caller_nid": "product_index_ensurecategorypathmap", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L365"}, {"caller_nid": "product_index_ensurecategorypathmap", "callee": "buildPathLabelMapFromTreeRoots", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L366"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "fetchProductColumnFacetValues", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L384"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L386"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L393"}, {"caller_nid": "product_index_ensuremodeloptions", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L393"}, {"caller_nid": "product_index_requestsnapshot", "callee": "stringify", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L409"}, {"caller_nid": "product_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L410"}, {"caller_nid": "product_index_requestsnapshot", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L412"}, {"caller_nid": "product_index_isexpanded", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L419"}, {"caller_nid": "product_index_isexpanded", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/index.vue", "source_location": "L419"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/a21ddb1c1a2c7b54e09a6fdc5e636c51c4e11da9073295d29bb912bc5aa9fc25.json b/web-admin/graphify-out/cache/ast/a21ddb1c1a2c7b54e09a6fdc5e636c51c4e11da9073295d29bb912bc5aa9fc25.json
new file mode 100644
index 000000000..aeb521ed5
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/a21ddb1c1a2c7b54e09a6fdc5e636c51c4e11da9073295d29bb912bc5aa9fc25.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L1"}, {"id": "import_components_d_globalcomponents", "label": "GlobalComponents", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L10"}, {"id": "import_components_d_globaldirectives", "label": "GlobalDirectives", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L330"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "target": "import_components_d_globalcomponents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "target": "import_components_d_globaldirectives", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L330", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/a3d574074bee8825d4e1d04fdc8701b8b6d220cf8978d8070cbddb0a67f7e112.json b/web-admin/graphify-out/cache/ast/a3d574074bee8825d4e1d04fdc8701b8b6d220cf8978d8070cbddb0a67f7e112.json
new file mode 100644
index 000000000..84d192935
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/a3d574074bee8825d4e1d04fdc8701b8b6d220cf8978d8070cbddb0a67f7e112.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mptransportaddressselectsheet_vue", "label": "MpTransportAddressSelectSheet.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpTransportAddressSelectSheet.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/a623e1dd51d19d06e98b4a14f945a83efcc4d7eecd012e1b78e72be5ae8d82a5.json b/web-admin/graphify-out/cache/ast/a623e1dd51d19d06e98b4a14f945a83efcc4d7eecd012e1b78e72be5ae8d82a5.json
new file mode 100644
index 000000000..71e187a71
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/a623e1dd51d19d06e98b4a14f945a83efcc4d7eecd012e1b78e72be5ae8d82a5.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certdetail_vue", "label": "CertDetail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertDetail.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/a65d10131ca4052137fe21edc8a93b0cbbdb832eaba557ce1051c612add8dc2a.json b/web-admin/graphify-out/cache/ast/a65d10131ca4052137fe21edc8a93b0cbbdb832eaba557ce1051c612add8dc2a.json
new file mode 100644
index 000000000..7e3f53354
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/a65d10131ca4052137fe21edc8a93b0cbbdb832eaba557ce1051c612add8dc2a.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "label": "InvoicePanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L1"}, {"id": "customer_invoicepanel_key", "label": "key", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L236"}, {"id": "customer_invoicepanel_kw", "label": "kw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L250"}, {"id": "customer_invoicepanel_tip", "label": "tip", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L257"}, {"id": "customer_invoicepanel_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L323"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L236", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_kw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_tip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L257", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_invoicepanel_vue", "target": "customer_invoicepanel_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/InvoicePanel.vue", "source_location": "L323", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/a78d05597bca2fe689e2961f7d4e1e5fa9a6086df6a053890a8dd89f9a4fd156.json b/web-admin/graphify-out/cache/ast/a78d05597bca2fe689e2961f7d4e1e5fa9a6086df6a053890a8dd89f9a4fd156.json
new file mode 100644
index 000000000..a2398adf3
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/a78d05597bca2fe689e2961f7d4e1e5fa9a6086df6a053890a8dd89f9a4fd156.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certfilters_vue", "label": "CertFilters.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertFilters.vue", "source_location": "L1"}, {"id": "plan_cert_certfilters_q", "label": "q", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertFilters.vue", "source_location": "L176"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certfilters_vue", "target": "plan_cert_certfilters_q", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertFilters.vue", "source_location": "L176", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/a7e332906a94382391ab31d08bfdd63b72ebedc1087b4ef370142bdb5951b22b.json b/web-admin/graphify-out/cache/ast/a7e332906a94382391ab31d08bfdd63b72ebedc1087b4ef370142bdb5951b22b.json
new file mode 100644
index 000000000..cc46e3784
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/a7e332906a94382391ab31d08bfdd63b72ebedc1087b4ef370142bdb5951b22b.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_opportunityactions_vue", "label": "OpportunityActions.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/OpportunityActions.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/ad1415663bfba81f7c691dffb1b7ab3af0d5b8516096caacdf26fb99d548ee5b.json b/web-admin/graphify-out/cache/ast/ad1415663bfba81f7c691dffb1b7ab3af0d5b8516096caacdf26fb99d548ee5b.json
new file mode 100644
index 000000000..d7b4fecc1
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/ad1415663bfba81f7c691dffb1b7ab3af0d5b8516096caacdf26fb99d548ee5b.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L1"}, {"id": "plan_cert_detail_route", "label": "route", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L41"}, {"id": "plan_cert_detail_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L42"}, {"id": "plan_cert_detail_id", "label": "id", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L43"}, {"id": "plan_cert_detail_acting", "label": "acting", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L46"}, {"id": "plan_cert_detail_canupload", "label": "canUpload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L47"}, {"id": "plan_cert_detail_canready", "label": "canReady", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L48"}, {"id": "plan_cert_detail_canprice", "label": "canPrice", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L49"}, {"id": "plan_cert_detail_permissionerror", "label": "permissionError", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L50"}, {"id": "plan_cert_detail_permissionsloaded", "label": "permissionsLoaded", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L51"}, {"id": "plan_cert_detail_back", "label": "back()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L53"}, {"id": "plan_cert_detail_opendetail", "label": "openDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L57"}, {"id": "plan_cert_detail_openupload", "label": "openUpload()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L61"}, {"id": "plan_cert_detail_saved", "label": "saved()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L69"}, {"id": "plan_cert_detail_setready", "label": "setReady()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L73"}, {"id": "plan_cert_detail_loadpermissions", "label": "loadPermissions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L113"}, {"id": "plan_cert_detail_openquerycontract", "label": "openQueryContract()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L132"}, {"id": "plan_cert_detail_init", "label": "init()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L139"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L26", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L27", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L27", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L28", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_auth_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L29", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "api_auth_fetchgetmenucodes", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L29", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_pl_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L30", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "pl_index_planapi", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L30", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "pl_index_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L30", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_composables_usepltoxicproductcertcheck_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "composables_usepltoxicproductcertcheck_hazard_cert_ready_confirm_hint", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "composables_usepltoxicproductcertcheck_ishazardcertready", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "composables_usepltoxicproductcertcheck_planhashazardproducts", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L36", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_model_canedit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L36", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certdetail_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L37", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L38", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_cert_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L39", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L41", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L42", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L43", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_acting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L46", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_canupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L47", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_canready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L48", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_canprice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L49", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_permissionerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L50", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_permissionsloaded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L51", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_back", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L53", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_opendetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L57", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_openupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L61", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_saved", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L69", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_setready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L73", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_loadpermissions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L113", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_openquerycontract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_detail_vue", "target": "plan_cert_detail_init", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L139", "weight": 1.0}, {"source": "plan_cert_detail_init", "target": "plan_cert_detail_loadpermissions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L140", "weight": 1.0}, {"source": "plan_cert_detail_init", "target": "plan_cert_detail_openquerycontract", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L141", "weight": 1.0}], "raw_calls": [{"caller_nid": "plan_cert_detail_back", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L54"}, {"caller_nid": "plan_cert_detail_opendetail", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L58"}, {"caller_nid": "plan_cert_detail_openupload", "callee": "canEdit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L62"}, {"caller_nid": "plan_cert_detail_openupload", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L63"}, {"caller_nid": "plan_cert_detail_saved", "callee": "reload", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L70"}, {"caller_nid": "plan_cert_detail_setready", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L77"}, {"caller_nid": "plan_cert_detail_setready", "callee": "canEdit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L79"}, {"caller_nid": "plan_cert_detail_setready", "callee": "planHasHazardProducts", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L79"}, {"caller_nid": "plan_cert_detail_setready", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L80"}, {"caller_nid": "plan_cert_detail_setready", "callee": "reload", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L81"}, {"caller_nid": "plan_cert_detail_setready", "callee": "isHazardCertReady", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L84"}, {"caller_nid": "plan_cert_detail_setready", "callee": "info", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L85"}, {"caller_nid": "plan_cert_detail_setready", "callee": "reload", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L86"}, {"caller_nid": "plan_cert_detail_setready", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L93"}, {"caller_nid": "plan_cert_detail_setready", "callee": "setHazardCertReady", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L103"}, {"caller_nid": "plan_cert_detail_setready", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L104"}, {"caller_nid": "plan_cert_detail_setready", "callee": "reload", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L105"}, {"caller_nid": "plan_cert_detail_setready", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L107"}, {"caller_nid": "plan_cert_detail_loadpermissions", "callee": "fetchGetMenuCodes", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L119"}, {"caller_nid": "plan_cert_detail_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L121"}, {"caller_nid": "plan_cert_detail_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L122"}, {"caller_nid": "plan_cert_detail_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L124"}, {"caller_nid": "plan_cert_detail_openquerycontract", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L133"}, {"caller_nid": "plan_cert_detail_openquerycontract", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L135"}, {"caller_nid": "plan_cert_detail_openquerycontract", "callee": "openContract", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/detail.vue", "source_location": "L136"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/b00006a189bf1f85d0d8bf605f870fd30282cdfaec96b6f0ed717633d09c9bf7.json b/web-admin/graphify-out/cache/ast/b00006a189bf1f85d0d8bf605f870fd30282cdfaec96b6f0ed717633d09c9bf7.json
new file mode 100644
index 000000000..183687552
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/b00006a189bf1f85d0d8bf605f870fd30282cdfaec96b6f0ed717633d09c9bf7.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_product_form_dialog_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/product-form-dialog/index.vue", "source_location": "L1"}, {"id": "product_form_dialog_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/product-form-dialog/index.vue", "source_location": "L318"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_product_form_dialog_index_vue", "target": "product_form_dialog_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/product-form-dialog/index.vue", "source_location": "L318", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_form_dialog_index_if", "callee": "callback", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/product-form-dialog/index.vue", "source_location": "L319"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/b2b938751addeec4e857ede6d35dd57370486b75294906ecbcb8a7a2b064c790.json b/web-admin/graphify-out/cache/ast/b2b938751addeec4e857ede6d35dd57370486b75294906ecbcb8a7a2b064c790.json
new file mode 100644
index 000000000..23bc0877b
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/b2b938751addeec4e857ede6d35dd57370486b75294906ecbcb8a7a2b064c790.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L1"}, {"id": "import_components_d_globalcomponents", "label": "GlobalComponents", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L10"}, {"id": "import_components_d_globaldirectives", "label": "GlobalDirectives", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L334"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "target": "import_components_d_globalcomponents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "target": "import_components_d_globaldirectives", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L334", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/b36c64b0c153d18e564404bed2d1b2e47bcdee391aafd03b27b256084b4be99a.json b/web-admin/graphify-out/cache/ast/b36c64b0c153d18e564404bed2d1b2e47bcdee391aafd03b27b256084b4be99a.json
new file mode 100644
index 000000000..0d737ad68
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/b36c64b0c153d18e564404bed2d1b2e47bcdee391aafd03b27b256084b4be99a.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_confirm_dom_mjs", "label": "test-mp-crm-product-confirm-dom.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_crm_product_confirm_dom_root", "label": "root", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs", "source_location": "L4"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_confirm_dom_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_confirm_dom_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_product_confirm_dom_mjs", "target": "scripts_test_mp_crm_product_confirm_dom_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs", "source_location": "L4", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/b506c72f212cea16ef479ae2419a35ad6087e22220793bd050d4a28ea41ec1ff.json b/web-admin/graphify-out/cache/ast/b506c72f212cea16ef479ae2419a35ad6087e22220793bd050d4a28ea41ec1ff.json
new file mode 100644
index 000000000..ae103c803
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/b506c72f212cea16ef479ae2419a35ad6087e22220793bd050d4a28ea41ec1ff.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mplistpageskeleton_vue", "label": "MpListPageSkeleton.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpListPageSkeleton.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/b5f4302ceb4587d4b0afa4b5ea4541c3f4afb3e4478b192c31c94e731cb12f4f.json b/web-admin/graphify-out/cache/ast/b5f4302ceb4587d4b0afa4b5ea4541c3f4afb3e4478b192c31c94e731cb12f4f.json
new file mode 100644
index 000000000..35ca20ba2
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/b5f4302ceb4587d4b0afa4b5ea4541c3f4afb3e4478b192c31c94e731cb12f4f.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "label": "mp-crm-quote-card.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L1"}, {"id": "utils_mp_crm_quote_card_mpquotemode", "label": "MpQuoteMode", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L1"}, {"id": "utils_mp_crm_quote_card_mpquoteview", "label": "MpQuoteView", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L2"}, {"id": "utils_mp_crm_quote_card_quotecardfield", "label": "QuoteCardField", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L4"}, {"id": "utils_mp_crm_quote_card_quoteproductlinelike", "label": "QuoteProductLineLike", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L6"}, {"id": "utils_mp_crm_quote_card_mp_quote_manage_tabs", "label": "MP_QUOTE_MANAGE_TABS", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L14"}, {"id": "utils_mp_crm_quote_card_mp_quote_approve_tabs", "label": "MP_QUOTE_APPROVE_TABS", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L20"}, {"id": "utils_mp_crm_quote_card_quotetypelabel", "label": "quoteTypeLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L25"}, {"id": "utils_mp_crm_quote_card_quotetypetagtype", "label": "quoteTypeTagType()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L30"}, {"id": "utils_mp_crm_quote_card_formatquotemoney", "label": "formatQuoteMoney()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L35"}, {"id": "utils_mp_crm_quote_card_dash", "label": "dash()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L43"}, {"id": "utils_mp_crm_quote_card_formatquoteproductinfoforcard", "label": "formatQuoteProductInfoForCard()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L49"}, {"id": "utils_mp_crm_quote_card_buildquotelistquery", "label": "buildQuoteListQuery()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L78"}, {"id": "utils_mp_crm_quote_card_buildquotecard", "label": "buildQuoteCard()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L124"}, {"id": "utils_mp_crm_quote_card_findpendingquoteapproval", "label": "findPendingQuoteApproval()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L199"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_mpquotemode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_mpquoteview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_quotecardfield", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_quoteproductlinelike", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L6", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_mp_quote_manage_tabs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L14", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_mp_quote_approve_tabs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L20", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_quotetypelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L25", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_quotetypetagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L30", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_formatquotemoney", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L35", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_dash", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L43", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_formatquoteproductinfoforcard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L49", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_buildquotelistquery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L78", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_buildquotecard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L124", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_quote_card_ts", "target": "utils_mp_crm_quote_card_findpendingquoteapproval", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L199", "weight": 1.0}, {"source": "utils_mp_crm_quote_card_buildquotecard", "target": "utils_mp_crm_quote_card_dash", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L146", "weight": 1.0}, {"source": "utils_mp_crm_quote_card_buildquotecard", "target": "utils_mp_crm_quote_card_quotetypelabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L152", "weight": 1.0}, {"source": "utils_mp_crm_quote_card_buildquotecard", "target": "utils_mp_crm_quote_card_formatquotemoney", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L155", "weight": 1.0}, {"source": "utils_mp_crm_quote_card_buildquotecard", "target": "utils_mp_crm_quote_card_formatquoteproductinfoforcard", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L161", "weight": 1.0}, {"source": "utils_mp_crm_quote_card_buildquotecard", "target": "utils_mp_crm_quote_card_quotetypetagtype", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L187", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_mp_crm_quote_card_quotetypelabel", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L26"}, {"caller_nid": "utils_mp_crm_quote_card_quotetypetagtype", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L31"}, {"caller_nid": "utils_mp_crm_quote_card_formatquotemoney", "callee": "isNaN", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L36"}, {"caller_nid": "utils_mp_crm_quote_card_formatquotemoney", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L36"}, {"caller_nid": "utils_mp_crm_quote_card_formatquotemoney", "callee": "toLocaleString", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L37"}, {"caller_nid": "utils_mp_crm_quote_card_formatquotemoney", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L37"}, {"caller_nid": "utils_mp_crm_quote_card_dash", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L44"}, {"caller_nid": "utils_mp_crm_quote_card_dash", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L44"}, {"caller_nid": "utils_mp_crm_quote_card_formatquoteproductinfoforcard", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L54"}, {"caller_nid": "utils_mp_crm_quote_card_formatquoteproductinfoforcard", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L54"}, {"caller_nid": "utils_mp_crm_quote_card_formatquoteproductinfoforcard", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L75"}, {"caller_nid": "utils_mp_crm_quote_card_buildquotelistquery", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L95"}, {"caller_nid": "utils_mp_crm_quote_card_buildquotelistquery", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L95"}, {"caller_nid": "utils_mp_crm_quote_card_buildquotecard", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L181"}, {"caller_nid": "utils_mp_crm_quote_card_findpendingquoteapproval", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L208"}, {"caller_nid": "utils_mp_crm_quote_card_findpendingquoteapproval", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L208"}, {"caller_nid": "utils_mp_crm_quote_card_findpendingquoteapproval", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L212"}, {"caller_nid": "utils_mp_crm_quote_card_findpendingquoteapproval", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L213"}, {"caller_nid": "utils_mp_crm_quote_card_findpendingquoteapproval", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L213"}, {"caller_nid": "utils_mp_crm_quote_card_findpendingquoteapproval", "callee": "min", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L217"}, {"caller_nid": "utils_mp_crm_quote_card_findpendingquoteapproval", "callee": "find", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L219"}, {"caller_nid": "utils_mp_crm_quote_card_findpendingquoteapproval", "callee": "find", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L228"}, {"caller_nid": "utils_mp_crm_quote_card_findpendingquoteapproval", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-quote-card.ts", "source_location": "L230"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/b9f093297bc31fac49da97a4d9c5fdced888333bd96a0c5ab5484f0004c2de10.json b/web-admin/graphify-out/cache/ast/b9f093297bc31fac49da97a4d9c5fdced888333bd96a0c5ab5484f0004c2de10.json
new file mode 100644
index 000000000..d76520a93
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/b9f093297bc31fac49da97a4d9c5fdced888333bd96a0c5ab5484f0004c2de10.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L1"}, {"id": "plan_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L533"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_index_vue", "target": "plan_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L533", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_index_vue", "target": "plan_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L658", "weight": 1.0}], "raw_calls": [{"caller_nid": "plan_index_if", "callee": "rangeFor", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L659"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/bbf139f2858e3c3542b628f4541cbfec2693ce59e794b06ad94ab4264d54b2b4.json b/web-admin/graphify-out/cache/ast/bbf139f2858e3c3542b628f4541cbfec2693ce59e794b06ad94ab4264d54b2b4.json
new file mode 100644
index 000000000..279dd3eda
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/bbf139f2858e3c3542b628f4541cbfec2693ce59e794b06ad94ab4264d54b2b4.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "label": "mp-crm-confirm.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L1"}, {"id": "utils_mp_crm_confirm_crmconfirmkind", "label": "CrmConfirmKind", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L3"}, {"id": "utils_mp_crm_confirm_buildcrmconfirminput", "label": "BuildCrmConfirmInput", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L5"}, {"id": "utils_mp_crm_confirm_escapehtml", "label": "escapeHtml()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L12"}, {"id": "utils_mp_crm_confirm_dangermessagehtml", "label": "dangerMessageHtml()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L22"}, {"id": "utils_mp_crm_confirm_buildcrmconfirmoptions", "label": "buildCrmConfirmOptions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L30"}, {"id": "utils_mp_crm_confirm_showcrmconfirmdialog", "label": "showCrmConfirmDialog()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L42"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "target": "vant", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "target": "utils_mp_crm_confirm_crmconfirmkind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "target": "utils_mp_crm_confirm_buildcrmconfirminput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "target": "utils_mp_crm_confirm_escapehtml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L12", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "target": "utils_mp_crm_confirm_dangermessagehtml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L22", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "target": "utils_mp_crm_confirm_buildcrmconfirmoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L30", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L42", "weight": 1.0}, {"source": "utils_mp_crm_confirm_dangermessagehtml", "target": "utils_mp_crm_confirm_escapehtml", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L25", "weight": 1.0}, {"source": "utils_mp_crm_confirm_buildcrmconfirmoptions", "target": "utils_mp_crm_confirm_dangermessagehtml", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L34", "weight": 1.0}, {"source": "utils_mp_crm_confirm_showcrmconfirmdialog", "target": "utils_mp_crm_confirm_buildcrmconfirmoptions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L43", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_mp_crm_confirm_escapehtml", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L13"}, {"caller_nid": "utils_mp_crm_confirm_escapehtml", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L13"}, {"caller_nid": "utils_mp_crm_confirm_escapehtml", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L13"}, {"caller_nid": "utils_mp_crm_confirm_escapehtml", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L13"}, {"caller_nid": "utils_mp_crm_confirm_escapehtml", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L13"}, {"caller_nid": "utils_mp_crm_confirm_showcrmconfirmdialog", "callee": "showConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.ts", "source_location": "L43"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/bc03152870dc41f1c1f6487955856c53b84d7dee44d3e0ea4fa957b945e2b8a0.json b/web-admin/graphify-out/cache/ast/bc03152870dc41f1c1f6487955856c53b84d7dee44d3e0ea4fa957b945e2b8a0.json
new file mode 100644
index 000000000..151b4676d
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/bc03152870dc41f1c1f6487955856c53b84d7dee44d3e0ea4fa957b945e2b8a0.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "label": "ContractAttachmentPanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L1"}, {"id": "components_contractattachmentpanel_getshortfilename", "label": "getShortFileName()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L252"}, {"id": "components_contractattachmentpanel_isfileaccepted", "label": "isFileAccepted()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L262"}, {"id": "components_contractattachmentpanel_normalizeincomingfile", "label": "normalizeIncomingFile()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L266"}, {"id": "components_contractattachmentpanel_collectclipboardfiles", "label": "collectClipboardFiles()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L274"}, {"id": "components_contractattachmentpanel_formdata", "label": "formData", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L314"}, {"id": "components_contractattachmentpanel_files", "label": "files", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L405"}, {"id": "components_contractattachmentpanel_kind", "label": "kind", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L433"}, {"id": "components_contractattachmentpanel_index", "label": "index", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L461"}, {"id": "components_contractattachmentpanel_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L475"}, {"id": "components_contractattachmentpanel_downloadcrmattachment", "label": "downloadCrmAttachment()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L480"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_getshortfilename", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L252", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_isfileaccepted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L262", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_normalizeincomingfile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_collectclipboardfiles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L274", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_formdata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L314", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L405", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L411", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_kind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L433", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_index", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L461", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L475", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractattachmentpanel_vue", "target": "components_contractattachmentpanel_downloadcrmattachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L480", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_contractattachmentpanel_getshortfilename", "callee": "lastIndexOf", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L254"}, {"caller_nid": "components_contractattachmentpanel_getshortfilename", "callee": "substring", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L255"}, {"caller_nid": "components_contractattachmentpanel_getshortfilename", "callee": "substring", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L256"}, {"caller_nid": "components_contractattachmentpanel_getshortfilename", "callee": "substring", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L257"}, {"caller_nid": "components_contractattachmentpanel_getshortfilename", "callee": "substring", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L259"}, {"caller_nid": "components_contractattachmentpanel_isfileaccepted", "callee": "test", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L263"}, {"caller_nid": "components_contractattachmentpanel_normalizeincomingfile", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L267"}, {"caller_nid": "components_contractattachmentpanel_normalizeincomingfile", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L268"}, {"caller_nid": "components_contractattachmentpanel_normalizeincomingfile", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L269"}, {"caller_nid": "components_contractattachmentpanel_collectclipboardfiles", "callee": "forEach", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L278"}, {"caller_nid": "components_contractattachmentpanel_collectclipboardfiles", "callee": "from", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L278"}, {"caller_nid": "components_contractattachmentpanel_collectclipboardfiles", "callee": "forEach", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L285"}, {"caller_nid": "components_contractattachmentpanel_collectclipboardfiles", "callee": "from", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L285"}, {"caller_nid": "components_contractattachmentpanel_if", "callee": "msgError", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L476"}, {"caller_nid": "components_contractattachmentpanel_downloadcrmattachment", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L482"}, {"caller_nid": "components_contractattachmentpanel_downloadcrmattachment", "callee": "msgError", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/contract/components/ContractAttachmentPanel.vue", "source_location": "L483"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/c0d3935e5b4fef5fe2301733e0a00be47401d4c8fdaf7fade0f35f10099d8d4d.json b/web-admin/graphify-out/cache/ast/c0d3935e5b4fef5fe2301733e0a00be47401d4c8fdaf7fade0f35f10099d8d4d.json
new file mode 100644
index 000000000..82b5d82f3
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/c0d3935e5b4fef5fe2301733e0a00be47401d4c8fdaf7fade0f35f10099d8d4d.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L1"}, {"id": "import_components_d_globalcomponents", "label": "GlobalComponents", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L10"}, {"id": "import_components_d_globaldirectives", "label": "GlobalDirectives", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L308"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "target": "import_components_d_globalcomponents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "target": "import_components_d_globaldirectives", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L308", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/c1d20f24fe58724e601bdb22bbe02a1235485cf5fe176f1e770beb828f7a2656.json b/web-admin/graphify-out/cache/ast/c1d20f24fe58724e601bdb22bbe02a1235485cf5fe176f1e770beb828f7a2656.json
new file mode 100644
index 000000000..6f7c3b09a
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/c1d20f24fe58724e601bdb22bbe02a1235485cf5fe176f1e770beb828f7a2656.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "label": "form.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L1"}, {"id": "product_form_route", "label": "route", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L31"}, {"id": "product_form_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L32"}, {"id": "product_form_contentloading", "label": "contentLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L33"}, {"id": "product_form_pagetitle", "label": "pageTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L35"}, {"id": "product_form_productid", "label": "productId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L37"}, {"id": "product_form_formkey", "label": "formKey", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L43"}, {"id": "product_form_loadingcopy", "label": "loadingCopy", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L45"}, {"id": "product_form_onloadingchange", "label": "onLoadingChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L62"}, {"id": "product_form_golist", "label": "goList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L66"}, {"id": "product_form_onsuccess", "label": "onSuccess()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L70"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L24", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpstructskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L25", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_product_form_dialog_index_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L26", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L27", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "utils_mp_webview_mp_crm_product_list_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L27", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L28", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_product_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L29", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "product_form_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "product_form_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L32", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "product_form_contentloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L33", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "product_form_pagetitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L35", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "product_form_productid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L37", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "product_form_formkey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L43", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "product_form_loadingcopy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L45", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "product_form_onloadingchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L62", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "product_form_golist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L66", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_form_vue", "target": "product_form_onsuccess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L70", "weight": 1.0}, {"source": "product_form_onsuccess", "target": "product_form_golist", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L71", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_form_golist", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/form.vue", "source_location": "L67"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/c46505b142647e0e1801d553260959fbc6eb6540a8ed6fb326d895a60bd21ef4.json b/web-admin/graphify-out/cache/ast/c46505b142647e0e1801d553260959fbc6eb6540a8ed6fb326d895a60bd21ef4.json
new file mode 100644
index 000000000..eac8e8968
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/c46505b142647e0e1801d553260959fbc6eb6540a8ed6fb326d895a60bd21ef4.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "label": "form.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L1"}, {"id": "plan_form_route", "label": "route", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L30"}, {"id": "plan_form_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L31"}, {"id": "plan_form_contentloading", "label": "contentLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L32"}, {"id": "plan_form_pagetitle", "label": "pageTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L34"}, {"id": "plan_form_planid", "label": "planId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L36"}, {"id": "plan_form_copyfrom", "label": "copyFrom", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L41"}, {"id": "plan_form_openforarrange", "label": "openForArrange", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L45"}, {"id": "plan_form_formkey", "label": "formKey", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L46"}, {"id": "plan_form_loadingcopy", "label": "loadingCopy", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L49"}, {"id": "plan_form_onloadingchange", "label": "onLoadingChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L78"}, {"id": "plan_form_golist", "label": "goList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L82"}, {"id": "plan_form_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L87"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "vue_router", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L22", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L23", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L24", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpstructskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L25", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_pl_plan_form_dialog_index_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L26", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L27", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "utils_mp_webview_mp_plan_list_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L27", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L28", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L30", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_contentloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L32", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_pagetitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L34", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_planid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L36", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_copyfrom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L41", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_openforarrange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L45", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_formkey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L46", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_loadingcopy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L49", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_onloadingchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L78", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_golist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L82", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "target": "plan_form_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L87", "weight": 1.0}], "raw_calls": [{"caller_nid": "plan_form_golist", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L83"}, {"caller_nid": "plan_form_if", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L88"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/c5fcc487b1d4abdc0bf558abe9c95a587281c64cd84ccd0b699e54f95d3e3c46.json b/web-admin/graphify-out/cache/ast/c5fcc487b1d4abdc0bf558abe9c95a587281c64cd84ccd0b699e54f95d3e3c46.json
new file mode 100644
index 000000000..5bbdbdf73
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/c5fcc487b1d4abdc0bf558abe9c95a587281c64cd84ccd0b699e54f95d3e3c46.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L1"}, {"id": "plan_cert_index_tab", "label": "tab", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L156"}, {"id": "plan_cert_index_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L157"}, {"id": "plan_cert_index_appliedkeyword", "label": "appliedKeyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L158"}, {"id": "plan_cert_index_datekind", "label": "dateKind", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L160"}, {"id": "plan_cert_index_dateoptions", "label": "dateOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L161"}, {"id": "plan_cert_index_readyoptions", "label": "readyOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L168"}, {"id": "plan_cert_index_filters_toqueryparams", "label": "{ filters, toQueryParams }", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L173"}, {"id": "plan_cert_index_sort", "label": "sort", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L176"}, {"id": "plan_cert_index_quickpanel", "label": "quickPanel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L177"}, {"id": "plan_cert_index_readykind", "label": "readyKind", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L178"}, {"id": "plan_cert_index_datelabel", "label": "dateLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L179"}, {"id": "plan_cert_index_readylabel", "label": "readyLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L182"}, {"id": "plan_cert_index_datedropdownoptions", "label": "dateDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L185"}, {"id": "plan_cert_index_readydropdownoptions", "label": "readyDropdownOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L188"}, {"id": "plan_cert_index_extrafiltercount", "label": "extraFilterCount", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L193"}, {"id": "plan_cert_index_filtersopen", "label": "filtersOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L208"}, {"id": "plan_cert_index_uploadopen", "label": "uploadOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L209"}, {"id": "plan_cert_index_uploadid", "label": "uploadId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L210"}, {"id": "plan_cert_index_canupload", "label": "canUpload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L211"}, {"id": "plan_cert_index_canready", "label": "canReady", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L212"}, {"id": "plan_cert_index_canprice", "label": "canPrice", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L213"}, {"id": "plan_cert_index_permissionerror", "label": "permissionError", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L214"}, {"id": "plan_cert_index_permissionsloaded", "label": "permissionsLoaded", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L215"}, {"id": "plan_cert_index_page", "label": "page", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L217"}, {"id": "plan_cert_index_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L218"}, {"id": "plan_cert_index_selected", "label": "selected", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L219"}, {"id": "plan_cert_index_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L220"}, {"id": "plan_cert_index_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L221"}, {"id": "plan_cert_index_failedmore", "label": "failedMore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L222"}, {"id": "plan_cert_index_acting", "label": "acting", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L223"}, {"id": "plan_cert_index_selectedplans", "label": "selectedPlans", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L225"}, {"id": "plan_cert_index_visiblecards", "label": "visibleCards", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L226"}, {"id": "plan_cert_index_query", "label": "query()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L237"}, {"id": "plan_cert_index_load", "label": "load()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L255"}, {"id": "plan_cert_index_search", "label": "search()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L284"}, {"id": "plan_cert_index_schedulekeywordsearch", "label": "scheduleKeywordSearch", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L288"}, {"id": "plan_cert_index_onkeywordupdate", "label": "onKeywordUpdate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L289"}, {"id": "plan_cert_index_toggle", "label": "toggle()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L306"}, {"id": "plan_cert_index_changetab", "label": "changeTab()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L312"}, {"id": "plan_cert_index_togglequickpanel", "label": "toggleQuickPanel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L322"}, {"id": "plan_cert_index_openmorefilters", "label": "openMoreFilters()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L325"}, {"id": "plan_cert_index_setdate", "label": "setDate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L330"}, {"id": "plan_cert_index_setreadyfilter", "label": "setReadyFilter()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L337"}, {"id": "plan_cert_index_applyfilters", "label": "applyFilters()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L345"}, {"id": "plan_cert_index_opendetail", "label": "openDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L368"}, {"id": "plan_cert_index_opencontract", "label": "openContract()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L371"}, {"id": "plan_cert_index_openupload", "label": "openUpload()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L374"}, {"id": "plan_cert_index_eligible", "label": "eligible()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L382"}, {"id": "plan_cert_index_saved", "label": "saved()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L385"}, {"id": "plan_cert_index_setready", "label": "setReady()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L389"}, {"id": "plan_cert_index_loadpermissions", "label": "loadPermissions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L440"}, {"id": "plan_cert_index_init", "label": "init()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L457"}, {"id": "plan_cert_index_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L460"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L128", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L129", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mplistpageskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L130", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L131", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_mp_crm_confirm_showcrmconfirmdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L131", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L133", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_pl_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L134", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "pl_index_planapi", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L134", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "pl_index_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L134", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "pl_index_planlistresponse", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L134", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_auth_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L135", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "api_auth_fetchgetmenucodes", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L135", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_mp_webview_gotominiworkbench", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_display_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L137", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_display_pl_plan_cert_tabs", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L137", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_display_pl_plan_default_follow_statuses", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L137", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_pl_plan_cert_columnfilterdefs_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L138", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_columnfilterdefs_plplancertcolumnfilterdefs", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L138", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_composables_useservercolumnfilters_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L139", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "composables_useservercolumnfilters_useservercolumnfilters", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L139", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_plan_list_display_rows_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L140", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_list_display_rows_flattenplanarchivepairrows", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L140", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_plan_pair_list_query_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_applymergedcustomerqueryparams", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_applycontractsidequeryparams", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_selectedcontractstopkinds", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "utils_pl_plan_pair_list_query_selectedkeywordsfromfilter", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_composables_usepltoxicproductcertcheck_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "composables_usepltoxicproductcertcheck_planhashazardproducts", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "composables_usepltoxicproductcertcheck_hazard_cert_ready_confirm_hint", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_buildquery", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_canedit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_readytargets", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_model_dateshortcut", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L151", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certfilters_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L152", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L153", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_plancard_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L154", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_cert_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L155", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_tab", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L156", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L157", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_appliedkeyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L158", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_datekind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L160", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_dateoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L161", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readyoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L168", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_filters_toqueryparams", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L173", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_sort", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L176", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_quickpanel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L177", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readykind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L178", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_datelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L179", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readylabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L182", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_datedropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L185", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_readydropdownoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L188", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_extrafiltercount", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L193", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_filtersopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L208", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_uploadopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L209", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_uploadid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L210", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_canupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L211", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_canready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L212", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_canprice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L213", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_permissionerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L214", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_permissionsloaded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L215", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L218", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_selected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L219", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L220", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L221", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_failedmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L222", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_acting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L223", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_selectedplans", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_visiblecards", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L226", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L237", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L255", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_search", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L284", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_schedulekeywordsearch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L288", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_onkeywordupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L289", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_toggle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L306", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_changetab", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L312", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_togglequickpanel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L322", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_openmorefilters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L325", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_setdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L330", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_setreadyfilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L337", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_applyfilters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L345", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_opendetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L368", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_opencontract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L371", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_openupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L374", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_eligible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L382", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_saved", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L385", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_setready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L389", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_loadpermissions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L440", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_init", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L457", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_index_vue", "target": "plan_cert_index_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L460", "weight": 1.0}, {"source": "plan_cert_index_load", "target": "plan_cert_index_query", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L268", "weight": 1.0}, {"source": "plan_cert_index_search", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L286", "weight": 1.0}, {"source": "plan_cert_index_onkeywordupdate", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L293", "weight": 1.0}, {"source": "plan_cert_index_onkeywordupdate", "target": "plan_cert_index_schedulekeywordsearch", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L296", "weight": 1.0}, {"source": "plan_cert_index_changetab", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L320", "weight": 1.0}, {"source": "plan_cert_index_openmorefilters", "target": "plan_cert_index_toggle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L327", "weight": 1.0}, {"source": "plan_cert_index_setdate", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L335", "weight": 1.0}, {"source": "plan_cert_index_setreadyfilter", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L343", "weight": 1.0}, {"source": "plan_cert_index_applyfilters", "target": "plan_cert_index_search", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L366", "weight": 1.0}, {"source": "plan_cert_index_saved", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L386", "weight": 1.0}, {"source": "plan_cert_index_saved", "target": "plan_cert_index_opendetail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L387", "weight": 1.0}, {"source": "plan_cert_index_setready", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L435", "weight": 1.0}, {"source": "plan_cert_index_init", "target": "plan_cert_index_loadpermissions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L458", "weight": 1.0}, {"source": "plan_cert_index_init", "target": "plan_cert_index_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L458", "weight": 1.0}], "raw_calls": [{"caller_nid": "plan_cert_index_query", "callee": "buildQuery", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L238"}, {"caller_nid": "plan_cert_index_query", "callee": "toQueryParams", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L240"}, {"caller_nid": "plan_cert_index_query", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L247"}, {"caller_nid": "plan_cert_index_query", "callee": "applyMergedCustomerQueryParams", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L251"}, {"caller_nid": "plan_cert_index_query", "callee": "applyContractSideQueryParams", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L252"}, {"caller_nid": "plan_cert_index_load", "callee": "list", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L268"}, {"caller_nid": "plan_cert_index_load", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L272"}, {"caller_nid": "plan_cert_index_load", "callee": "Number", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L276"}, {"caller_nid": "plan_cert_index_onkeywordupdate", "callee": "Boolean", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L290"}, {"caller_nid": "plan_cert_index_onkeywordupdate", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L290"}, {"caller_nid": "plan_cert_index_onkeywordupdate", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L290"}, {"caller_nid": "plan_cert_index_toggle", "callee": "has", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L308"}, {"caller_nid": "plan_cert_index_toggle", "callee": "delete", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L308"}, {"caller_nid": "plan_cert_index_toggle", "callee": "add", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L309"}, {"caller_nid": "plan_cert_index_setdate", "callee": "dateShortcut", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L332"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "forEach", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L346"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "keys", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L346"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "assign", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L347"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "assign", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L348"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L360"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L360"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L361"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L361"}, {"caller_nid": "plan_cert_index_applyfilters", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L362"}, {"caller_nid": "plan_cert_index_opendetail", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L369"}, {"caller_nid": "plan_cert_index_opencontract", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L372"}, {"caller_nid": "plan_cert_index_openupload", "callee": "canEdit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L375"}, {"caller_nid": "plan_cert_index_openupload", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L376"}, {"caller_nid": "plan_cert_index_eligible", "callee": "readyTargets", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L383"}, {"caller_nid": "plan_cert_index_setready", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L399"}, {"caller_nid": "plan_cert_index_setready", "callee": "push", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L400"}, {"caller_nid": "plan_cert_index_setready", "callee": "readyTargets", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L405"}, {"caller_nid": "plan_cert_index_setready", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L408"}, {"caller_nid": "plan_cert_index_setready", "callee": "showCrmConfirmDialog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L413"}, {"caller_nid": "plan_cert_index_setready", "callee": "setHazardCertReady", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L425"}, {"caller_nid": "plan_cert_index_setready", "callee": "ElMessage", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L431"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "fetchGetMenuCodes", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L446"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L448"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L449"}, {"caller_nid": "plan_cert_index_loadpermissions", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L450"}, {"caller_nid": "plan_cert_index_init", "callee": "allSettled", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/index.vue", "source_location": "L458"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/c7eeba1ff7a257b8188136dd4726ae77b66860dffb1fa399be6734576a87808e.json b/web-admin/graphify-out/cache/ast/c7eeba1ff7a257b8188136dd4726ae77b66860dffb1fa399be6734576a87808e.json
new file mode 100644
index 000000000..7a46934fd
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/c7eeba1ff7a257b8188136dd4726ae77b66860dffb1fa399be6734576a87808e.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_test_ts", "label": "mp-crm-confirm.test.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.test.ts", "source_location": "L1"}, {"id": "utils_mp_crm_confirm_test_opts", "label": "opts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.test.ts", "source_location": "L7"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_test_ts", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_test_ts", "target": "node_test", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.test.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_test_ts", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.test.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_test_ts", "target": "utils_mp_crm_confirm_buildcrmconfirmoptions", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.test.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_test_ts", "target": "utils_mp_crm_confirm_test_opts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.test.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_test_ts", "target": "utils_mp_crm_confirm_test_opts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.test.ts", "source_location": "L22", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_crm_confirm_test_ts", "target": "utils_mp_crm_confirm_test_opts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/utils/mp-crm-confirm.test.ts", "source_location": "L41", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/c963e05db915195927f60f6be717d7ff0a17c820150dbd2e236c817a11611458.json b/web-admin/graphify-out/cache/ast/c963e05db915195927f60f6be717d7ff0a17c820150dbd2e236c817a11611458.json
new file mode 100644
index 000000000..401a053a7
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/c963e05db915195927f60f6be717d7ff0a17c820150dbd2e236c817a11611458.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L1"}, {"id": "import_components_d_globalcomponents", "label": "GlobalComponents", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L10"}, {"id": "import_components_d_globaldirectives", "label": "GlobalDirectives", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L333"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "target": "import_components_d_globalcomponents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_types_import_components_d_ts", "target": "import_components_d_globaldirectives", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/types/import/components.d.ts", "source_location": "L333", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/cadc047093cb982be40ed101548b5b944ce002bab4d401b94e6deff51bda678c.json b/web-admin/graphify-out/cache/ast/cadc047093cb982be40ed101548b5b944ce002bab4d401b94e6deff51bda678c.json
new file mode 100644
index 000000000..f79f3103d
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/cadc047093cb982be40ed101548b5b944ce002bab4d401b94e6deff51bda678c.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_followpanel_vue", "label": "FollowPanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/FollowPanel.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/cc050a2ada2eed163e84d2c0f297af4f6c09abba5b70938d28392204ab949deb.json b/web-admin/graphify-out/cache/ast/cc050a2ada2eed163e84d2c0f297af4f6c09abba5b70938d28392204ab949deb.json
new file mode 100644
index 000000000..ea172173b
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/cc050a2ada2eed163e84d2c0f297af4f6c09abba5b70938d28392204ab949deb.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpvehiclelibraryselectsheet_vue", "label": "MpVehicleLibrarySelectSheet.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/mp/MpVehicleLibrarySelectSheet.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/cc4b078911429a972213c236c7bfe913e7e3d1f7466c3cedb3f188677e00c3b0.json b/web-admin/graphify-out/cache/ast/cc4b078911429a972213c236c7bfe913e7e3d1f7466c3cedb3f188677e00c3b0.json
new file mode 100644
index 000000000..ba0a4bc6b
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/cc4b078911429a972213c236c7bfe913e7e3d1f7466c3cedb3f188677e00c3b0.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "label": "ContactPanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L1"}, {"id": "customer_contactpanel_key", "label": "key", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L236"}, {"id": "customer_contactpanel_hit", "label": "hit", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L264"}, {"id": "customer_contactpanel_kw", "label": "kw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L269"}, {"id": "customer_contactpanel_onmoreopen", "label": "onMoreOpen()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L343"}, {"id": "customer_contactpanel_resetmore", "label": "resetMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L348"}, {"id": "customer_contactpanel_applymore", "label": "applyMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L351"}, {"id": "customer_contactpanel_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L411"}, {"id": "customer_contactpanel_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L438"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L236", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_hit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L264", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_kw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L269", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_onmoreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L343", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_resetmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L348", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_applymore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L351", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L411", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_contactpanel_vue", "target": "customer_contactpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L438", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_contactpanel_onmoreopen", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/ContactPanel.vue", "source_location": "L346"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/d3bbca985207d4e3aefcae6de6c2784566dbfe480d67e3d7ee9e6586be0c2a22.json b/web-admin/graphify-out/cache/ast/d3bbca985207d4e3aefcae6de6c2784566dbfe480d67e3d7ee9e6586be0c2a22.json
new file mode 100644
index 000000000..25c3cef6f
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/d3bbca985207d4e3aefcae6de6c2784566dbfe480d67e3d7ee9e6586be0c2a22.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_form_vue", "label": "form.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/form.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/d4834a9274b43caeeb38cc420f0fe2efb4950d8648a33256429a4ae594084e93.json b/web-admin/graphify-out/cache/ast/d4834a9274b43caeeb38cc420f0fe2efb4950d8648a33256429a4ae594084e93.json
new file mode 100644
index 000000000..5b372be40
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/d4834a9274b43caeeb38cc420f0fe2efb4950d8648a33256429a4ae594084e93.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L1"}, {"id": "quote_detail_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L441"}, {"id": "quote_detail_id", "label": "id", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L532"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "target": "quote_detail_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L441", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "target": "quote_detail_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L532", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/dc0324c3735727aec3619b77b97dd01b109116023a2f3af5fb9a460535ad01bd.json b/web-admin/graphify-out/cache/ast/dc0324c3735727aec3619b77b97dd01b109116023a2f3af5fb9a460535ad01bd.json
new file mode 100644
index 000000000..7778adb39
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/dc0324c3735727aec3619b77b97dd01b109116023a2f3af5fb9a460535ad01bd.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "label": "CertUpload.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L1"}, {"id": "plan_cert_certupload_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L79"}, {"id": "plan_cert_certupload_saving", "label": "saving", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L80"}, {"id": "plan_cert_certupload_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L81"}, {"id": "plan_cert_certupload_setuploadref", "label": "setUploadRef()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L85"}, {"id": "plan_cert_certupload_hasuploading", "label": "hasUploading()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L89"}, {"id": "plan_cert_certupload_close", "label": "close()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L92"}, {"id": "plan_cert_certupload_load", "label": "load()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L99"}, {"id": "plan_cert_certupload_save", "label": "save()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L124"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_pl_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L64", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "pl_index_planapi", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L64", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "pl_index_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L64", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "pl_index_planproduct", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L64", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L65", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customer_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L66", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_composables_usepltoxicproductcertcheck_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L67", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "composables_usepltoxicproductcertcheck_enrichplanproductshazardfromcrm", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L67", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "composables_usepltoxicproductcertcheck_getrequiredcertslots", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L67", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "composables_usepltoxicproductcertcheck_ishazardproduct", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L67", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "composables_usepltoxicproductcertcheck_hazard_cert_ready_confirm_hint", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L67", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certattachments_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L73", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L74", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_model_canedit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L74", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_model_cansave", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L74", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_model_certpayload", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L74", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L79", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_saving", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L80", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L81", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_setuploadref", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L85", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_hasuploading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L89", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_close", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L92", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L99", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certupload_vue", "target": "plan_cert_certupload_save", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L124", "weight": 1.0}, {"source": "plan_cert_certupload_close", "target": "plan_cert_certupload_hasuploading", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L93", "weight": 1.0}, {"source": "plan_cert_certupload_save", "target": "plan_cert_certupload_hasuploading", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L125", "weight": 1.0}], "raw_calls": [{"caller_nid": "plan_cert_certupload_setuploadref", "callee": "set", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L86"}, {"caller_nid": "plan_cert_certupload_setuploadref", "callee": "delete", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L87"}, {"caller_nid": "plan_cert_certupload_hasuploading", "callee": "some", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L90"}, {"caller_nid": "plan_cert_certupload_hasuploading", "callee": "values", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L90"}, {"caller_nid": "plan_cert_certupload_close", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L94"}, {"caller_nid": "plan_cert_certupload_close", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L97"}, {"caller_nid": "plan_cert_certupload_load", "callee": "clear", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L105"}, {"caller_nid": "plan_cert_certupload_load", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L107"}, {"caller_nid": "plan_cert_certupload_load", "callee": "enrichPlanProductsHazardFromCrm", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L109"}, {"caller_nid": "plan_cert_certupload_load", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L112"}, {"caller_nid": "plan_cert_certupload_load", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L112"}, {"caller_nid": "plan_cert_certupload_save", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L126"}, {"caller_nid": "plan_cert_certupload_save", "callee": "canSave", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L129"}, {"caller_nid": "plan_cert_certupload_save", "callee": "updateProductCerts", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L133"}, {"caller_nid": "plan_cert_certupload_save", "callee": "certPayload", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L133"}, {"caller_nid": "plan_cert_certupload_save", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L134"}, {"caller_nid": "plan_cert_certupload_save", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L135"}, {"caller_nid": "plan_cert_certupload_save", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertUpload.vue", "source_location": "L136"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/de3da41905927a62b6e0079d4fad29f7eebf493c35fa262f188e75ec9c22da6d.json b/web-admin/graphify-out/cache/ast/de3da41905927a62b6e0079d4fad29f7eebf493c35fa262f188e75ec9c22da6d.json
new file mode 100644
index 000000000..df1af00d7
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/de3da41905927a62b6e0079d4fad29f7eebf493c35fa262f188e75ec9c22da6d.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "label": "MpWebviewShell.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L1"}, {"id": "layouts_mpwebviewshell_script", "label": "script", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L176"}, {"id": "layouts_mpwebviewshell_for", "label": "for()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L199"}, {"id": "layouts_mpwebviewshell_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L226"}, {"id": "layouts_mpwebviewshell_clearmpticketfrombrowserurl", "label": "clearMpTicketFromBrowserUrl()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L270"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "target": "layouts_mpwebviewshell_script", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L176", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "target": "layouts_mpwebviewshell_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L199", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "target": "layouts_mpwebviewshell_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L226", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "target": "layouts_mpwebviewshell_clearmpticketfrombrowserurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L270", "weight": 1.0}], "raw_calls": [{"caller_nid": "layouts_mpwebviewshell_for", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L200"}, {"caller_nid": "layouts_mpwebviewshell_for", "callee": "decodeURIComponent", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L201"}, {"caller_nid": "layouts_mpwebviewshell_for", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L202"}, {"caller_nid": "layouts_mpwebviewshell_for", "callee": "decodeURIComponent", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L202"}, {"caller_nid": "layouts_mpwebviewshell_for", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L202"}, {"caller_nid": "layouts_mpwebviewshell_clearmpticketfrombrowserurl", "callee": "loadAllDict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L280"}, {"caller_nid": "layouts_mpwebviewshell_clearmpticketfrombrowserurl", "callee": "enterReady", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L281"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/e0dd088ebf50d48e6a45802a93225c6d02be98fb9e237df93c3ee77aacc6a37f.json b/web-admin/graphify-out/cache/ast/e0dd088ebf50d48e6a45802a93225c6d02be98fb9e237df93c3ee77aacc6a37f.json
new file mode 100644
index 000000000..6a92b68e0
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/e0dd088ebf50d48e6a45802a93225c6d02be98fb9e237df93c3ee77aacc6a37f.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L1"}, {"id": "quote_detail_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L689"}, {"id": "quote_detail_id", "label": "id", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L784"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "target": "quote_detail_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L689", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_quote_detail_vue", "target": "quote_detail_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/quote/detail.vue", "source_location": "L784", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/e214cc9caac32dc85bafd0ccae0db72dfebf5959868025f7153b9eb32b7d99f1.json b/web-admin/graphify-out/cache/ast/e214cc9caac32dc85bafd0ccae0db72dfebf5959868025f7153b9eb32b7d99f1.json
new file mode 100644
index 000000000..31a6046bf
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/e214cc9caac32dc85bafd0ccae0db72dfebf5959868025f7153b9eb32b7d99f1.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L1"}, {"id": "plan_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L543"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_index_vue", "target": "plan_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L543", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_index_vue", "target": "plan_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L668", "weight": 1.0}], "raw_calls": [{"caller_nid": "plan_index_if", "callee": "rangeFor", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L669"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/e77d0445ca2b7f381b351c9f2840ba13f0de7787055881ab3050f8d000332ff4.json b/web-admin/graphify-out/cache/ast/e77d0445ca2b7f381b351c9f2840ba13f0de7787055881ab3050f8d000332ff4.json
new file mode 100644
index 000000000..c4b3a32c2
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/e77d0445ca2b7f381b351c9f2840ba13f0de7787055881ab3050f8d000332ff4.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "label": "test-mp-pl-plan-cert.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_pl_plan_cert_start", "label": "start()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L12"}, {"id": "scripts_test_mp_pl_plan_cert_pageerrors", "label": "pageErrors", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L27"}, {"id": "scripts_test_mp_pl_plan_cert_button", "label": "button()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L31"}, {"id": "scripts_test_mp_pl_plan_cert_card", "label": "card()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L32"}, {"id": "scripts_test_mp_pl_plan_cert_sheet", "label": "sheet()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L33"}, {"id": "scripts_test_mp_pl_plan_cert_nooverflow", "label": "noOverflow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L38"}, {"id": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "label": "assertCenteredSheetActions()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L40"}, {"id": "scripts_test_mp_pl_plan_cert_waitpatch", "label": "waitPatch()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L53"}, {"id": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "label": "cleanScreenshot()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L58"}, {"id": "scripts_test_mp_pl_plan_cert_latestlist", "label": "latestList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L62"}, {"id": "scripts_test_mp_pl_plan_cert_quickdate", "label": "quickDate()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L63"}, {"id": "scripts_test_mp_pl_plan_cert_quickready", "label": "quickReady()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L64"}, {"id": "scripts_test_mp_pl_plan_cert_quickmore", "label": "quickMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L65"}, {"id": "scripts_test_mp_pl_plan_cert_quickoption", "label": "quickOption()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L66"}, {"id": "scripts_test_mp_pl_plan_cert_waitlist", "label": "waitList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L68"}, {"id": "scripts_test_mp_pl_plan_cert_directdetail", "label": "directDetail", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L75"}, {"id": "scripts_test_mp_pl_plan_cert_tabs", "label": "tabs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L85"}, {"id": "scripts_test_mp_pl_plan_cert_header", "label": "header", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L87"}, {"id": "scripts_test_mp_pl_plan_cert_summary", "label": "summary", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L141"}, {"id": "scripts_test_mp_pl_plan_cert_filter", "label": "filter", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L211"}, {"id": "scripts_test_mp_pl_plan_cert_field", "label": "field()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L213"}, {"id": "scripts_test_mp_pl_plan_cert_facetcall", "label": "facetCall", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L217"}, {"id": "scripts_test_mp_pl_plan_cert_listgate", "label": "listGate", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L280"}, {"id": "scripts_test_mp_pl_plan_cert_upload", "label": "upload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L319"}, {"id": "scripts_test_mp_pl_plan_cert_certwrites", "label": "certWrites()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L361"}, {"id": "scripts_test_mp_pl_plan_cert_editattachment", "label": "editAttachment", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L374"}, {"id": "scripts_test_mp_pl_plan_cert_editdownload", "label": "editDownload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L375"}, {"id": "scripts_test_mp_pl_plan_cert_editdelete", "label": "editDelete", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L376"}, {"id": "scripts_test_mp_pl_plan_cert_preview", "label": "preview", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L396"}, {"id": "scripts_test_mp_pl_plan_cert_download", "label": "download", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L404"}, {"id": "scripts_test_mp_pl_plan_cert_detail", "label": "detail", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L424"}, {"id": "scripts_test_mp_pl_plan_cert_detailurl", "label": "detailUrl", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L450"}, {"id": "scripts_test_mp_pl_plan_cert_contract", "label": "contract", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L480"}, {"id": "scripts_test_mp_pl_plan_cert_feedbackcard", "label": "feedbackCard", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L510"}, {"id": "scripts_test_mp_pl_plan_cert_feedbackpreview", "label": "feedbackPreview", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L511"}, {"id": "scripts_test_mp_pl_plan_cert_feedbackdownload", "label": "feedbackDownload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L512"}, {"id": "scripts_test_mp_pl_plan_cert_feedbackdialog", "label": "feedbackDialog", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L520"}, {"id": "scripts_test_mp_pl_plan_cert_feedbackfile", "label": "feedbackFile", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L527"}, {"id": "scripts_test_mp_pl_plan_cert_readonlydetail", "label": "readonlyDetail", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L598"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "playwright", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_mp_pl_plan_cert_fixture_mjs", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_mp_pl_plan_cert_fixture_installcertfixture", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L4", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_start", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L12", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_pageerrors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L27", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_button", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_card", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L32", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_sheet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L33", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_nooverflow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L38", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L40", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_waitpatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L53", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L58", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_latestlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L62", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_quickdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L63", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_quickready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L64", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_quickmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L65", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_quickoption", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L66", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_waitlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L68", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_directdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L75", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_tabs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L85", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_header", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L87", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L211", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L213", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_facetcall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L217", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_listgate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L280", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_upload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L319", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_certwrites", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L361", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_editattachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L374", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_editdownload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L375", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_editdelete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L376", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_preview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L396", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_download", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L404", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_detail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L424", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_detailurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L450", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_contract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L480", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_feedbackcard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L510", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_feedbackpreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L511", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_feedbackdownload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L512", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_feedbackdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L520", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_feedbackfile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L527", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_pl_plan_cert_mjs", "target": "scripts_test_mp_pl_plan_cert_readonlydetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L598", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_button", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L31", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_sheet", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L34", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_latestlist", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L62", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_quickoption", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L67", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_field", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L214", "weight": 1.0}, {"source": "scripts_test_mp_pl_plan_cert_certwrites", "target": "scripts_test_mp_pl_plan_cert_filter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L361", "weight": 1.0}], "raw_calls": [{"caller_nid": "scripts_test_mp_pl_plan_cert_start", "callee": "hide", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L19"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_start", "callee": "observe", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L20"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_button", "callee": "getByRole", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L31"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_card", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L32"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_sheet", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L34"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_sheet", "callee": "getByText", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L35"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_nooverflow", "callee": "ok", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L39"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_nooverflow", "callee": "evaluate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L39"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L41"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "callee": "evaluate", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L42"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "callee": "equal", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L48"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_assertcenteredsheetactions", "callee": "ok", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L50"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitpatch", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L54"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitpatch", "callee": "waitForResponse", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L55"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitpatch", "callee": "action", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L56"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "callee": "waitFor", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L59"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "callee": "last", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L59"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L59"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_cleanscreenshot", "callee": "screenshot", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L60"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_latestlist", "callee": "at", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L62"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickdate", "callee": "nth", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L63"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickdate", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L63"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickready", "callee": "nth", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L64"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickready", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L64"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickmore", "callee": "nth", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L65"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickmore", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L65"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickoption", "callee": "first", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L67"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_quickoption", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L67"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitlist", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L69"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitlist", "callee": "waitForResponse", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L70"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_waitlist", "callee": "action", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L71"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_field", "callee": "locator", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L214"}, {"caller_nid": "scripts_test_mp_pl_plan_cert_field", "callee": "getByText", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-pl-plan-cert.mjs", "source_location": "L214"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/e8df1a0842b98b132e9742aa33ea0801019a5e763051cae86a758c8a35aa6a91.json b/web-admin/graphify-out/cache/ast/e8df1a0842b98b132e9742aa33ea0801019a5e763051cae86a758c8a35aa6a91.json
new file mode 100644
index 000000000..7e6db5a78
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/e8df1a0842b98b132e9742aa33ea0801019a5e763051cae86a758c8a35aa6a91.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "label": "QuoteFormPanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1"}, {"id": "components_quoteformpanel_props", "label": "props", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1161"}, {"id": "components_quoteformpanel_ispagevariant", "label": "isPageVariant", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1175"}, {"id": "components_quoteformpanel_userstore", "label": "userStore", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1183"}, {"id": "components_quoteformpanel_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1207"}, {"id": "components_quoteformpanel_route", "label": "route", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1208"}, {"id": "components_quoteformpanel_quotetypeoptions", "label": "quoteTypeOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1210"}, {"id": "components_quoteformpanel_createdefaultform", "label": "createDefaultForm()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1218"}, {"id": "components_quoteformpanel_formtitle", "label": "formTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1241"}, {"id": "components_quoteformpanel_basiclabels", "label": "basicLabels", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1245"}, {"id": "components_quoteformpanel_customershortname", "label": "customerShortName", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1264"}, {"id": "components_quoteformpanel_rules", "label": "rules", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1267"}, {"id": "components_quoteformpanel_opportunitydisplayname", "label": "opportunityDisplayName", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1312"}, {"id": "components_quoteformpanel_saveloading", "label": "saveLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1314"}, {"id": "components_quoteformpanel_productselectorvisible", "label": "productSelectorVisible", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1317"}, {"id": "components_quoteformpanel_customerselectorvisible", "label": "customerSelectorVisible", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1321"}, {"id": "components_quoteformpanel_customeroptionsloading", "label": "customerOptionsLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1323"}, {"id": "components_quoteformpanel_shortnamedialogvisible", "label": "shortNameDialogVisible", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1326"}, {"id": "components_quoteformpanel_shortnamesaving", "label": "shortNameSaving", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1327"}, {"id": "components_quoteformpanel_shortnameform", "label": "shortNameForm", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1329"}, {"id": "components_quoteformpanel_shortnamesavedsuccessfully", "label": "shortNameSavedSuccessfully", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1338"}, {"id": "components_quoteformpanel_exists", "label": "exists", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1345"}, {"id": "components_quoteformpanel_ensurecustomeroption", "label": "ensureCustomerOption()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1413"}, {"id": "components_quoteformpanel_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1459"}, {"id": "components_quoteformpanel_contactoptionsloading", "label": "contactOptionsLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1488"}, {"id": "components_quoteformpanel_contactemptyprompted", "label": "contactEmptyPrompted", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1491"}, {"id": "components_quoteformpanel_ensurecontactoption", "label": "ensureContactOption()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1537"}, {"id": "components_quoteformpanel_subtotal", "label": "subtotal", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1651"}, {"id": "components_quoteformpanel_parsed", "label": "parsed", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1673"}, {"id": "components_quoteformpanel_ossidsarray", "label": "ossIdsArray", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1687"}, {"id": "components_quoteformpanel_ossids", "label": "ossIds", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1700"}, {"id": "components_quoteformpanel_categorymap", "label": "categoryMap", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1701"}, {"id": "components_quoteformpanel_urlitems", "label": "urlItems", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1703"}, {"id": "components_quoteformpanel_match", "label": "match", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1748"}, {"id": "components_quoteformpanel_today", "label": "today", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1831"}, {"id": "components_quoteformpanel_year", "label": "year", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1832"}, {"id": "components_quoteformpanel_month", "label": "month", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1833"}, {"id": "components_quoteformpanel_day", "label": "day", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1834"}, {"id": "components_quoteformpanel_uniqueids", "label": "uniqueIds", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1883"}, {"id": "components_quoteformpanel_kept_skippednames", "label": "{ kept, skippedNames }", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1900"}, {"id": "components_quoteformpanel_primarycontact", "label": "primaryContact", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1971"}, {"id": "components_quoteformpanel_matched", "label": "matched", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2088"}, {"id": "components_quoteformpanel_nick", "label": "nick", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2095"}, {"id": "components_quoteformpanel_account", "label": "account", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2096"}, {"id": "components_quoteformpanel_list", "label": "list", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2133"}, {"id": "components_quoteformpanel_defaultsupplier", "label": "defaultSupplier", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2142"}, {"id": "components_quoteformpanel_ddindex", "label": "ddIndex", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2188"}, {"id": "components_quoteformpanel_dateandseq", "label": "dateAndSeq", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2190"}, {"id": "components_quoteformpanel_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2289"}, {"id": "components_quoteformpanel_text", "label": "text", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2325"}, {"id": "components_quoteformpanel_value", "label": "value", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2326"}, {"id": "components_quoteformpanel_ids", "label": "ids", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2341"}, {"id": "components_quoteformpanel_user", "label": "user", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2345"}, {"id": "components_quoteformpanel_supplier", "label": "supplier", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2392"}, {"id": "components_quoteformpanel_raw", "label": "raw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2407"}, {"id": "components_quoteformpanel_current", "label": "current", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2495"}, {"id": "components_quoteformpanel_days", "label": "days", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2508"}, {"id": "components_quoteformpanel_set", "label": "set", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2514"}, {"id": "components_quoteformpanel_picked", "label": "picked", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2521"}, {"id": "components_quoteformpanel_brandmeta", "label": "brandMeta", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2553"}, {"id": "components_quoteformpanel_quoteproductform", "label": "QuoteProductForm", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2555"}, {"id": "components_quoteformpanel_cachekey", "label": "cacheKey", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2612"}, {"id": "components_quoteformpanel_data", "label": "data", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2613"}, {"id": "components_quoteformpanel_meta", "label": "meta", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2619"}, {"id": "components_quoteformpanel_ext", "label": "ext", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2742"}, {"id": "components_quoteformpanel_lastdotindex", "label": "lastDotIndex", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2750"}, {"id": "components_quoteformpanel_name", "label": "name", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2755"}, {"id": "components_quoteformpanel_index", "label": "index", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2822"}, {"id": "components_quoteformpanel_link", "label": "link", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2840"}, {"id": "components_quoteformpanel_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2878"}, {"id": "components_quoteformpanel_attachmentswithcategory", "label": "attachmentsWithCategory", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2959"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_modal_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1109", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_modal_modal", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1109", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1110", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_quote_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1111", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_getquote", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1111", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_addquote", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1111", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_updatequote", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1111", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_submitquote", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1111", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_getquoteapproversetting", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1111", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_quote_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1112", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_quoteform", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1112", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "quote_index_quoteproductform", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1112", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "element_plus", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1113", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "vue_router", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1114", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_user_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1115", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "modules_user_useuserstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1115", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_http_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1116", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "icons_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1117", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_imagepreview_index_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1132", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_product_selector_index_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1133", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpstructskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1134", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_product_alias_brand_dialog_index_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1135", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_dictselect_index_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1136", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_customerselector_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1137", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_contactselector_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1138", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_customer_components_contactformdialog_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1139", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_opportunityselector_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1140", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_admin_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "api_admin_fetchuseroptions", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1141", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_contact_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "crm_contact_fetchcontactsbycustomerid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_customer_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1143", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "crm_customer_fetchcustomerlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1143", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "crm_customer_fetchupdatecustomer", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1143", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_opportunity_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1144", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "opportunity_index_listopportunity", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1144", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_supplierinfo_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1145", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "supplierinfo_index_listallsupplierinfo", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1145", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "supplierinfo_index_supplierinfovo", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1145", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_owner_candidates_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1146", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_owner_candidates_filterownercandidates", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1146", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_owner_candidates_finddefaultowneruser", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1146", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_supplier_hazard_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_supplier_hazard_removeproductsnotallowedbyhazard", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1147", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_product_brand_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1148", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_applybrandselectchange", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1148", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_applymanagedproductmetatolines", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1148", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_formatbrandconstraintlabel", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1148", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_initlinebrandmetafromproduct", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1148", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_preparelinealiasandbrandforsubmit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1148", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_product_brand_resolvealiasfromsavedname", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1148", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_product_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1156", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "crm_product_fetchproductdetail", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1156", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "crm_product_fetchproductlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1156", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_quote_copy_products_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1157", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "utils_crm_quote_copy_products_partitionquotelinesforcopy", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1157", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "vant", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1158", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "core", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1159", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1161", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ispagevariant", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1175", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_userstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1183", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1207", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1208", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_quotetypeoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1210", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_createdefaultform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1218", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_formtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1241", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_basiclabels", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1245", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_customershortname", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1264", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1267", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_opportunitydisplayname", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1312", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_saveloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1314", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_productselectorvisible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1317", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_customerselectorvisible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1321", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_customeroptionsloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1323", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_shortnamedialogvisible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1326", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_shortnamesaving", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1327", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_shortnameform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1329", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_shortnamesavedsuccessfully", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1338", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_exists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1345", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ensurecustomeroption", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1413", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1459", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1464", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_contactoptionsloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1488", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_contactemptyprompted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1491", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_exists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1502", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1528", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ensurecontactoption", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1537", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1576", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_subtotal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1651", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_parsed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1673", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ossidsarray", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1687", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ossids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1700", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_categorymap", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1701", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_urlitems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1703", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_match", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1748", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_today", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1831", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_year", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1832", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_month", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1833", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_day", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1834", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_match", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1856", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_uniqueids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1883", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_kept_skippednames", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1900", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_primarycontact", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1971", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1993", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_matched", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2088", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_nick", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2095", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_account", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2096", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2133", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_defaultsupplier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2142", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_today", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2172", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_year", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2173", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_month", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2174", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_day", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2175", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ddindex", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2188", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_dateandseq", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2190", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2289", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2322", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2325", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2326", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2341", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_user", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2345", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_supplier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2392", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_raw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2407", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_current", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2495", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_days", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2508", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2514", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_picked", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2521", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_brandmeta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2553", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_quoteproductform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2555", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_cachekey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2612", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2613", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_meta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2619", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2707", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2742", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_lastdotindex", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2750", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2755", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_ext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2756", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_index", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2822", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_link", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2840", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2878", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_link", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2879", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2896", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_attachmentswithcategory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2959", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3007", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_attachmentswithcategory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3099", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_today", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3170", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_year", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3171", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_month", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3172", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "target": "components_quoteformpanel_day", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3173", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_quoteformpanel_ensurecustomeroption", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1420"}, {"caller_nid": "components_quoteformpanel_if", "callee": "clearCustomerSelection", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1460"}, {"caller_nid": "components_quoteformpanel_ensurecontactoption", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1544"}, {"caller_nid": "components_quoteformpanel_if", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1994"}, {"caller_nid": "components_quoteformpanel_if", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1994"}, {"caller_nid": "components_quoteformpanel_if", "callee": "showFailToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L1995"}, {"caller_nid": "components_quoteformpanel_if", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2708"}, {"caller_nid": "components_quoteformpanel_if", "callee": "pageMissingMessage", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2897"}, {"caller_nid": "components_quoteformpanel_if", "callee": "showFailToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L2899"}, {"caller_nid": "components_quoteformpanel_if", "callee": "pageMissingMessage", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3008"}, {"caller_nid": "components_quoteformpanel_if", "callee": "showFailToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormPanel.vue", "source_location": "L3010"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/e8fd10ed6f02ea4874a5b725a95584cbd426ecf1a9e066eabcc0350dbd2787b5.json b/web-admin/graphify-out/cache/ast/e8fd10ed6f02ea4874a5b725a95584cbd426ecf1a9e066eabcc0350dbd2787b5.json
new file mode 100644
index 000000000..c6e8dad2b
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/e8fd10ed6f02ea4874a5b725a95584cbd426ecf1a9e066eabcc0350dbd2787b5.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "label": "CustomerFilters.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L1"}, {"id": "customer_customerfilters_defs", "label": "defs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L232"}, {"id": "customer_customerfilters_enumdefswithoptions", "label": "enumDefsWithOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L233"}, {"id": "customer_customerfilters_enumdefsneedfacet", "label": "enumDefsNeedFacet", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L236"}, {"id": "customer_customerfilters_textdefs", "label": "textDefs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L239"}, {"id": "customer_customerfilters_datetimedefs", "label": "datetimeDefs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L240"}, {"id": "customer_customerfilters_numberdefs", "label": "numberDefs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L241"}, {"id": "customer_customerfilters_viewoptions", "label": "viewOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L243"}, {"id": "customer_customerfilters_numberopoptions", "label": "numberOpOptions", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L249"}, {"id": "customer_customerfilters_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L266"}, {"id": "customer_customerfilters_number", "label": "number", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L267"}, {"id": "customer_customerfilters_singleopen", "label": "singleOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L271"}, {"id": "customer_customerfilters_numberopprop", "label": "numberOpProp", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L273"}, {"id": "customer_customerfilters_singlecolumns", "label": "singleColumns", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L274"}, {"id": "customer_customerfilters_singlevalue", "label": "singleValue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L280"}, {"id": "customer_customerfilters_enumopen", "label": "enumOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L285"}, {"id": "customer_customerfilters_enumprop", "label": "enumProp", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L286"}, {"id": "customer_customerfilters_enumtitle", "label": "enumTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L287"}, {"id": "customer_customerfilters_enumremote", "label": "enumRemote", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L290"}, {"id": "customer_customerfilters_enumkeyword", "label": "enumKeyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L291"}, {"id": "customer_customerfilters_enumloading", "label": "enumLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L292"}, {"id": "customer_customerfilters_dateopen", "label": "dateOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L296"}, {"id": "customer_customerfilters_datekey", "label": "dateKey", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L297"}, {"id": "customer_customerfilters_viewlabel", "label": "viewLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L301"}, {"id": "customer_customerfilters_numberoplabel", "label": "numberOpLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L304"}, {"id": "customer_customerfilters_displaydatetime", "label": "displayDateTime()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L307"}, {"id": "customer_customerfilters_enumsummary", "label": "enumSummary()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L311"}, {"id": "customer_customerfilters_clearfacets", "label": "clearFacets()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L318"}, {"id": "customer_customerfilters_resetdraft", "label": "resetDraft()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L325"}, {"id": "customer_customerfilters_scheduleliveapply", "label": "scheduleLiveApply", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L337"}, {"id": "customer_customerfilters_syncfromprops", "label": "syncFromProps()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L346"}, {"id": "customer_customerfilters_close", "label": "close()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L405"}, {"id": "customer_customerfilters_rawcontext", "label": "rawContext", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L441"}, {"id": "customer_customerfilters_context", "label": "context", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L449"}, {"id": "customer_customerfilters_idx", "label": "idx", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L521"}, {"id": "customer_customerfilters_set", "label": "set", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L526"}, {"id": "customer_customerfilters_raw", "label": "raw", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L546"}, {"id": "customer_customerfilters_row", "label": "Row", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L569"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_defs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L232", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumdefswithoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L233", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumdefsneedfacet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L236", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_textdefs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_datetimedefs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L240", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_numberdefs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L241", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_viewoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L243", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_numberopoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L249", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_number", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L267", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_singleopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L271", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_numberopprop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L273", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_singlecolumns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L274", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_singlevalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L280", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L285", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumprop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L286", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L287", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumremote", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L290", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumkeyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L291", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L292", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_dateopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L296", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_datekey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L297", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_viewlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L301", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_numberoplabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L304", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_displaydatetime", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L307", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_enumsummary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L311", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_clearfacets", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L318", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_resetdraft", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L325", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_scheduleliveapply", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L337", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_syncfromprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L346", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_close", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L405", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_rawcontext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L441", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L449", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_idx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L521", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L526", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_raw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L546", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerfilters_vue", "target": "customer_customerfilters_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L569", "weight": 1.0}, {"source": "customer_customerfilters_syncfromprops", "target": "customer_customerfilters_resetdraft", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L348", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_customerfilters_numberoplabel", "callee": "find", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L305"}, {"caller_nid": "customer_customerfilters_displaydatetime", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L308"}, {"caller_nid": "customer_customerfilters_displaydatetime", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L308"}, {"caller_nid": "customer_customerfilters_displaydatetime", "callee": "slice", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L309"}, {"caller_nid": "customer_customerfilters_displaydatetime", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L309"}, {"caller_nid": "customer_customerfilters_enumsummary", "callee": "isArray", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L312"}, {"caller_nid": "customer_customerfilters_enumsummary", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L314"}, {"caller_nid": "customer_customerfilters_enumsummary", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L315"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "fromEntries", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L327"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L327"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L327"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "fromEntries", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L328"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "map", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L329"}, {"caller_nid": "customer_customerfilters_resetdraft", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L329"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "assign", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L349"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L353"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L354"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "filter", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L363"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L363"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "keys", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L369"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "test", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L370"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L371"}, {"caller_nid": "customer_customerfilters_syncfromprops", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L374"}, {"caller_nid": "customer_customerfilters_close", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/CustomerFilters.vue", "source_location": "L406"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/eb1049fa425b2650ded361e8714ea2feb21e877dfe0c0a16a13543372d69452e.json b/web-admin/graphify-out/cache/ast/eb1049fa425b2650ded361e8714ea2feb21e877dfe0c0a16a13543372d69452e.json
new file mode 100644
index 000000000..a46e3c9eb
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/eb1049fa425b2650ded361e8714ea2feb21e877dfe0c0a16a13543372d69452e.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "label": "categories.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L1"}, {"id": "product_categories_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L417"}, {"id": "product_categories_payload", "label": "payload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L470"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "target": "product_categories_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L417", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "target": "product_categories_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L470", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_categories_if", "callee": "showFailToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L418"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/eb8fc181e8ff8cec531968e0bacd4b1eb99052dfce361bb8069f458bc8ab40fc.json b/web-admin/graphify-out/cache/ast/eb8fc181e8ff8cec531968e0bacd4b1eb99052dfce361bb8069f458bc8ab40fc.json
new file mode 100644
index 000000000..1169664dd
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/eb8fc181e8ff8cec531968e0bacd4b1eb99052dfce361bb8069f458bc8ab40fc.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "label": "MpWebviewShell.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L1"}, {"id": "layouts_mpwebviewshell_script", "label": "script", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L175"}, {"id": "layouts_mpwebviewshell_for", "label": "for()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L198"}, {"id": "layouts_mpwebviewshell_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L225"}, {"id": "layouts_mpwebviewshell_clearmpticketfrombrowserurl", "label": "clearMpTicketFromBrowserUrl()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L269"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "target": "layouts_mpwebviewshell_script", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L175", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "target": "layouts_mpwebviewshell_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L198", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "target": "layouts_mpwebviewshell_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "target": "layouts_mpwebviewshell_clearmpticketfrombrowserurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L269", "weight": 1.0}], "raw_calls": [{"caller_nid": "layouts_mpwebviewshell_for", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L199"}, {"caller_nid": "layouts_mpwebviewshell_for", "callee": "decodeURIComponent", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L200"}, {"caller_nid": "layouts_mpwebviewshell_for", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L201"}, {"caller_nid": "layouts_mpwebviewshell_for", "callee": "decodeURIComponent", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L201"}, {"caller_nid": "layouts_mpwebviewshell_for", "callee": "join", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L201"}, {"caller_nid": "layouts_mpwebviewshell_clearmpticketfrombrowserurl", "callee": "loadAllDict", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L279"}, {"caller_nid": "layouts_mpwebviewshell_clearmpticketfrombrowserurl", "callee": "enterReady", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/layouts/MpWebviewShell.vue", "source_location": "L280"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/ebad8d81ce31a7c52d6fbfb08fd6f96db76aa4fbe97e773a2c52750c59997efc.json b/web-admin/graphify-out/cache/ast/ebad8d81ce31a7c52d6fbfb08fd6f96db76aa4fbe97e773a2c52750c59997efc.json
new file mode 100644
index 000000000..336feaba1
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/ebad8d81ce31a7c52d6fbfb08fd6f96db76aa4fbe97e773a2c52750c59997efc.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L1"}, {"id": "attachment_upload_field_index_next", "label": "next", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L362"}, {"id": "attachment_upload_field_index_current", "label": "current", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L363"}, {"id": "attachment_upload_field_index_name", "label": "name", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L371"}, {"id": "attachment_upload_field_index_type", "label": "type", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L372"}, {"id": "attachment_upload_field_index_url", "label": "url", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L388"}, {"id": "attachment_upload_field_index_accept", "label": "accept", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L413"}, {"id": "attachment_upload_field_index_file", "label": "file", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L447"}, {"id": "attachment_upload_field_index_fd", "label": "fd", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L484"}, {"id": "attachment_upload_field_index_files", "label": "files", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L571"}, {"id": "attachment_upload_field_index_uploads", "label": "uploads", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L588"}, {"id": "attachment_upload_field_index_hovered", "label": "hovered", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L594"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "vue_router", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L211", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "icons_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L212", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "element_plus", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L225", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "element_plus", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L226", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_admin_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L227", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "api_admin_fetchuploadattachment", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L227", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_download_attachment_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_download_attachment_downloadattachmentfile", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_download_attachment_resolveattachmentpreviewurl", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L228", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_pl_photo_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L232", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_pl_photo_resolvephotodisplayurl", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L232", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_upload_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L233", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_crm_upload_buildattachmentuploadformdata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L233", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_crm_upload_crmuploadbiztype", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L233", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_image_preview_transform_js", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L234", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_image_preview_transform_image_preview_zoom_min", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L234", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_image_preview_transform_image_preview_zoom_max", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L234", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_image_preview_transform_image_preview_zoom_step", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L234", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_image_preview_transform_clamppreviewzoom", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L234", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_image_preview_transform_computefitbasescale", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L234", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_image_preview_transform_buildpreviewtransformcss", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L234", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L242", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "utils_mp_webview_ismpwebviewpath", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L242", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_next", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L362", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_current", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L363", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L371", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L372", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L380", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L381", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L386", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L387", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L388", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_accept", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L413", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L419", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L420", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L447", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_fd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L484", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L571", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_uploads", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L588", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_attachment_upload_field_index_vue", "target": "attachment_upload_field_index_hovered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/attachment-upload-field/index.vue", "source_location": "L594", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/ec3690e7a838f9d3b4b0e034647597e7c9bcc7dfaa10d5ccde8b9aa9c08b8eab.json b/web-admin/graphify-out/cache/ast/ec3690e7a838f9d3b4b0e034647597e7c9bcc7dfaa10d5ccde8b9aa9c08b8eab.json
new file mode 100644
index 000000000..71e187a71
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/ec3690e7a838f9d3b4b0e034647597e7c9bcc7dfaa10d5ccde8b9aa9c08b8eab.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_cert_certdetail_vue", "label": "CertDetail.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan-cert/CertDetail.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/ee0bc908dd82e32a3bc3365551ed122fd06ab7b9e6300711f7b527bcdf1c7174.json b/web-admin/graphify-out/cache/ast/ee0bc908dd82e32a3bc3365551ed122fd06ab7b9e6300711f7b527bcdf1c7174.json
new file mode 100644
index 000000000..5289363bb
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/ee0bc908dd82e32a3bc3365551ed122fd06ab7b9e6300711f7b527bcdf1c7174.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L1"}, {"id": "plan_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L536"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_index_vue", "target": "plan_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L536", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_pl_plan_index_vue", "target": "plan_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L661", "weight": 1.0}], "raw_calls": [{"caller_nid": "plan_index_if", "callee": "rangeFor", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/pl/plan/index.vue", "source_location": "L662"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/ef59e46fc3bbd0f2f61ede2f60ea5c0090b810e969841f84fbaa1d9251dd909d.json b/web-admin/graphify-out/cache/ast/ef59e46fc3bbd0f2f61ede2f60ea5c0090b810e969841f84fbaa1d9251dd909d.json
new file mode 100644
index 000000000..6b58d0831
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/ef59e46fc3bbd0f2f61ede2f60ea5c0090b810e969841f84fbaa1d9251dd909d.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "label": "DbPoundSlipQrcodeDialog.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L1"}, {"id": "db_dbpoundslipqrcodedialog_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L47"}, {"id": "db_dbpoundslipqrcodedialog_captureqrobjecturl", "label": "captureQrObjectUrl", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L49"}, {"id": "db_dbpoundslipqrcodedialog_quantityunitlabel", "label": "quantityUnitLabel", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L51"}, {"id": "db_dbpoundslipqrcodedialog_dialogtitle", "label": "dialogTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L53"}, {"id": "db_dbpoundslipqrcodedialog_formatqrcodeproductlabel", "label": "formatQrcodeProductLabel()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L58"}, {"id": "db_dbpoundslipqrcodedialog_formatproductline", "label": "formatProductLine()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L69"}, {"id": "db_dbpoundslipqrcodedialog_getqrimageurl", "label": "getQrImageUrl()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L73"}, {"id": "db_dbpoundslipqrcodedialog_close", "label": "close()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L77"}, {"id": "db_dbpoundslipqrcodedialog_loadqrcode", "label": "loadQrcode()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L81"}, {"id": "db_dbpoundslipqrcodedialog_handleclose", "label": "handleClose()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L106"}, {"id": "db_dbpoundslipqrcodedialog_copyqrcodeimage", "label": "copyQrcodeImage()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L112"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpstructskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L29", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_poundslipqrcodeview_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L30", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "db_dbpoundslipqrcodedialog_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L47", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "db_dbpoundslipqrcodedialog_captureqrobjecturl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L49", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "db_dbpoundslipqrcodedialog_quantityunitlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L51", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "db_dbpoundslipqrcodedialog_dialogtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L53", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "db_dbpoundslipqrcodedialog_formatqrcodeproductlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L58", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "db_dbpoundslipqrcodedialog_formatproductline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L69", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "db_dbpoundslipqrcodedialog_getqrimageurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L73", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "db_dbpoundslipqrcodedialog_close", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L77", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "db_dbpoundslipqrcodedialog_loadqrcode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L81", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "db_dbpoundslipqrcodedialog_handleclose", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L106", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_business_db_dbpoundslipqrcodedialog_vue", "target": "db_dbpoundslipqrcodedialog_copyqrcodeimage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L112", "weight": 1.0}, {"source": "db_dbpoundslipqrcodedialog_formatproductline", "target": "db_dbpoundslipqrcodedialog_formatqrcodeproductlabel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L70", "weight": 1.0}, {"source": "db_dbpoundslipqrcodedialog_loadqrcode", "target": "db_dbpoundslipqrcodedialog_getqrimageurl", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L93", "weight": 1.0}], "raw_calls": [{"caller_nid": "db_dbpoundslipqrcodedialog_formatqrcodeproductlabel", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L59"}, {"caller_nid": "db_dbpoundslipqrcodedialog_formatqrcodeproductlabel", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L60"}, {"caller_nid": "db_dbpoundslipqrcodedialog_formatqrcodeproductlabel", "callee": "endsWith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L62"}, {"caller_nid": "db_dbpoundslipqrcodedialog_formatqrcodeproductlabel", "callee": "trimEnd", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L63"}, {"caller_nid": "db_dbpoundslipqrcodedialog_formatqrcodeproductlabel", "callee": "slice", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L63"}, {"caller_nid": "db_dbpoundslipqrcodedialog_getqrimageurl", "callee": "encodeURIComponent", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L74"}, {"caller_nid": "db_dbpoundslipqrcodedialog_loadqrcode", "callee": "revokeObjectURL", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L85"}, {"caller_nid": "db_dbpoundslipqrcodedialog_loadqrcode", "callee": "get", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L89"}, {"caller_nid": "db_dbpoundslipqrcodedialog_loadqrcode", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L92"}, {"caller_nid": "db_dbpoundslipqrcodedialog_loadqrcode", "callee": "fetch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L94"}, {"caller_nid": "db_dbpoundslipqrcodedialog_loadqrcode", "callee": "blob", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L96"}, {"caller_nid": "db_dbpoundslipqrcodedialog_loadqrcode", "callee": "createObjectURL", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L97"}, {"caller_nid": "db_dbpoundslipqrcodedialog_loadqrcode", "callee": "error", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L99"}, {"caller_nid": "db_dbpoundslipqrcodedialog_handleclose", "callee": "revokeObjectURL", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L107"}, {"caller_nid": "db_dbpoundslipqrcodedialog_copyqrcodeimage", "callee": "then", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L115"}, {"caller_nid": "db_dbpoundslipqrcodedialog_copyqrcodeimage", "callee": "fetch", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L115"}, {"caller_nid": "db_dbpoundslipqrcodedialog_copyqrcodeimage", "callee": "write", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L116"}, {"caller_nid": "db_dbpoundslipqrcodedialog_copyqrcodeimage", "callee": "success", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L117"}, {"caller_nid": "db_dbpoundslipqrcodedialog_copyqrcodeimage", "callee": "warning", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/components/business/db/DbPoundSlipQrcodeDialog.vue", "source_location": "L120"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/f54190ff11d122618144fa1aaefd0c4695050123ecbcff7017acbf457abb3f84.json b/web-admin/graphify-out/cache/ast/f54190ff11d122618144fa1aaefd0c4695050123ecbcff7017acbf457abb3f84.json
new file mode 100644
index 000000000..a46e3c9eb
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/f54190ff11d122618144fa1aaefd0c4695050123ecbcff7017acbf457abb3f84.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "label": "categories.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L1"}, {"id": "product_categories_if", "label": "if()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L417"}, {"id": "product_categories_payload", "label": "payload", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L470"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "target": "product_categories_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L417", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_product_categories_vue", "target": "product_categories_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L470", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_categories_if", "callee": "showFailToast", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/product/categories.vue", "source_location": "L418"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/f57c36a275f38026e22a06d333f1116ffc389cf14aabf0dc6536f003b06a742d.json b/web-admin/graphify-out/cache/ast/f57c36a275f38026e22a06d333f1116ffc389cf14aabf0dc6536f003b06a742d.json
new file mode 100644
index 000000000..d47093757
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/f57c36a275f38026e22a06d333f1116ffc389cf14aabf0dc6536f003b06a742d.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformdialog_vue", "label": "QuoteFormDialog.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L1"}, {"id": "components_quoteformdialog_props", "label": "props", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L60"}, {"id": "components_quoteformdialog_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L116"}, {"id": "components_quoteformdialog_handlesuccess", "label": "handleSuccess()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L120"}, {"id": "components_quoteformdialog_bootpagemode", "label": "bootPageMode()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L127"}, {"id": "components_quoteformdialog_open", "label": "open()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L166"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformdialog_vue", "target": "icons_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L57", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformdialog_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformpanel_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L58", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformdialog_vue", "target": "components_quoteformdialog_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L60", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformdialog_vue", "target": "components_quoteformdialog_handlesubmit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L116", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformdialog_vue", "target": "components_quoteformdialog_handlesuccess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L120", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformdialog_vue", "target": "components_quoteformdialog_bootpagemode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L127", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_quote_components_quoteformdialog_vue", "target": "components_quoteformdialog_open", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L166", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_quoteformdialog_handlesuccess", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L124"}, {"caller_nid": "components_quoteformdialog_bootpagemode", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L129"}, {"caller_nid": "components_quoteformdialog_bootpagemode", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L130"}, {"caller_nid": "components_quoteformdialog_bootpagemode", "callee": "initEdit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L133"}, {"caller_nid": "components_quoteformdialog_bootpagemode", "callee": "initCopy", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L135"}, {"caller_nid": "components_quoteformdialog_bootpagemode", "callee": "initNew", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L137"}, {"caller_nid": "components_quoteformdialog_bootpagemode", "callee": "emit", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/crm/quote/components/QuoteFormDialog.vue", "source_location": "L141"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/f739d5512287c5c745838c362e5cce7dd3f40d16cb9947d42debdce89e665ab6.json b/web-admin/graphify-out/cache/ast/f739d5512287c5c745838c362e5cce7dd3f40d16cb9947d42debdce89e665ab6.json
new file mode 100644
index 000000000..08708c69d
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/f739d5512287c5c745838c362e5cce7dd3f40d16cb9947d42debdce89e665ab6.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "label": "RelatedPanel.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L1"}, {"id": "customer_relatedpanel_dict", "label": "dict", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L316"}, {"id": "customer_relatedpanel_page", "label": "page", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L319"}, {"id": "customer_relatedpanel_total", "label": "total", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L320"}, {"id": "customer_relatedpanel_loading", "label": "loading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L321"}, {"id": "customer_relatedpanel_error", "label": "error", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L322"}, {"id": "customer_relatedpanel_keyword", "label": "keyword", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L323"}, {"id": "customer_relatedpanel_quick1", "label": "quick1", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L324"}, {"id": "customer_relatedpanel_quick2", "label": "quick2", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L325"}, {"id": "customer_relatedpanel_moreopen", "label": "moreOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L326"}, {"id": "customer_relatedpanel_detailopen", "label": "detailOpen", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L330"}, {"id": "customer_relatedpanel_detailloading", "label": "detailLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L331"}, {"id": "customer_relatedpanel_detailerror", "label": "detailError", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L332"}, {"id": "customer_relatedpanel_searchplaceholder", "label": "searchPlaceholder", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L371"}, {"id": "customer_relatedpanel_quick1options", "label": "quick1Options", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L377"}, {"id": "customer_relatedpanel_quick2options", "label": "quick2Options", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L402"}, {"id": "customer_relatedpanel_moreactive", "label": "moreActive", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L428"}, {"id": "customer_relatedpanel_key", "label": "key", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L553"}, {"id": "customer_relatedpanel_issubexpanded", "label": "isSubExpanded()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L556"}, {"id": "customer_relatedpanel_togglesubexpand", "label": "toggleSubExpand()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L559"}, {"id": "customer_relatedpanel_fieldtext", "label": "fieldText()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L564"}, {"id": "customer_relatedpanel_cardtitle", "label": "cardTitle()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L574"}, {"id": "customer_relatedpanel_cardmeta", "label": "cardMeta()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L581"}, {"id": "customer_relatedpanel_cardtag", "label": "cardTag()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L590"}, {"id": "customer_relatedpanel_cardtone", "label": "cardTone()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L599"}, {"id": "customer_relatedpanel_matchquick", "label": "matchQuick()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L610"}, {"id": "customer_relatedpanel_matchkeyword", "label": "matchKeyword()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L624"}, {"id": "customer_relatedpanel_filtered", "label": "filtered", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L648"}, {"id": "customer_relatedpanel_onmoreopen", "label": "onMoreOpen()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L661"}, {"id": "customer_relatedpanel_resetmore", "label": "resetMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L666"}, {"id": "customer_relatedpanel_applymore", "label": "applyMore()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L669"}, {"id": "customer_relatedpanel_ondetailshow", "label": "onDetailShow()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L682"}, {"id": "customer_relatedpanel_closedetail", "label": "closeDetail()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L685"}, {"id": "customer_relatedpanel_load", "label": "load()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L689"}, {"id": "customer_relatedpanel_open", "label": "open()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L724"}, {"id": "customer_relatedpanel_refreshopportunity", "label": "refreshOpportunity()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L751"}, {"id": "customer_relatedpanel_onopportunitydeleted", "label": "onOpportunityDeleted()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L755"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_opportunityactions_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L297", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_customerattachments_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L298", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_creator_delete_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L299", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "utils_creator_delete_candeletebycreator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L299", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_crm_opportunity_labels_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L300", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "utils_crm_opportunity_labels_opportunity_source_fallback", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L300", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "utils_crm_opportunity_labels_opportunity_type_fallback", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L300", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_opportunity_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L304", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "opportunity_index_listopportunity", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L304", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "opportunity_index_getopportunity", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L304", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "opportunity_index_listfollowbyopportunity", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L304", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "opportunity_index_getstageloglist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L304", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_contract_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L310", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "contract_index_listcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L310", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_monitor_operlog_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L311", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "operlog_index_list", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L311", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_store_modules_dict_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L312", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "modules_dict_usedictstore", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L312", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_model_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L313", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_model_unwrapdata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L313", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_model_unwraprows", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L313", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_model_type", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L313", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_model_field", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L313", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L316", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L319", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L320", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_loading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L321", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L322", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_keyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L323", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_quick1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L324", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_quick2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L325", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_moreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L326", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_detailopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L330", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_detailloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L331", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_detailerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L332", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_searchplaceholder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L371", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_quick1options", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L377", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_quick2options", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L402", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_moreactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L428", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L553", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_issubexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L556", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_togglesubexpand", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L559", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_fieldtext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L564", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_cardtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L574", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_cardmeta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L581", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_cardtag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L590", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_cardtone", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L599", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_matchquick", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L610", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_matchkeyword", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L624", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_filtered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L648", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_onmoreopen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L661", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_resetmore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L666", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_applymore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L669", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_ondetailshow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L682", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_closedetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L685", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L689", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_open", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L724", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_refreshopportunity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L751", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_customer_relatedpanel_vue", "target": "customer_relatedpanel_onopportunitydeleted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L755", "weight": 1.0}, {"source": "customer_relatedpanel_refreshopportunity", "target": "customer_relatedpanel_open", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L752", "weight": 1.0}, {"source": "customer_relatedpanel_refreshopportunity", "target": "customer_relatedpanel_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L753", "weight": 1.0}, {"source": "customer_relatedpanel_onopportunitydeleted", "target": "customer_relatedpanel_load", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L757", "weight": 1.0}], "raw_calls": [{"caller_nid": "customer_relatedpanel_fieldtext", "callee": "getLabel", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L566"}, {"caller_nid": "customer_relatedpanel_fieldtext", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L566"}, {"caller_nid": "customer_relatedpanel_fieldtext", "callee": "find", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L568"}, {"caller_nid": "customer_relatedpanel_fieldtext", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L569"}, {"caller_nid": "customer_relatedpanel_fieldtext", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L571"}, {"caller_nid": "customer_relatedpanel_cardtitle", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L575"}, {"caller_nid": "customer_relatedpanel_cardtitle", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L577"}, {"caller_nid": "customer_relatedpanel_cardtitle", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L579"}, {"caller_nid": "customer_relatedpanel_cardtag", "callee": "getLabel", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L592"}, {"caller_nid": "customer_relatedpanel_cardtag", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L592"}, {"caller_nid": "customer_relatedpanel_cardtag", "callee": "getLabel", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L595"}, {"caller_nid": "customer_relatedpanel_cardtag", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L595"}, {"caller_nid": "customer_relatedpanel_cardtag", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L597"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L600"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L602"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L603"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L603"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L604"}, {"caller_nid": "customer_relatedpanel_cardtone", "callee": "includes", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L604"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L612"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L613"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L615"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L616"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L618"}, {"caller_nid": "customer_relatedpanel_matchquick", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L619"}, {"caller_nid": "customer_relatedpanel_matchkeyword", "callee": "toLowerCase", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L625"}, {"caller_nid": "customer_relatedpanel_matchkeyword", "callee": "trim", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L625"}, {"caller_nid": "customer_relatedpanel_matchkeyword", "callee": "some", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L628"}, {"caller_nid": "customer_relatedpanel_matchkeyword", "callee": "some", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L635"}, {"caller_nid": "customer_relatedpanel_matchkeyword", "callee": "some", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L641"}, {"caller_nid": "customer_relatedpanel_onmoreopen", "callee": "emptyMore", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L662"}, {"caller_nid": "customer_relatedpanel_onmoreopen", "callee": "nextTick", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L664"}, {"caller_nid": "customer_relatedpanel_resetmore", "callee": "emptyMore", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L667"}, {"caller_nid": "customer_relatedpanel_load", "callee": "listOpportunity", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L703"}, {"caller_nid": "customer_relatedpanel_load", "callee": "listContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L705"}, {"caller_nid": "customer_relatedpanel_load", "callee": "listOperLog", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L706"}, {"caller_nid": "customer_relatedpanel_load", "callee": "unwrapData", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L713"}, {"caller_nid": "customer_relatedpanel_load", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L714"}, {"caller_nid": "customer_relatedpanel_load", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L714"}, {"caller_nid": "customer_relatedpanel_open", "callee": "all", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L735"}, {"caller_nid": "customer_relatedpanel_open", "callee": "getOpportunity", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L736"}, {"caller_nid": "customer_relatedpanel_open", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L736"}, {"caller_nid": "customer_relatedpanel_open", "callee": "listFollowByOpportunity", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L737"}, {"caller_nid": "customer_relatedpanel_open", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L737"}, {"caller_nid": "customer_relatedpanel_open", "callee": "getStageLogList", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L738"}, {"caller_nid": "customer_relatedpanel_open", "callee": "String", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L738"}, {"caller_nid": "customer_relatedpanel_open", "callee": "unwrapData", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L740"}, {"caller_nid": "customer_relatedpanel_open", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L741"}, {"caller_nid": "customer_relatedpanel_open", "callee": "unwrapRows", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/customer/RelatedPanel.vue", "source_location": "L742"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/fa1e7d81e1425985e2a79117e020ce5b01ae3d7b50f2c1dff9577f9a14aa772f.json b/web-admin/graphify-out/cache/ast/fa1e7d81e1425985e2a79117e020ce5b01ae3d7b50f2c1dff9577f9a14aa772f.json
new file mode 100644
index 000000000..de9982bb5
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/fa1e7d81e1425985e2a79117e020ce5b01ae3d7b50f2c1dff9577f9a14aa772f.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_dom_mjs", "label": "test-mp-crm-quote-dom.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote-dom.mjs", "source_location": "L1"}, {"id": "scripts_test_mp_crm_quote_dom_root", "label": "root", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote-dom.mjs", "source_location": "L4"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_dom_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote-dom.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_dom_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote-dom.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_test_mp_crm_quote_dom_mjs", "target": "scripts_test_mp_crm_quote_dom_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/test-mp-crm-quote-dom.mjs", "source_location": "L4", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/fc99850bfd0ca32f904cd380cda402ad974b9e658fde201772e598a75b801e1a.json b/web-admin/graphify-out/cache/ast/fc99850bfd0ca32f904cd380cda402ad974b9e658fde201772e598a75b801e1a.json
new file mode 100644
index 000000000..afcdfa9e3
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/fc99850bfd0ca32f904cd380cda402ad974b9e658fde201772e598a75b801e1a.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "label": "form.vue", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L1"}, {"id": "contract_form_route", "label": "route", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L36"}, {"id": "contract_form_router", "label": "router", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L37"}, {"id": "contract_form_contentloading", "label": "contentLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L38"}, {"id": "contract_form_bootloading", "label": "bootLoading", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L39"}, {"id": "contract_form_booterror", "label": "bootError", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L40"}, {"id": "contract_form_formready", "label": "formReady", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L41"}, {"id": "contract_form_copyfrom", "label": "copyFrom", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L46"}, {"id": "contract_form_pagetitle", "label": "pageTitle", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L51"}, {"id": "contract_form_editid", "label": "editId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L57"}, {"id": "contract_form_copyfromid", "label": "copyFromId", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L63"}, {"id": "contract_form_formkey", "label": "formKey", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L69"}, {"id": "contract_form_loadingcopy", "label": "loadingCopy", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L74"}, {"id": "contract_form_bootform", "label": "bootForm()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L84"}, {"id": "contract_form_onloadingchange", "label": "onLoadingChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L115"}, {"id": "contract_form_golist", "label": "goList()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L119"}, {"id": "contract_form_onvisiblechange", "label": "onVisibleChange()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L123"}, {"id": "contract_form_onsuccess", "label": "onSuccess()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L127"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "vue_router", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L27", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_layouts_mpwebviewshell_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L28", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpbusinessheader_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L29", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_components_mp_mpstructskeleton_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L30", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_crm_contract_components_contractformdialog_vue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_api_crm_contract_index_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L32", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_index_getcontract", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L32", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_index_contractvo", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L32", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_utils_mp_webview_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L33", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "utils_mp_webview_mp_crm_contract_list_path", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L33", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "users_zlwu_work_00code_shanxia2_0_web_admin_src_styles_mp_webview_scss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L34", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L36", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L37", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_contentloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L38", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_bootloading", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L39", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_booterror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L40", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_formready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L41", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_copyfrom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L46", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_pagetitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L51", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_editid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L57", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_copyfromid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L63", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_formkey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L69", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_loadingcopy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L74", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_bootform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L84", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_onloadingchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L115", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_golist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L119", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_onvisiblechange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L123", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_src_views_m_crm_contract_form_vue", "target": "contract_form_onsuccess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L127", "weight": 1.0}, {"source": "contract_form_onvisiblechange", "target": "contract_form_golist", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L124", "weight": 1.0}, {"source": "contract_form_onsuccess", "target": "contract_form_golist", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L132", "weight": 1.0}], "raw_calls": [{"caller_nid": "contract_form_bootform", "callee": "getContract", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L93"}, {"caller_nid": "contract_form_golist", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L120"}, {"caller_nid": "contract_form_onsuccess", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/src/views/m/crm/contract/form.vue", "source_location": "L129"}]}
\ No newline at end of file
diff --git a/web-admin/graphify-out/cache/ast/fe279fefc8562ebf5bc9dcca639423a35b97312d85adf439eae262a8b5a3ed22.json b/web-admin/graphify-out/cache/ast/fe279fefc8562ebf5bc9dcca639423a35b97312d85adf439eae262a8b5a3ed22.json
new file mode 100644
index 000000000..4f2b0a60c
--- /dev/null
+++ b/web-admin/graphify-out/cache/ast/fe279fefc8562ebf5bc9dcca639423a35b97312d85adf439eae262a8b5a3ed22.json
@@ -0,0 +1 @@
+{"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_mp_crm_primitives_test_mjs", "label": "mp-crm-primitives.test.mjs", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/mp-crm-primitives.test.mjs", "source_location": "L1"}, {"id": "scripts_mp_crm_primitives_test_root", "label": "root", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/mp-crm-primitives.test.mjs", "source_location": "L5"}, {"id": "scripts_mp_crm_primitives_test_read", "label": "read()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/mp-crm-primitives.test.mjs", "source_location": "L6"}, {"id": "scripts_mp_crm_primitives_test_statusblocks", "label": "statusBlocks", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/mp-crm-primitives.test.mjs", "source_location": "L70"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_mp_crm_primitives_test_mjs", "target": "strict", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/mp-crm-primitives.test.mjs", "source_location": "L1", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_mp_crm_primitives_test_mjs", "target": "node_test", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/mp-crm-primitives.test.mjs", "source_location": "L2", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_mp_crm_primitives_test_mjs", "target": "promises", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/mp-crm-primitives.test.mjs", "source_location": "L3", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_mp_crm_primitives_test_mjs", "target": "scripts_mp_crm_primitives_test_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/mp-crm-primitives.test.mjs", "source_location": "L5", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_mp_crm_primitives_test_mjs", "target": "scripts_mp_crm_primitives_test_read", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/mp-crm-primitives.test.mjs", "source_location": "L6", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_web_admin_scripts_mp_crm_primitives_test_mjs", "target": "scripts_mp_crm_primitives_test_statusblocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/mp-crm-primitives.test.mjs", "source_location": "L70", "weight": 1.0}], "raw_calls": [{"caller_nid": "scripts_mp_crm_primitives_test_read", "callee": "readFile", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/web-admin/scripts/mp-crm-primitives.test.mjs", "source_location": "L6"}]}
\ No newline at end of file
diff --git a/web-admin/scripts/crm-existing-issues.test.ts b/web-admin/scripts/crm-existing-issues.test.ts
new file mode 100644
index 000000000..29f6ba0cb
--- /dev/null
+++ b/web-admin/scripts/crm-existing-issues.test.ts
@@ -0,0 +1,162 @@
+import assert from 'node:assert/strict'
+import { readFileSync } from 'node:fs'
+import test from 'node:test'
+import { runInNewContext } from 'node:vm'
+import ts from 'typescript'
+import { parse } from '@vue/compiler-sfc'
+import { createSSRApp, h } from 'vue'
+import { renderToString } from 'vue/server-renderer'
+import { parseTime } from '../src/utils/format'
+
+// 执行组件中的真实处理函数,只替换网络与弹窗边界,避免写入业务库。
+function source(path: string) {
+  const file = readFileSync(new URL('../src/views/crm/' + path, import.meta.url), 'utf8')
+  return ts.createSourceFile(
+    path,
+    parse(file).descriptor.scriptSetup!.content,
+    ts.ScriptTarget.Latest,
+    true
+  )
+}
+function evaluate(code: string, context: Record) {
+  return runInNewContext(
+    ts.transpileModule(code, {
+      compilerOptions: { target: ts.ScriptTarget.ES2022, module: ts.ModuleKind.None }
+    }).outputText,
+    context
+  )
+}
+function handler(path: string, name: string, context: Record) {
+  const file = source(path)
+  const statement = file.statements.find(
+    (s) =>
+      (ts.isFunctionDeclaration(s) && s.name?.text === name) ||
+      (ts.isVariableStatement(s) &&
+        s.declarationList.declarations.some((d) => d.name.getText(file) === name))
+  )
+  assert.ok(statement, `组件应保留 ${name} 处理入口`)
+  return evaluate(statement.getText(file) + '\n' + name, context)
+}
+
+for (const [path, name, api] of [
+  ['customer/FollowFormDialog.vue', 'loadContactList', 'fetchContactByCustomerId'],
+  ['customer/components/ContactList.vue', 'getList', 'fetchContactsByCustomerId']
+]) {
+  test(`${path}:解析实际已解包联系人数组并兼容旧包装`, async () => {
+    const rows = [{ id: '90071992547409931', contactName: '联系人甲' }]
+    for (const response of [rows, { data: rows }, [], null]) {
+      const contactList = { value: [{ id: 'old' }] }
+      const load = handler(path, name, {
+        [api]: async () => response,
+        contactList,
+        props: { customerId: 'customer-1' },
+        loading: { value: false },
+        console
+      })
+      await load('customer-1')
+      assert.equal(
+        JSON.stringify(contactList.value),
+        JSON.stringify(
+          response === rows || (!Array.isArray(response) && response?.data) ? rows : []
+        )
+      )
+    }
+  })
+  test(`${path}:请求失败清空旧联系人`, async () => {
+    const contactList = { value: [{ id: 'old' }] }
+    const loading = { value: false }
+    const load = handler(path, name, {
+      [api]: async () => {
+        throw new Error('offline')
+      },
+      contactList,
+      props: { customerId: 'customer-1' },
+      loading,
+      console: { error() {} }
+    })
+    await load('customer-1')
+    assert.equal(contactList.value.length, 0)
+    assert.equal(loading.value, false)
+  })
+}
+
+test('操作日志各字段只能作为文本渲染,不能注入标签或事件', async () => {
+  const payload = '
&"\n第二行' + let message: any + let options: any + const show = handler('customer/CustomerDetailDialog.vue', 'handleViewLogDetail', { + h, + ElMessageBox: { + alert(content: unknown, _title: string, config: unknown) { + message = content + options = config + } + } + }) + show( + Object.fromEntries( + ['title', 'operName', 'operTime', 'operUrl', 'operParam'].map((k) => [k, payload]) + ) + ) + const html = + typeof message === 'string' && options.dangerouslyUseHTMLString + ? message + : await renderToString(createSSRApp({ render: () => message })) + assert.doesNotMatch(html, / { + const previousTZ = process.env.TZ + process.env.TZ = 'Asia/Shanghai' + try { + const file = source('opportunity/components/FollowDialog.vue') + const watcher = file.statements.find( + (s) => + ts.isExpressionStatement(s) && + ts.isCallExpression(s.expression) && + s.expression.expression.getText(file) === 'watch' + )! + for (const instant of ['2026-10-17T20:01:01+08:00', '2026-10-17T00:01:01+08:00']) { + let callback: (open: boolean) => Promise + const form = { value: {} as Record } + const props: any = { opportunityId: '90071992547409931' } + evaluate(watcher.getText(file), { + watch: (_source: unknown, fn: typeof callback) => { + callback = fn + }, + props, + form, + visible: { value: false }, + attachmentUrls: { value: '' }, + resetForm: () => { + form.value = {} + }, + Date: class extends Date { + constructor() { + super(instant) + } + }, + parseTime, + getOpportunityFollow: async () => ({ + data: { + id: 'follow-1', + followTime: '2026-10-16 09:30:12', + nextTime: '2026-10-17 20:01:01' + } + }) + }) + await callback!(true) + assert.equal(form.value.followTime, instant.slice(0, 19).replace('T', ' ')) + props.followData = { id: 'follow-1' } + await callback!(true) + assert.equal(form.value.followTime, '2026-10-16 09:30:12') + assert.equal(form.value.nextTime, '2026-10-17 20:01:01') + } + } finally { + if (previousTZ == null) delete process.env.TZ + else process.env.TZ = previousTZ + } +}) diff --git a/web-admin/scripts/mp-pl-plan-cert-entry.test.mjs b/web-admin/scripts/mp-pl-plan-cert-entry.test.mjs new file mode 100644 index 000000000..00f8f173c --- /dev/null +++ b/web-admin/scripts/mp-pl-plan-cert-entry.test.mjs @@ -0,0 +1,73 @@ +import assert from 'node:assert/strict' +import test from 'node:test' +import { readFile } from 'node:fs/promises' +import ts from 'typescript' + +const root = new URL('../../', import.meta.url) +const read = (path) => readFile(new URL(path, root), 'utf8') + +test('危化品证上传位于运输管理并复用现有 WebView 壳', async () => { + const source = await read('miniprogram/config/workbench-menus.js') + const { WORKBENCH_MODULES } = await import(`data:text/javascript,${encodeURIComponent(source)}`) + const transport = WORKBENCH_MODULES.find((m) => m.key === 'pl') + const entry = transport.menus.find((m) => m.code === 'pl-plan-cert-webview') + assert.ok(entry, '运输管理缺少危化品证上传入口') + assert.equal(entry.name, '危化品证上传') + assert.equal(entry.perms, 'mini:pl:plan-cert:list') + assert.equal(entry.enabled, true) + const api = await read('miniprogram/config/api.js') + const ast = ts.createSourceFile('api.js', api, ts.ScriptTarget.Latest, true) + let expression + function visit(node) { + if (ts.isPropertyAssignment(node) && node.name.getText(ast) === "'pl-plan-cert-webview'") + expression = node.initializer.getText(ast) + ts.forEachChild(node, visit) + } + visit(ast) + assert.ok(expression, '缺少工作台路由映射') + const path = new Function('PAGE_PATHS', `return ${expression}`)({ + mpWebview: '/pages/common/mp-webview' + }) + assert.equal(path, '/pages/common/mp-webview?path=%2Fm%2Fpl%2Fplan-cert') +}) + +test('H5 列表与详情均使用独立移动路由并隐藏桌面工作标签', async () => { + const source = await read('web-admin/src/router/routes/staticRoutes.ts') + const ast = ts.createSourceFile('routes.ts', source, ts.ScriptTarget.Latest, true) + const routes = new Map() + function visit(node) { + if (ts.isObjectLiteralExpression(node)) { + const pathProp = node.properties.find( + (prop) => ts.isPropertyAssignment(prop) && prop.name.getText(ast) === 'path' + ) + if (pathProp && ts.isPropertyAssignment(pathProp) && ts.isStringLiteral(pathProp.initializer)) + routes.set(pathProp.initializer.text, node) + } + ts.forEachChild(node, visit) + } + visit(ast) + const listRoute = routes.get('/m/pl/plan-cert') + const detailRoute = routes.get('/m/pl/plan-cert/:id') + assert.ok(listRoute, '缺少 /m/pl/plan-cert 路由') + assert.match(listRoute.getText(ast), /views\/m\/pl\/plan-cert\/index\.vue/) + assert.ok(detailRoute, '缺少 /m/pl/plan-cert/:id 独立详情路由') + assert.match(detailRoute.getText(ast), /views\/m\/pl\/plan-cert\/detail\.vue/) + for (const route of [listRoute, detailRoute]) { + assert.match(route.getText(ast), /isMpWebview:\s*true/) + assert.match(route.getText(ast), /isHideTab:\s*true/) + } +}) + +test('菜单 SQL 仅补移动入口与已有授权角色的完整祖先链', async () => { + const sql = await read('docs/sql/migrations/2026-10-17-mini-pl-plan-cert-webview-menus.sql') + assert.match(sql, /START TRANSACTION/i) + assert.match(sql, /COMMIT/i) + assert.match(sql, /mini:pl:plan-cert:list/) + assert.match(sql, /MINI_PL_ROOT/) + assert.match(sql, /parent_id\s*=\s*'1'/) + assert.match(sql, /EXISTS\s*\([\s\S]*m\.perms\s*=\s*'pl:plan-cert:list'[\s\S]*\)/) + assert.match(sql, /r\.tenant_no\s*=\s*'shanxia2.0'/) + assert.match(sql, /ON DUPLICATE KEY UPDATE/i) + assert.doesNotMatch(sql, /\b(?:DELETE|DROP|ALTER|TRUNCATE)\s/i) + assert.doesNotMatch(sql, /pl:plan-cert:(?:upload|ready)/) +}) diff --git a/web-admin/scripts/mp-pl-plan-cert-fixture.mjs b/web-admin/scripts/mp-pl-plan-cert-fixture.mjs new file mode 100644 index 000000000..2361f1c06 --- /dev/null +++ b/web-admin/scripts/mp-pl-plan-cert-fixture.mjs @@ -0,0 +1,471 @@ +// 浏览器测试的 API 边界替身;绝不向真实业务接口发请求。 +const pdfObjects = [ + '<< /Type /Catalog /Pages 2 0 R >>', + '<< /Type /Pages /Kids [3 0 R] /Count 1 >>', + '<< /Type /Page /Parent 2 0 R /MediaBox [0 0 200 200] /Resources << >> /Contents 4 0 R >>', + '<< /Length 0 >>\nstream\n\nendstream' +] +let pdfFixture = '%PDF-1.4\n' +const offsets = [0] +pdfObjects.forEach((obj, i) => { + offsets.push(Buffer.byteLength(pdfFixture)) + pdfFixture += `${i + 1} 0 obj\n${obj}\nendobj\n` +}) +const xref = Buffer.byteLength(pdfFixture) +pdfFixture += `xref\n0 5\n0000000000 65535 f \n${offsets + .slice(1) + .map((n) => `${String(n).padStart(10, '0')} 00000 n `) + .join('\n')}\ntrailer\n<< /Size 5 /Root 1 0 R >>\nstartxref\n${xref}\n%%EOF` +export function makePlan(index, overrides = {}) { + const id = `plan-${index}` + const toxic = { + id: `${id}-toxic`, + planId: id, + productId: 'toxic', + productNo: 'CP001', + productName: '测试易制毒产品', + brandName: '测试品牌', + aliasName: '测试别名', + model: '99%', + unit: 'ton', + quantity: 12, + actualQty: 11, + isToxic: 1, + isExplosive: 0, + purchaseCertUrl: '', + transportCertUrl: '', + legalUseCertUrl: '' + } + const explosive = { + ...toxic, + id: `${id}-explosive`, + productId: 'explosive', + productNo: 'CP002', + productName: '测试易制爆产品', + isToxic: 0, + isExplosive: 1 + } + const stopProducts = [toxic, explosive].map((p) => ({ + ...p, + id: `stop-${p.id}`, + planProductId: p.id, + planQty: 12, + inboundQty: 10, + outboundQty: 9, + contractId: 'contract-1', + contractNo: 'HT-001', + packageSpec: 'bulk', + remark: '产品备注' + })) + return { + id, + planNo: `YS${String(index).padStart(3, '0')}`, + planDate: '2026-10-17', + createDate: '2026-10-17', + createTime: '2026-10-17 09:15:00', + belongsCompany: 'shanxia', + planType: ['inbound', 'outbound', 'direct'][(index - 1) % 3], + followStatus: 'pending_arrange', + transportStatus: 'pending', + archiveStatus: 'pending', + completeStatus: 'pending', + hasFreight: 1, + freightAmount: 1234, + freightRemark: '测试运费说明', + totalAmount: 12345, + hazardCertReady: 0, + followUserName: '测试跟进人', + licensePlate: '鄂E12345', + trailerNo: '鄂E1234挂', + driverName: '测试司机', + escortName: '测试押运员', + personnelSummary: '司机:测试司机;押运:测试押运员', + deliveryTimes: ['2026-10-18 10:30:00', '2026-10-19 14:20:00'], + remark: '证书迁移测试备注', + products: [toxic, explosive], + documentAttachments: [{ url: '/fixtures/plan.pdf', label: '计划附件.pdf' }], + load: { + id: `${id}-load`, + customerName: '测试供应商', + address: '湖北省宜昌市装货地址', + loadTime: '2026-10-17 09:20:00', + contact: '张师傅 13800000000', + notes: '装货注意事项', + contracts: [{ contractId: 'contract-1', contractNo: 'HT-001' }], + products: stopProducts + }, + deliveries: [1, 2].map((seq) => ({ + id: `${id}-delivery-${seq}`, + seq, + customerName: `测试需方${seq}`, + address: `送货地址${seq}`, + deliveryTime: `2026-10-${17 + seq} 10:30:00`, + contact: '李师傅 13900000000', + notes: `送货注意事项${seq}`, + generateDibang: 0, + contracts: [{ contractId: 'contract-1', contractNo: 'HT-001' }], + products: stopProducts.map((p) => ({ ...p, id: `${p.id}-${seq}`, planQty: 6 })) + })), + ...overrides + } +} + +export async function installCertFixture(context) { + const state = { + plans: Array.from({ length: 24 }, (_, i) => makePlan(i + 1)), + codes: [ + 'mini:pl:plan-cert:list', + 'pl:plan-cert:list', + 'pl:plan-cert:upload', + 'pl:plan-cert:ready' + ], + calls: [], + unknown: [], + failList: false, + failSave: false, + failReadyIds: [], + uploadGate: null, + listDelay: null, + linkedListGate: null, + failPermissions: false + } + state.plans[3].archiveStatus = 'archived' + state.plans[4].followStatus = 'cancelled' + state.plans[5].hazardCertReady = 1 + state.plans[6].transportStatus = 'arranged' + state.plans[6].followStatus = 'arranged' + state.plans[6].transportId = 'transport-7' + await context.addInitScript(() => { + window.__copiedText = '' + Object.defineProperty(navigator, 'clipboard', { + configurable: true, + value: { + writeText: async (text) => { + window.__copiedText = text + } + } + }) + window.wx = { + miniProgram: { + navigateBack() {}, + reLaunch() {}, + getEnv(cb) { + cb({ miniprogram: true }) + } + } + } + }) + await context.route('**/fixtures/**', (route) => + route.fulfill( + route.request().url().endsWith('.png') + ? { + contentType: 'image/png', + body: Buffer.from( + 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+cL1sAAAAASUVORK5CYII=', + 'base64' + ) + } + : { contentType: 'application/pdf', body: pdfFixture } + ) + ) + await context.route('https://api.qrserver.com/**', (route) => + route.fulfill({ + contentType: 'image/svg+xml', + body: 'Mock QR preview' + }) + ) + await context.route('**/api/**', async (route) => { + const request = route.request() + const url = new URL(request.url()) + if (!url.pathname.startsWith('/api/')) return route.continue() + const path = url.pathname.slice(4) + const method = request.method() + let body = {} + try { + body = request.postDataJSON() || {} + } catch { + body = {} + } + const params = Object.fromEntries(url.searchParams) + state.calls.push({ path, method, body, params }) + let data + let error = '' + if (path === '/web/auth/mp-webview-exchange') { + data = { + token: 'fixture-token', + refreshToken: 'fixture-refresh', + userInfo: { + id: 'user-1', + userId: 'user-1', + userName: '测试用户', + role: 'admin', + roles: ['admin'] + } + } + } else if (path === '/web/auth/menu-codes') { + data = { all: false, isSuperAdmin: false, menuCodes: state.codes } + if (state.failPermissions) error = '权限加载失败' + } else if (path === '/web/admin/dict-data/all') { + data = { + crm_product_unit: [{ value: 'ton', label: '吨' }], + pl_package_spec: [{ value: 'bulk', label: '散装' }] + } + } else if (path === '/transport/plan/') { + if (params.contractId === 'contract-1' && state.linkedListGate) await state.linkedListGate + if (state.listDelay) await state.listDelay(params) + if (state.failList) { + state.failList = false + error = '列表测试失败' + } + let rows = state.plans + if (params.followStatus) + rows = rows.filter((p) => params.followStatus.split(',').includes(p.followStatus)) + if (params.planType) rows = rows.filter((p) => p.planType === params.planType) + if (params.hazardCertReady !== undefined) + rows = rows.filter((p) => p.hazardCertReady === Number(params.hazardCertReady)) + if (params.q) + rows = rows.filter( + (p) => + p.planNo.includes(params.q) || p.products.some((x) => x.productName.includes(params.q)) + ) + if (params.certUploadStatus === 'incomplete') + rows = rows.filter((p) => + p.products.some((x) => + x.isToxic + ? !(x.purchaseCertUrl && x.transportCertUrl) + : x.isExplosive && !x.legalUseCertUrl + ) + ) + const page = Number(params.page || 1), + size = Number(params.pageSize || 20) + data = { + list: rows.slice((page - 1) * size, page * size), + total: rows.length, + page, + pageSize: size + } + } else if (path === '/transport/plan/column-facet-values') { + const values = { + planNo: ['YS001'], + licensePlate: ['鄂E12345'], + productName: ['测试易制毒产品'], + productSpec: ['99%'], + productUnit: ['ton'], + loadCustomer: ['测试供应商'], + deliveryCustomer: ['测试需方1'], + productContract: ['HT-001'] + } + data = { + list: (values[body.field] || []).map((value) => ({ value, label: value, count: 1 })) + } + } else if (/^\/transport\/plan\/plan-\d+$/.test(path)) { + data = state.plans.find((p) => p.id === path.split('/').pop()) + } else if (/\/plan-\d+\/product-certs$/.test(path)) { + const plan = state.plans.find((p) => p.id === path.split('/')[3]) + if (state.failSave) { + state.failSave = false + error = '证书保存测试失败' + } else + for (const item of body.products) + Object.assign( + plan.products.find((p) => p.id === item.id), + item + ) + data = plan + } else if (/\/plan-\d+\/hazard-cert-ready$/.test(path)) { + const plan = state.plans.find((p) => p.id === path.split('/')[3]) + if (state.failReadyIds.includes(plan.id)) error = '齐备测试失败' + else plan.hazardCertReady = body.ready ? 1 : 0 + data = plan + } else if (/\/plan-\d+\/arrange-info$/.test(path)) { + data = { + driverUrl: 'https://example.test/driver', + licensePlate: '鄂E12345', + siteRecords: [ + { + siteLinkId: 'site-1', + siteUrl: 'https://example.test/site', + planProductId: 'plan-7-toxic', + productName: '测试易制毒产品', + customerName: '测试需方1' + } + ], + inventoryRecords: [ + { + dbInventoryId: 'inventory-7', + dbPurchasePlanId: 'purchase-7', + planProductId: 'plan-7-toxic', + productName: '测试易制毒产品', + businessType: '入库' + } + ] + } + } else if (path === '/transport/inbound/by-plan/plan-7') { + data = { + id: 'io-7', + kind: 'inbound', + orderNo: 'RK-007', + status: 'in_progress', + siteFeedbackRemark: '入库现场备注', + siteFeedbackTime: '2026-10-17 16:20:00', + siteFeedbackImages: ['/fixtures/inbound.pdf'], + products: [] + } + } else if (path === '/transport/order/transport-7') { + data = { + id: 'transport-7', + transportNo: 'TR007', + licensePlate: '鄂E12345', + driverName: '测试司机', + driverPhone: '13800000000', + escortName: '测试押运员', + freightAmount: 1234, + freightPrice: 50, + freightType: 'by_weight', + transportQty: 24, + hasInvoice: 1, + distanceKm: 100, + unit: 'ton', + transportStatus: 'arranged', + approvalStatus: 'approved', + createTime: '2026-10-17 11:00:00', + feedbackTime: '2026-10-17 16:00:00', + feedbackQty: 23, + feedbackRemark: '司机回传测试备注', + feedbackImages: '["/fixtures/driver.pdf"]', + driverStopFeedbacks: [ + { + stopType: 'load', + stopId: 'plan-7-load', + label: '装货', + customerName: '测试供应商', + quantity: 23, + remark: '司机装货回传', + feedbackTime: '2026-10-17 16:00:00', + attachmentUrls: ['/fixtures/driver.png'], + products: [] + } + ], + siteStopFeedbacks: [ + { + stopType: 'delivery', + stopId: 'plan-7-delivery-1', + label: '送货', + customerName: '测试需方1', + quantity: 12, + remark: '现场送货回传', + feedbackTime: '2026-10-18 10:00:00', + attachmentUrls: ['/fixtures/site.pdf'], + products: [] + } + ] + } + } else if (path === '/transport/freight/by-transport/transport-7') { + data = null + } else if (path === '/inventory/inventory-7/related') { + data = { + plan: null, + weighing: { + id: 'weighing-7', + vehicleNo: '鄂E12345', + netWeight: 11, + grossWeight: 30, + tareWeight: 19, + grossWeightTime: '2026-10-17 15:30:00', + tareWeightTime: '2026-10-17 16:30:00', + supplier: '测试供应商', + consignee: '测试需方1', + remarks: '测试过磅备注' + } + } + } else if (path === '/inventory/inventory-7') { + data = { + id: 'inventory-7', + date: '2026-10-17', + vehicleNo: '鄂E12345', + partnerCompany: '测试供应商', + product: '测试易制毒产品', + quantity: 12, + businessType: '入库' + } + } else if (/^\/web\/crm\/contract\/approval\/flow\/contract-[12]$/.test(path)) { + data = [] + } else if (/^\/web\/crm\/contract\/contract-[12]$/.test(path)) { + data = { + id: path.split('/').pop(), + contractNo: path.endsWith('contract-1') ? 'HT-001' : 'HT-002', + contractName: '危化品证书测试合同', + opportunityId: 'opportunity-1', + quoteId: 'quote-1', + contractType: 'sales', + customerName: '测试需方1', + supplierName: '测试供应商', + status: 'approved', + startDate: '2026-01-01', + endDate: '2026-12-31', + remark: '合同说明', + amount: 2400, + partyA: '测试甲方', + partyB: '测试乙方', + partyAAccount: '测试账号001', + contractFile: '[{"ossId":"/fixtures/contract.pdf","name":"合同原件.pdf"}]', + attachmentFiles: '[{"ossId":"/fixtures/extra.pdf","name":"其他附件.pdf"}]', + products: [ + { + id: 'contract-product-1', + productId: 'toxic', + productName: '测试别名', + unit: 'ton', + quantity: 24, + price: 100, + subtotal: 2400 + } + ], + attachments: '/fixtures/contract.pdf' + } + } else if (path === '/web/crm/opportunity/detail') { + data = { id: 'opportunity-1', opportunityName: '测试关联商机' } + } else if (path === '/web/crm/quote/detail') { + data = { id: 'quote-1', quoteNo: 'BJ-001' } + } else if (path === '/web/crm/products/detail') { + data = { + id: body.id, + productName: body.id === 'toxic' ? '测试易制毒产品' : '测试易制爆产品', + aliases: [{ aliasName: '测试别名' }], + isToxic: body.id === 'toxic' ? 1 : 0, + isExplosive: body.id === 'explosive' ? 1 : 0 + } + } else if (path === '/web/admin/attachment/preview-url') { + data = { previewUrl: params.fileUrl || body.fileUrl } + } else if (path === '/web/admin/attachment/download-url') { + data = { downloadUrl: params.fileUrl || body.fileUrl } + } else if (path === '/web/admin/attachment/upload') { + if (state.uploadGate) await state.uploadGate + data = { + id: 'file-1', + fileName: '测试证书.pdf', + fileUrl: '/fixtures/cert.pdf', + fileType: 'application/pdf' + } + } else { + state.unknown.push({ path, method, body, params }) + error = `未定义测试接口:${method} ${path}` + } + if (error) + return route.fulfill({ + status: 400, + contentType: 'application/json', + body: JSON.stringify({ code: 400, msg: error, detail: error }) + }) + // 运输 API 是 FastAPI 直出;Web API 使用 code=200 的信封。 + await route.fulfill({ + contentType: 'application/json', + body: JSON.stringify( + path.startsWith('/transport/') || path.startsWith('/inventory/') + ? data + : { code: 200, msg: 'ok', data } + ) + }) + }) + return state +} diff --git a/web-admin/scripts/test-mp-crm-contract-dom.mjs b/web-admin/scripts/test-mp-crm-contract-dom.mjs new file mode 100644 index 000000000..58d00862e --- /dev/null +++ b/web-admin/scripts/test-mp-crm-contract-dom.mjs @@ -0,0 +1,73 @@ +import assert from 'node:assert/strict' +import { readFile } from 'node:fs/promises' + +const root = new URL('../src/views/m/crm/contract/', import.meta.url) +const list = await readFile(new URL('MpContractList.vue', root), 'utf8') +const detail = await readFile(new URL('detail.vue', root), 'utf8') + +assert.match(list, / { + const start = () => { + const root = document.documentElement + if (!root) return + const hide = () => { + const el = document.getElementById('__vue-devtools-container__') + if (el) el.style.setProperty('display', 'none', 'important') + } + hide() + new MutationObserver(hide).observe(root, { childList: true, subtree: true }) + } + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start) + else start() +}) +const page = await context.newPage() +page.setDefaultTimeout(7000) +const pageErrors = [] +const calls = [] +page.on('pageerror', (error) => pageErrors.push(error.message)) + +const baseContract = { + id: 'contract-1', + contractNo: 'HT-20261017-001', + contractName: '年度化工原料销售合同', + customerId: 'customer-1', + customerName: '宜昌测试客户', + contactName: '张经理', + contactMobile: '13800138000', + contractType: 'sale', + amount: 128600, + freight: 500, + barrelDeposit: 1000, + amountWithTax: 130100, + signDate: '2026-10-17', + startDate: '2026-10-18', + endDate: '2027-10-17', + ownerUserId: 'user-1', + ownerUserName: '测试销售', + status: 'draft', + canApprove: true, + partyA: '宜昌测试客户', + partyAContact: '张经理', + partyAMobile: '13800138000', + partyB: '山峡化工', + partyBContact: '李经理', + partyBMobile: '13900139000', + paymentTerms: '月结 30 天', + deliveryTerms: '送货上门', + contractTerms: '按约定履行', + attachmentFiles: JSON.stringify([{ ossId: '/fixtures/合同扫描件.pdf', category: 'scan' }]), + remark: 'fixture 合同', + createBy: 'user-1', + createTime: '2026-10-17 09:00:00', + products: [ + { + id: 'line-1', + standardProductName: '工业甲醇', + quantity: 10, + unit: '吨', + unitPrice: 12000, + amount: 120000 + } + ] +} + +const contracts = [ + baseContract, + { + ...baseContract, + id: 'contract-2', + contractNo: 'HT-20261017-002', + contractName: '已审批合同', + status: 'approved', + canApprove: false + }, + { + ...baseContract, + id: 'contract-fail', + contractNo: 'HT-20261017-003', + contractName: '审批失败样本', + status: 'approving', + canApprove: true + } +] + +let approvals = [ + { + id: 'approval-1', + contractId: baseContract.id, + step: 1, + approverId: 'user-before', + approverName: '前置审批人', + approvalResult: 'pending', + approvalOpinion: '', + createTime: '2026-10-17 10:00:00' + }, + { + id: 'approval-2', + contractId: baseContract.id, + step: 2, + approverId: 'user-1', + approverName: '测试审批人', + approvalResult: 'pending', + approvalOpinion: '', + createTime: '2026-10-17 10:30:00' + } +] +let approvalEntry = false +let forbiddenMode = '' + +const dict = { + crm_contract_status: [ + { value: 'draft', label: '草稿', tagType: 'info' }, + { value: 'approving', label: '待审批', tagType: 'warning' }, + { value: 'approved', label: '已审批', tagType: 'success' }, + { value: 'invalid', label: '已作废', tagType: 'danger' } + ], + crm_contract_type: [ + { value: 'sale', label: '销售合同', tagType: 'primary' }, + { value: 'purchase', label: '采购合同', tagType: 'info' } + ] +} + +await context.addInitScript(() => { + window.wx = { + miniProgram: { + navigateBack() {}, + reLaunch() {}, + getEnv(callback) { + callback({ miniprogram: true }) + } + } + } +}) + +await context.route('**/api/**', async (route) => { + const request = route.request() + const url = new URL(request.url()) + if (!url.pathname.startsWith('/api/')) return route.continue() + const path = url.pathname.replace(/^\/api/, '') + let body = Object.fromEntries(url.searchParams) + try { + body = { ...body, ...(request.postDataJSON() || {}) } + } catch { + // multipart 上传不参与 body 精确断言。 + } + calls.push({ path, body }) + + let data = {} + let code = 200 + let msg = 'ok' + if (path === '/web/auth/mp-webview-exchange') { + const ticket = String(body.ticket || '') + approvalEntry = ticket.includes('approve') + forbiddenMode = ticket.includes('forbidden-list') + ? 'list' + : ticket.includes('forbidden-detail') + ? 'detail' + : '' + data = { + token: 'fixture-token', + refreshToken: 'fixture-refresh', + userInfo: { + id: 'user-1', + userId: 'user-1', + userName: '测试用户', + role: 'admin', + roles: ['admin'] + } + } + } else if (path === '/web/admin/dict-data/all') { + data = dict + } else if (path === '/web/admin/users/options') { + data = [{ value: 'user-1', label: '测试审批人', userNo: 'approver' }] + } else if (path === '/web/crm/contract/list') { + if (forbiddenMode === 'list') { + code = 403 + msg = '无权限访问合同列表' + } else { + const list = body.approvedByUserId + ? contracts.filter((item) => item.status === 'approved') + : approvalEntry + ? contracts.map((item) => ({ + ...item, + status: item.id === 'contract-2' ? 'approved' : 'approving' + })) + : contracts + data = { list, total: list.length } + } + } else if (/^\/web\/crm\/contract\/contract-(?:1|2|fail)$/.test(path)) { + if (forbiddenMode === 'detail') { + code = 403 + msg = '无权限访问合同详情' + } else { + const id = decodeURIComponent(path.split('/').pop()) + const row = contracts.find((item) => item.id === id) || baseContract + data = { + ...row, + status: approvalEntry + ? approvals.some((item) => item.approvalResult === 'pending') + ? 'approving' + : 'approved' + : row.status + } + } + } else if (/^\/web\/crm\/contract\/approval\/flow\//.test(path)) { + data = { list: approvals } + } else if (path === '/web/crm/contract-approver-setting/get') { + data = { approverIds: ['user-1'], status: '0' } + } else if (path === '/web/crm/contract/batchSubmitApproval') { + data = body.ids?.length || 0 + } else if (path === '/web/crm/contract/approval') { + if (body.id === 'contract-fail') { + await route.abort('failed') + return + } else { + approvals = approvals.map((item) => ({ + ...item, + approvalResult: body.approvalResult, + approvalOpinion: body.approvalOpinion, + approvalTime: '2026-10-17 11:00:00' + })) + data = true + } + } else if (path === '/web/admin/attachment/upload') { + data = { id: 'upload-1', fileName: '补充扫描件.png', fileUrl: '/fixtures/补充扫描件.png' } + } else if (path === '/web/crm/contract/uploadAttachments') { + data = true + } else if (path === '/web/crm/contract/invalid') { + data = true + } + + await route.fulfill({ + status: 200, + contentType: 'application/json', + body: JSON.stringify({ code, msg, data }) + }) +}) + +const click = (name) => + page + .getByRole('button', { name, exact: true }) + .or(page.getByRole('tab', { name, exact: true })) + .filter({ visible: true }) + .first() + .click() +const lastCall = (path) => calls.findLast((item) => item.path === path) + +async function assertNoOverflow(width) { + await page.setViewportSize({ width, height: 812 }) + assert.equal( + await page.evaluate(() => document.documentElement.scrollWidth > innerWidth), + false, + `页面在 ${width}px 不应横向溢出` + ) +} + +function boxesOverlap(a, b) { + return !( + a.x + a.width <= b.x || + b.x + b.width <= a.x || + a.y + a.height <= b.y || + b.y + b.height <= a.y + ) +} + +try { + await page.goto(`${origin}/#/m/crm/contract?mpTicket=contract-forbidden-list`) + await page.getByText('无权限', { exact: true }).waitFor() + + await page.goto( + `${origin}/#/m/crm/contract/contract-1?from=manage&mpTicket=contract-forbidden-detail` + ) + await page.locator('.mp-wv-empty').getByText('无权限访问合同详情', { exact: true }).waitFor() + + await page.goto(`${origin}/#/m/crm/contract?mpTicket=contract-manage-fixture`) + await page.getByRole('heading', { name: '合同管理', exact: true }).waitFor() + await page.getByRole('button', { name: `查看合同:${baseContract.contractName}` }).waitFor() + + const listOrder = await Promise.all( + ['.mp-wv-header', '.mp-customer-view-tabs', '.mp-customer-dd', '.mp-wv-flat-card'].map( + async (selector) => (await page.locator(selector).first().boundingBox())?.y ?? -1 + ) + ) + assert.deepEqual( + [...listOrder].sort((a, b) => a - b), + listOrder + ) + assert.equal(await page.locator('.mp-customer-dd .van-dropdown-menu__item').count(), 3) + assert.equal(await page.locator('.mp-wv-speed-dial').count(), 1) + const manageCards = page.locator('.mp-wv-flat-card') + assert.equal(await manageCards.nth(0).locator('.mp-wv-card-actions').isVisible(), true) + assert.equal(await manageCards.nth(1).locator('.mp-wv-card-actions').count(), 0) + assert.equal(await manageCards.nth(2).locator('.mp-wv-card-actions').count(), 0) + + await page.locator('.van-dropdown-menu__title', { hasText: '全部类型' }).click() + await Promise.all([ + page.waitForResponse((response) => + new URL(response.url()).pathname.endsWith('/web/crm/contract/list') + ), + page.locator('.van-dropdown-item__option', { hasText: '销售合同' }).first().click() + ]) + assert.equal(lastCall('/web/crm/contract/list').body.contractType, 'sale') + + await page.locator('.van-dropdown-menu__title', { hasText: '更多' }).click() + const filterSheet = page.getByRole('dialog').filter({ hasText: '更多筛选' }) + await filterSheet.waitFor() + await filterSheet.locator('input[type="search"]').fill('年度') + await filterSheet.getByText('签订日起', { exact: true }).click() + await page.locator('.van-picker__confirm').click() + await filterSheet.getByText('签订日止', { exact: true }).click() + await page.locator('.van-picker__confirm').click() + await filterSheet.locator('.van-field').filter({ hasText: '金额最低' }).locator('input').fill('100') + await filterSheet.locator('.van-field').filter({ hasText: '金额最高' }).locator('input').fill('200000') + await Promise.all([ + page.waitForResponse((response) => + new URL(response.url()).pathname.endsWith('/web/crm/contract/list') + ), + filterSheet.getByRole('button', { name: '确定', exact: true }).click() + ]) + const moreBody = lastCall('/web/crm/contract/list').body + assert.equal(moreBody.keyword, '年度') + assert.match(moreBody.signDateBegin, /^\d{4}-\d{2}-\d{2}$/) + assert.match(moreBody.signDateEnd, /^\d{4}-\d{2}-\d{2}$/) + assert.equal(Number(moreBody.minAmount), 100) + assert.equal(Number(moreBody.maxAmount), 200000) + + const searchInput = page.getByRole('searchbox', { name: '搜索合同' }) + await Promise.all([ + page.waitForResponse((response) => + new URL(response.url()).pathname.endsWith('/web/crm/contract/list') + ), + searchInput.fill('') + ]) + assert.equal('keyword' in lastCall('/web/crm/contract/list').body, false) + + await click('多选') + assert.ok(await page.locator('.mp-wv-batch-bar').isVisible()) + const selectors = page.locator('.expense-card__select') + await selectors.nth(0).click() + await selectors.nth(1).click() + await click('提交审批') + const submitSheet = page.getByRole('dialog').filter({ hasText: '提交审批' }) + await submitSheet.waitFor() + assert.ok(await submitSheet.getByText('已跳过 1 条非草稿', { exact: false }).isVisible()) + await Promise.all([ + page.waitForResponse((response) => + response.url().endsWith('/web/crm/contract/batchSubmitApproval') + ), + submitSheet.getByRole('button', { name: '确认提交', exact: true }).click() + ]) + assert.deepEqual(lastCall('/web/crm/contract/batchSubmitApproval').body.ids, ['contract-1']) + const submitSuccess = page.getByText('成功提交 1 条,跳过 1 条', { exact: true }) + await submitSuccess.waitFor() + await submitSuccess.waitFor({ state: 'hidden' }) + await click('快捷操作') + assert.ok(await page.getByRole('button', { name: '新增合同', exact: true }).isVisible()) + await click('快捷操作') + await page.screenshot({ path: `${artifacts}/manage-list-375.png`, fullPage: true }) + await assertNoOverflow(375) + + const manageDetailUrl = `${origin}/#/m/crm/contract/contract-1?from=manage&mpTicket=contract-manage-direct` + const detailCallsBefore = calls.filter( + (item) => item.path === '/web/crm/contract/contract-1' + ).length + await page.goto(manageDetailUrl) + await page.getByRole('heading', { name: '合同详情', exact: true }).waitFor() + await page.reload() + await page.getByRole('heading', { name: '合同详情', exact: true }).waitFor() + assert.ok( + calls.filter((item) => item.path === '/web/crm/contract/contract-1').length >= + detailCallsBefore + 2 + ) + assert.equal(await page.locator('.mp-wv-header').getByText(baseContract.contractName).count(), 0) + assert.equal(await page.locator('.mp-wv-header__sub').count(), 0) + assert.ok(await page.getByRole('button', { name: '提交审批', exact: true }).isVisible()) + assert.ok(await page.getByRole('button', { name: '编辑', exact: true }).isVisible()) + assert.equal(await page.getByRole('button', { name: '通过', exact: true }).count(), 0) + await click('产品明细') + await page.getByText('工业甲醇', { exact: true }).waitFor() + await click('审批信息') + await page.locator('.mp-crm-approval-timeline').waitFor() + await click('附件') + const attachment = page.locator('.mp-crm-att-grid .att-item').first() + const attachmentBox = await attachment.boundingBox() + assert.equal(Math.round(attachmentBox?.width || 0), 72) + assert.equal(Math.round(attachmentBox?.height || 0), 72) + const previewBox = await attachment.locator('.att-preview').boundingBox() + const removeBox = await attachment.locator('.att-remove').boundingBox() + const addBox = await page.locator('.mp-crm-att-grid .att-add').boundingBox() + const attachmentGeometry = { attachmentBox, previewBox, removeBox, addBox } + console.log(`contract attachment geometry: ${JSON.stringify(attachmentGeometry)}`) + assert.equal( + Math.round(previewBox?.width || 0), + 72, + `附件预览宽度必须为 72px:${JSON.stringify(previewBox)}` + ) + assert.equal( + Math.round(previewBox?.height || 0), + 72, + `附件预览高度必须为 72px:${JSON.stringify(previewBox)}` + ) + assert.ok( + (removeBox?.width || 0) >= 44 && (removeBox?.height || 0) >= 44, + `删除附件命中区必须不小于 44px:${JSON.stringify(removeBox)}` + ) + assert.ok( + (addBox?.width || 0) >= 44 && (addBox?.height || 0) >= 44, + `添加附件命中区必须不小于 44px:${JSON.stringify(addBox)}` + ) + assert.equal( + boxesOverlap(removeBox, addBox), + false, + `删除与添加命中区不得重叠:${JSON.stringify({ removeBox, addBox })}` + ) + await page.screenshot({ path: `${artifacts}/manage-detail-375.png`, fullPage: true }) + + await click('更多') + const uploadScan = page.getByRole('button', { name: '上传扫描件', exact: true }) + await uploadScan.waitFor() + const uploadScanBox = await uploadScan.boundingBox() + assert.ok(uploadScanBox.y >= 0 && uploadScanBox.y + uploadScanBox.height <= 812) + await uploadScan.click() + await page.locator('input[type="file"]').setInputFiles({ + name: '补充扫描件.png', + mimeType: 'image/png', + buffer: Buffer.from('fixture') + }) + await page.waitForResponse((response) => + response.url().endsWith('/web/crm/contract/uploadAttachments') + ) + assert.equal(lastCall('/web/crm/contract/uploadAttachments').body.id, 'contract-1') + assert.equal(lastCall('/web/crm/contract/uploadAttachments').body.attachments.length, 2) + + await page.goto(`${origin}/#/m/crm/contract/approval?mpTicket=contract-approve-fixture`) + await page.getByRole('heading', { name: '合同审批', exact: true }).waitFor() + await page.getByRole('button', { name: `查看合同:${baseContract.contractName}` }).waitFor() + assert.equal(await page.locator('.mp-wv-speed-dial').count(), 0) + assert.equal(lastCall('/web/crm/contract/list').body.pendingApprovalUserId, 'user-1') + const approveCards = page.locator('.mp-wv-flat-card') + assert.equal(await approveCards.nth(0).locator('.mp-wv-card-actions').isVisible(), true) + assert.equal(await approveCards.nth(1).locator('.mp-wv-card-actions').count(), 0) + assert.equal(await approveCards.nth(2).locator('.mp-wv-card-actions').isVisible(), true) + + await click('多选') + const approveSelectors = page.locator('.expense-card__select') + await approveSelectors.nth(0).click() + await approveSelectors.nth(1).click() + await approveSelectors.nth(2).click() + await click('通过') + const batchApproveSheet = page.getByRole('dialog').filter({ hasText: '批量通过' }) + await batchApproveSheet.waitFor() + assert.ok(await batchApproveSheet.getByText('已跳过 1 条不可审批', { exact: false }).isVisible()) + await batchApproveSheet.getByRole('button', { name: '确认通过', exact: true }).click() + await page.waitForTimeout(100) + const partialMessages = await page.locator('.el-message').allTextContents() + assert.ok( + partialMessages.some((text) => text.includes('成功通过 1 条,失败 1 条,跳过 1 条')), + `批量部分成功提示缺失:${partialMessages.join(' | ')}` + ) + assert.equal(calls.filter((item) => item.path === '/web/crm/contract/approval').length, 2) + assert.equal(await page.locator('.mp-wv-batch-bar').count(), 0) + + await page.waitForFunction(() => document.querySelectorAll('.el-message').length === 0) + approvals = approvals.map((item) => ({ + ...item, + approvalResult: 'pending', + approvalOpinion: '', + approvalTime: '' + })) + await page.goto( + `${origin}/#/m/crm/contract/contract-1?from=approve&mpTicket=contract-approve-direct` + ) + await page.getByRole('heading', { name: '合同详情', exact: true }).waitFor() + assert.match(page.url(), /from=approve/) + assert.equal(await page.getByRole('button', { name: '通过', exact: true }).count(), 0) + assert.equal(await page.getByRole('button', { name: '驳回', exact: true }).count(), 0) + assert.equal(await page.getByRole('button', { name: '提交审批', exact: true }).count(), 0) + assert.equal(await page.getByRole('button', { name: '编辑', exact: true }).count(), 0) + approvals[0] = { + ...approvals[0], + approvalResult: 'approved', + approvalOpinion: '前置审批已通过', + approvalTime: '2026-10-17 10:20:00' + } + await page.reload() + await page.getByRole('button', { name: '通过', exact: true }).waitFor() + assert.ok(await page.getByRole('button', { name: '驳回', exact: true }).isVisible()) + assert.equal(await page.getByRole('button', { name: '提交审批', exact: true }).count(), 0) + assert.equal(await page.getByRole('button', { name: '编辑', exact: true }).count(), 0) + await click('通过') + const approveSheet = page.getByRole('dialog').filter({ hasText: '通过合同' }) + await approveSheet.waitFor() + await approveSheet.getByRole('button', { name: '确认通过', exact: true }).click() + const confirmDialog = page.locator('.van-dialog').filter({ hasText: '确认要通过该合同吗?' }) + await confirmDialog.getByRole('button', { name: '确认', exact: true }).click() + await confirmDialog.waitFor({ state: 'hidden' }) + assert.equal(lastCall('/web/crm/contract/approval').body.id, 'contract-1') + assert.equal(lastCall('/web/crm/contract/approval').body.approvalResult, 'approved') + await page.waitForFunction(() => document.querySelectorAll('.el-message').length === 0) + await assertNoOverflow(414) + await page.screenshot({ path: `${artifacts}/approve-detail-414.png`, fullPage: true }) + + await page.getByRole('button', { name: '返回合同审批', exact: true }).click() + await page.getByRole('heading', { name: '合同审批', exact: true }).waitFor() + await Promise.all([ + page.waitForResponse((response) => + new URL(response.url()).pathname.endsWith('/web/crm/contract/list') + ), + click('已审批') + ]) + assert.equal(lastCall('/web/crm/contract/list').body.approvedByUserId, 'user-1') + await page.screenshot({ path: `${artifacts}/approve-list-414.png`, fullPage: true }) + + assert.deepEqual(pageErrors, []) + console.log( + JSON.stringify({ + result: 'PASS', + assertions: + '管理/审批列表骨架、真实筛选、金额卡、动作栏显隐、Speed Dial差异、多选批量底栏、批量提交、批量审批部分成功、详情直达/刷新、列表与详情403、两步审批门禁、入口权限差异、固定详情头、Tab、时间轴、72px附件与不重叠命中区、附件上传、单条审批、375/414布局', + apiCalls: calls.length, + screenshots: artifacts + }) + ) +} catch (error) { + await page.screenshot({ path: `${artifacts}/failure.png`, fullPage: true }) + console.error(await page.locator('body').innerText()) + console.error('Page errors:', pageErrors) + console.error('API calls:', calls) + throw error +} finally { + await browser.close() +} diff --git a/web-admin/scripts/test-mp-crm-customer-dom.mjs b/web-admin/scripts/test-mp-crm-customer-dom.mjs new file mode 100644 index 000000000..f54835a65 --- /dev/null +++ b/web-admin/scripts/test-mp-crm-customer-dom.mjs @@ -0,0 +1,78 @@ +import assert from 'node:assert/strict' +import { readFile } from 'node:fs/promises' + +const root = new URL('../src/views/m/crm/customer/', import.meta.url) +const [list, detail, filters, attachments, fields, styles] = await Promise.all([ + readFile(new URL('index.vue', root), 'utf8'), + readFile(new URL('detail.vue', root), 'utf8'), + readFile(new URL('CustomerFilters.vue', root), 'utf8'), + readFile(new URL('CustomerAttachments.vue', root), 'utf8'), + readFile(new URL('CustomerFields.vue', root), 'utf8'), + readFile(new URL('customer.scss', root), 'utf8') +]) + +for (const component of [ + 'MpBusinessHeader', + 'MpStatusTabs', + 'MpThreeColumnFilters', + 'MpExpenseCard' +]) { + assert.match(list, new RegExp(`<${component}\\b`), `客户列表应使用 ${component}`) +} + +const headerAt = list.indexOf('= 0 && headerAt < tabsAt && tabsAt < filtersAt && filtersAt < cardAt) +assert.doesNotMatch( + list, + /class="mp-customer-actions"[\s\S]*+ 新增[\s\S]*筛选[\s\S]*显示[\s\S]*刷新/ +) +assert.match(list, /class="mp-wv-speed-dial"/) +assert.match(list, /class="mp-customer-batch-bar"/) +assert.match(list, /requestSnapshot/) +assert.match(list, /onKeywordUpdate/) +assert.match(list, /customerTypeIn/) +assert.match(list, /levelIn/) +assert.match(list, /:show-actions="!selectMode"/, '选择模式必须隐藏卡片动作栏') +assert.match(list, /rows\.value = \[\]/, 'reset 请求必须先清空旧列表') +assert.match(list, /total\.value = 0/, 'reset 请求必须先清空旧总数') +assert.match(list, /selected\.value = \[\]/, 'reset 请求必须先清空旧选择') +assert.match(list, /customerCardTime\(row\)/, '客户卡时间必须支持 lastTime/createTime 回退') + +assert.match(detail, /关键词业务视图 0"/, '上传期间必须禁止再次选择文件') +assert.match(attachments, /if \(uploading\.value > 0\)/, '上传处理器必须拒绝并发选择') +assert.match( + attachments, + /existing\.push\(url\)[\s\S]*emit\('update:modelValue', existing\.join\(','\)\)/, + '每个文件成功后必须立即保留并提交引用' +) +assert.match(attachments, /ElMessage\.error\(/, '后续文件上传失败必须给出反馈') +assert.doesNotMatch(fields, / pageErrors.push(error.message)) +const calls = [] +const customers = [ + { + id: '90071992547409931', + customerNo: 'KH001', + customerName: '山峡化工测试客户', + shortName: '山峡', + customerType: 'company', + level: 'normal', + status: 'normal', + dealStatus: 'undeal', + mobile: '13800138000', + source: 'phone', + parkArea: '园区A', + province: '湖北', + city: '宜昌', + district: '西陵', + ownerUserId: 'user-1', + ownerUserName: '测试用户', + createBy: 'user-1', + createTime: '2026-10-17 09:00:00', + businessLicenseImages: '', + businessPermitImages: '', + otherCertImages: '' + } +] +const page2Customer = { + ...customers[0], + id: 'customer-page-2', + customerNo: 'KH-P2', + customerName: '分页客户' +} +const secondCustomer = { + ...customers[0], + id: 'customer-fast-b', + customerNo: 'KH-B', + customerName: '快速客户B', + shortName: '客户B' +} +let contacts = [ + { + id: 'contact-1', + customerId: customers[0].id, + contactName: '张经理', + mobile: '13800138001', + role: 'decision', + status: 'active', + isPrimary: 0, + isKey: 1, + createBy: 'user-1' + } +] +let follows = [] +let invoices = [] +const opportunity = { + id: 'opp-1', + opportunityName: '测试商机', + customerId: customers[0].id, + customerName: customers[0].customerName, + amount: 123, + status: 'following', + stage: 'initial', + stagePercent: 10, + winRate: 30, + ownerUserId: 'user-1', + createBy: 'user-1' +} +let opportunityFollows = [] +let failInvoice = false +let failList = false +let failNextPage2 = false +let delayNextPage2 = false +let delayedDetailId = '' +let forbiddenMode = '' +let uploadGate = null +let signalUploadStarted = null +let uploadQueue = [] +const dict = Object.fromEntries( + Object.entries({ + crm_customer_type: ['company', '企业'], + crm_customer_level: ['normal', '普通'], + crm_clue_source: ['phone', '电话'], + crm_customer_park: ['园区A', '园区A'], + crm_follow_type: ['phone', '电话'], + crm_customer_status: ['normal', '正常'], + crm_deal_status: ['undeal', '未成交'], + crm_contact_role: ['decision', '决策人'] + }).map(([key, [value, label]]) => [key, [{ value, label, tagType: 'success' }]]) +) +dict.crm_customer_type.push({ value: 'person', label: '个人', tagType: 'info' }) +dict.crm_customer_level.push({ value: 'key', label: '重点', tagType: 'warning' }) +dict.crm_opportunity_stage = [ + { value: 'initial', label: '初步' }, + { value: 'quote', label: '报价' } +] +await context.addInitScript(() => { + window.wx = { + miniProgram: { + navigateBack() {}, + reLaunch() {}, + getEnv(cb) { + cb({ miniprogram: true }) + } + } + } +}) +await context.route('**/api/**', async (route) => { + const request = route.request() + if (!new URL(request.url()).pathname.startsWith('/api/')) return route.continue() + const path = new URL(request.url()).pathname.replace(/^\/api/, '') + let body = {} + try { + body = request.postDataJSON() || {} + } catch { + body = {} + } + calls.push({ path, body }) + let data = {} + let code = 200 + let msg = 'ok' + if (path === '/web/auth/mp-webview-exchange') { + const ticket = String(body.ticket || '') + forbiddenMode = ticket.includes('forbidden-list') + ? 'list' + : ticket.includes('forbidden-detail') + ? 'detail' + : '' + data = { + token: 'fixture-token', + refreshToken: 'fixture-refresh', + userInfo: { + id: 'user-1', + userId: 'user-1', + userName: '测试用户', + role: 'admin', + roles: ['admin'] + } + } + } else if (path === '/web/admin/dict-data/all') data = dict + else if (path === '/web/auth/current-user') + data = { id: 'user-1', userId: 'user-1', userName: '测试用户' } + else if (path === '/web/auth/menu-codes') data = [] + else if (path === '/web/admin/menu-favorites') data = [] + else if (path === '/web/admin/users/options') data = [{ value: 'user-1', label: '测试用户' }] + else if (/\/customer\/(list|mine|toFollow|key)$/.test(path)) { + if (forbiddenMode === 'list') { + code = 403 + msg = '无权限访问客户列表' + } else if (failList) { + code = 500 + msg = '列表测试失败' + failList = false + } else if (Number(body.page) === 2) { + if (failNextPage2) { + code = 500 + msg = '分页测试失败' + failNextPage2 = false + } else { + if (delayNextPage2) { + delayNextPage2 = false + await new Promise((resolve) => setTimeout(resolve, 500)) + } + data = { list: [page2Customer], total: customers.length + 1 } + } + } else data = { list: customers, total: customers.length + 1 } + } else if (path === '/web/crm/customer/detail') { + if (forbiddenMode === 'detail') { + code = 403 + msg = '无权限访问客户详情' + } else { + if (body.id === delayedDetailId) await new Promise((resolve) => setTimeout(resolve, 500)) + data = [...customers, secondCustomer].find((c) => c.id === body.id) + } + } else if (path === '/web/crm/customer/checkDuplicate') + data = { isDuplicate: false, duplicates: [] } + else if (path === '/web/crm/customer/options') data = customers + else if (path === '/web/crm/customer/column-facet-values') + data = { + list: body.keyword + ? [{ value: 'KH-REMOTE-201', label: '第201号外值', count: 1 }] + : [{ value: 'KH001', label: 'KH001', count: 1 }] + } + else if (path === '/web/crm/customer/add') { + data = { ...body, id: 'created-customer', customerNo: 'KH002', createBy: 'user-1' } + customers.push(data) + } else if (path === '/web/crm/customer/update') { + Object.assign( + customers.find((c) => c.id === body.id), + body + ) + data = body + } else if (path === '/web/crm/customer/delete' || path === '/web/crm/customer/intoPool') { + for (let i = customers.length - 1; i >= 0; i--) + if (body.ids.includes(customers[i].id)) customers.splice(i, 1) + } else if (path === '/web/crm/contact/byCustomer') data = contacts + else if (path === '/web/crm/contact/detail') data = contacts.find((c) => c.id === body.id) + else if (path === '/web/crm/contact/add') { + data = { ...body, id: 'contact-2', createBy: 'user-1' } + contacts.push(data) + } else if (path === '/web/crm/contact/update') { + Object.assign( + contacts.find((c) => c.id === body.id), + body + ) + data = body + } else if (path === '/web/crm/contact/setPrimary') + contacts.forEach((c) => (c.isPrimary = c.id === body.id ? 1 : 0)) + else if (path === '/web/crm/contact/delete') + contacts = contacts.filter((c) => !body.ids.includes(c.id)) + else if (path === '/web/crm/customer/follow/byCustomer') data = follows + else if (path === '/web/crm/customer/follow/add') { + data = { + ...body, + id: 'follow-1', + createBy: 'user-1', + createByName: '测试用户', + contactName: '张经理' + } + follows.push(data) + } else if (path === '/web/crm/customer/follow/delete') + follows = follows.filter((f) => !body.ids.includes(f.id)) + else if (path === '/web/crm/invoice-info/by-customer') data = invoices + else if (path === '/web/crm/invoice-info/add') { + if (failInvoice) { + code = 500 + msg = '开票测试失败' + failInvoice = false + } else { + data = { ...body, id: 'invoice-1', createBy: 'user-1' } + invoices.push(data) + } + } else if (path === '/web/crm/invoice-info/update') { + Object.assign( + invoices.find((i) => i.id === body.id), + body + ) + data = body + } else if (path === '/web/crm/invoice-info/set-default') + invoices.forEach((i) => (i.isDefault = i.id === body.id ? '1' : '0')) + else if (path === '/web/crm/invoice-info/delete') + invoices = invoices.filter((i) => i.id !== body.id) + else if (path === '/web/admin/attachment/upload') { + signalUploadStarted?.() + signalUploadStarted = null + if (uploadGate) await uploadGate + const queued = uploadQueue.shift() + if (queued?.fail) { + code = 500 + msg = queued.fail + } else { + data = queued?.data || { + id: 'file-1', + fileName: '证件.pdf', + fileUrl: '/fixtures/customer.pdf', + fileType: 'application/pdf' + } + } + } else if (path === '/web/admin/attachment/preview-url') data = { previewUrl: body.fileUrl } + else if (path === '/web/crm/opportunity/list') + data = { + list: [opportunity], + total: 1 + } + else if (path === '/web/crm/opportunity/detail') data = opportunity + else if (path === '/web/crm/opportunity/update' || path === '/web/crm/opportunity/stage') + Object.assign(opportunity, body) + else if (path === '/web/crm/opportunity/follow/list') + data = { list: opportunityFollows, total: opportunityFollows.length } + else if (path === '/web/crm/opportunity/follow/add') + opportunityFollows.push({ ...body, id: 'opp-follow-1', createBy: 'user-1' }) + else if (path === '/web/crm/opportunity/follow/update') Object.assign(opportunityFollows[0], body) + else if (path === '/web/crm/opportunity/follow/delete') opportunityFollows = [] + else if (path.includes('/opportunity/')) data = { list: [] } + else if (path === '/web/crm/contract/list') + data = { rows: [{ id: 'contract-1', contractName: '测试合同' }], total: 1 } + else if (path === '/web/monitor/operlog/list') + data = { + rows: [ + { + id: 'log-1', + title: 'CRM客户管理', + operName: '测试用户', + status: '0', + operParam: '', + operTime: '2026-10-17 10:00:00' + } + ], + total: 1 + } + else throw new Error(`未处理的客户 E2E API:${path}`) + await route.fulfill({ + contentType: 'application/json', + body: JSON.stringify({ code, msg, data }) + }) +}) +const label = (name) => page.getByLabel(name, { exact: true }).filter({ visible: true }) +const click = (name) => + page + .getByRole('button', { name, exact: true }) + .or(page.getByRole('tab', { name, exact: true })) + .filter({ visible: true }) + .click() +const waitHeading = (name) => page.getByRole('heading', { name, exact: true }).waitFor() +const closeSheet = () => + page.getByRole('button', { name: '关闭', exact: true }).filter({ visible: true }).click() +const hideDevTools = async () => { + await page.addStyleTag({ + content: + '#vue-devtools-anchor,.vue-devtools__anchor,.vue-devtools-frame{display:none!important}' + }) + assert.equal(await page.locator('#vue-devtools-anchor').filter({ visible: true }).count(), 0) +} +const assertNoOverflow = async (label) => { + const overflow = await page.evaluate(() => document.documentElement.scrollWidth > innerWidth) + assert.equal(overflow, false, `${label}不应横向溢出`) +} +const assertMinTouchTargets = async (locator, label) => { + const sizes = await locator.evaluateAll((elements) => + elements + .filter((element) => element.getClientRects().length > 0) + .map((element) => ({ + width: element.getBoundingClientRect().width, + height: element.getBoundingClientRect().height + })) + ) + assert.ok(sizes.length > 0, `${label}应存在可见触控目标`) + assert.ok( + sizes.every(({ width, height }) => width >= 44 && height >= 44), + `${label}触控目标应至少为44×44px:${JSON.stringify(sizes)}` + ) +} +const waitForMessagesToClear = () => + page.waitForFunction(() => !document.querySelector('.el-message'), undefined, { timeout: 6000 }) +try { + await page.goto(`${origin}/#/m/crm/customer?mpTicket=customer-forbidden-list`) + await page.locator('.mp-customer-error').filter({ hasText: '无权限访问客户列表' }).waitFor() + assert.equal(await page.locator('.mp-crm-expense-card').count(), 0) + assert.equal(await page.locator('.mp-wv-status-tabs').count(), 0) + assert.equal(await page.locator('.mp-wv-filter-bar--three').count(), 0) + assert.equal(await page.locator('.mp-customer-summary').count(), 0) + assert.equal(await page.locator('.mp-wv-speed-dial').count(), 0) + assert.equal(await page.locator('.mp-customer-batch-bar').count(), 0) + assert.equal(await page.locator('.mp-customer-sheet').count(), 0) + + await page.goto( + `${origin}/#/m/crm/customer/${customers[0].id}?mpTicket=customer-forbidden-detail` + ) + await page.locator('.mp-customer-error').filter({ hasText: '无权限访问客户详情' }).waitFor() + + await page.goto(`${origin}/#/m/crm/customer?mpTicket=customer-fixture`) + await hideDevTools() + await page.getByRole('button', { name: `查看客户:${customers[0].customerName}` }).waitFor() + const skeletonOrder = await page + .locator('.mp-wv-header, .mp-wv-status-tabs, .mp-wv-filter-bar--three, .mp-crm-expense-card') + .evaluateAll((nodes) => nodes.map((node) => node.className)) + assert.match(String(skeletonOrder[0]), /mp-wv-header/) + assert.match(String(skeletonOrder[1]), /mp-wv-status-tabs/) + assert.match(String(skeletonOrder[2]), /mp-wv-filter-bar--three/) + assert.match(String(skeletonOrder[3]), /mp-crm-expense-card/) + assert.equal(await page.locator('.mp-customer-actions').filter({ visible: true }).count(), 0) + assert.equal(await page.locator('.mp-wv-speed-dial').count(), 1) + assert.equal(await page.getByText('导出', { exact: true }).count(), 0) + const cardActionSizes = await page + .locator('.mp-crm-expense-card .op-actions button') + .evaluateAll((buttons) => + buttons.map((button) => ({ + width: button.getBoundingClientRect().width, + height: button.getBoundingClientRect().height + })) + ) + assert.ok(cardActionSizes.every(({ width, height }) => width >= 44 && height >= 44)) + + await assertMinTouchTargets(page.locator('.mp-wv-speed-main'), 'Speed Dial主按钮') + await click('快捷操作') + await assertMinTouchTargets(page.locator('.mp-wv-speed-item'), 'Speed Dial菜单') + await click('批量选择') + await assertMinTouchTargets(page.locator('.mp-customer-batch-bar button'), '批量操作栏') + await page.locator('.expense-card__select').first().click() + assert.equal(await page.locator('.mp-crm-expense-card .ec-bottom').count(), 0) + failList = true + await click('重点') + await page.getByText('列表测试失败', { exact: true }).first().waitFor() + assert.equal(await page.locator('.mp-crm-expense-card').count(), 0) + assert.match(await page.locator('.mp-customer-summary').innerText(), /共 0 位客户 · 已加载 0 位/) + assert.match(await page.locator('.mp-customer-batch-bar').innerText(), /已选 0 项/) + await click('重试') + await page.getByRole('button', { name: `查看客户:${customers[0].customerName}` }).waitFor() + await click('完成') + await click('全部') + + failNextPage2 = true + await click('加载更多(1/2)') + await page.getByText('分页测试失败', { exact: true }).waitFor() + await click('重试') + await page.getByRole('button', { name: '查看客户:分页客户', exact: true }).waitFor() + const page2Calls = calls.filter( + (call) => call.path.endsWith('/customer/list') && Number(call.body.page) === 2 + ) + assert.deepEqual( + page2Calls.slice(-2).map((call) => Number(call.body.page)), + [2, 2], + '分页失败后重试不得跳到第 3 页' + ) + + await page.getByLabel('搜索客户').fill('测试') + await Promise.all([ + page.waitForResponse((response) => response.url().endsWith('/customer/list')), + page.getByLabel('搜索客户').press('Enter') + ]) + await Promise.all([ + page.waitForResponse((response) => response.url().endsWith('/customer/list')), + page.getByLabel('搜索客户').fill('') + ]) + assert.equal( + calls.findLast((call) => call.path.endsWith('/customer/list')).body.keyword, + undefined + ) + + delayNextPage2 = true + await click('加载更多(1/2)') + await click('客户类型') + await click('企业') + await page.waitForTimeout(650) + assert.equal( + await page.getByRole('button', { name: '查看客户:分页客户', exact: true }).count(), + 0, + '旧筛选的第 2 页结果不得混入新筛选' + ) + await click('企业') + await click('全部类型') + for (const [name, endpoint] of [ + ['待跟进', 'toFollow'], + ['重点', 'key'], + ['全部', 'list'] + ]) { + await Promise.all([ + page.waitForResponse((r) => r.url().endsWith('/customer/' + endpoint)), + click(name) + ]) + } + await Promise.all([ + page.waitForResponse((r) => r.url().includes('/customer/mine')), + click('我的') + ]) + assert.equal(calls.findLast((c) => c.path.endsWith('/customer/mine')).body.viewMode, 'mine') + await page.getByLabel('搜索客户').fill('顶部词') + await Promise.all([ + page.waitForResponse((r) => r.url().includes('/customer/mine')), + page.getByLabel('搜索客户').press('Enter') + ]) + await page.getByRole('button', { name: /^更多/ }).click() + const filterSheet = page.locator('.mp-sheet').filter({ hasText: '更多筛选' }) + await assertMinTouchTargets( + filterSheet.locator('.mp-sheet-close, .mp-sheet-foot button'), + '更多筛选底部与关闭按钮' + ) + assert.equal(await filterSheet.getByLabel('关键词').inputValue(), '顶部词') + assert.equal(await filterSheet.getByLabel('业务视图').inputValue(), 'mine') + await filterSheet.getByLabel('关键词').fill('面板词') + await filterSheet.getByLabel('业务视图').selectOption('key') + await filterSheet.getByLabel('排序字段').selectOption('createTime') + const mobileFilter = filterSheet + .locator('details') + .filter({ has: page.locator('summary:text-is("手机号")') }) + await mobileFilter.locator('summary').click() + await mobileFilter.locator('input').fill('138') + const followCountFilter = filterSheet + .locator('details') + .filter({ has: page.locator('summary:text-is("跟进次数")') }) + await followCountFilter.locator('summary').click() + await followCountFilter.getByLabel('最小值').fill('1') + const createTimeFilter = filterSheet + .locator('details') + .filter({ has: page.locator('summary:text-is("创建时间")') }) + await createTimeFilter.locator('summary').click() + await createTimeFilter.getByLabel('起始时间').fill('2026-10-01T08:00') + const customerNoFilter = filterSheet + .locator('details') + .filter({ has: page.locator('summary:text-is("客户编号")') }) + await customerNoFilter.locator('summary').click() + await Promise.all([ + page.waitForResponse((r) => r.url().endsWith('/customer/column-facet-values')), + customerNoFilter.locator('input[type="search"]').fill('远端') + ]) + assert.equal( + calls.findLast((c) => c.path.endsWith('/customer/column-facet-values')).body.keyword, + '远端' + ) + await customerNoFilter.getByText('第201号外值', { exact: true }).waitFor() + await page.locator('summary').filter({ hasText: '客户类型' }).click() + await page.getByLabel('企业', { exact: true }).check() + await page.getByLabel('个人', { exact: true }).check() + await page.locator('summary').filter({ hasText: '客户级别' }).click() + await page.getByLabel('普通', { exact: true }).check() + await page.getByLabel('重点', { exact: true }).check() + await page.getByLabel('客户简称', { exact: true }).uncheck() + await Promise.all([ + page.waitForResponse((r) => r.url().includes('/customer/key')), + click('应用筛选') + ]) + const appliedFilterCall = calls.findLast((c) => c.path.endsWith('/customer/key')) + assert.equal(appliedFilterCall.body.keyword, '面板词') + assert.equal(appliedFilterCall.body.customerTypeIn, 'company,person') + assert.equal(appliedFilterCall.body.levelIn, 'normal,key') + assert.equal(appliedFilterCall.body.mobile, '138') + assert.equal(appliedFilterCall.body.followCountMin, '1') + assert.equal(appliedFilterCall.body.beginTime, '2026-10-01 08:00:00') + assert.equal(appliedFilterCall.body.sortField, 'createTime') + assert.equal(await page.getByLabel('搜索客户').inputValue(), '面板词') + assert.equal( + await page.getByRole('button', { name: '重点', exact: true }).getAttribute('aria-pressed'), + 'true' + ) + assert.deepEqual( + await page.locator('.mp-wv-filter-bar--three .mp-wv-filter-trig__val').allTextContents(), + ['已选2项', '已选2项'] + ) + await page.locator('.mp-wv-filter-bar--three .mp-wv-filter-trig').first().click() + await click('企业') + assert.equal( + calls.findLast((c) => c.path.endsWith('/customer/key')).body.customerTypeIn, + 'company' + ) + assert.equal( + await page.locator('.mp-wv-filter-bar--three .mp-wv-filter-trig__val').first().innerText(), + '企业' + ) + assert.equal( + await page + .locator('.mp-crm-expense-card') + .first() + .getByText('客户简称', { exact: true }) + .count(), + 0 + ) + await page.getByRole('button', { name: /^更多/ }).click() + await Promise.all([ + page.waitForResponse((r) => r.url().endsWith('/customer/list')), + filterSheet.getByRole('button', { name: '重置', exact: true }).click() + ]) + assert.equal(await page.getByLabel('搜索客户').inputValue(), '') + assert.equal( + await page.getByRole('button', { name: '全部', exact: true }).getAttribute('aria-pressed'), + 'true' + ) + assert.deepEqual( + await page.locator('.mp-wv-filter-bar--three .mp-wv-filter-trig__val').allTextContents(), + ['客户类型', '客户级别'] + ) + assert.equal( + await page + .locator('.mp-crm-expense-card') + .first() + .getByText('客户简称', { exact: true }) + .count(), + 1 + ) + await page.waitForTimeout(3200) + await page.setViewportSize({ width: 414, height: 812 }) + await hideDevTools() + await assertNoOverflow('414px 有数据列表') + await page.screenshot({ path: `${artifacts}/list-414.png`, fullPage: true }) + await page.setViewportSize({ width: 375, height: 812 }) + await assertNoOverflow('375px 有数据列表') + await page.screenshot({ path: `${artifacts}/list-375.png`, fullPage: true }) + await page.getByRole('button', { name: `查看客户:${customers[0].customerName}` }).click() + await waitHeading('客户详情') + await page.goto(`${origin}/#/m/crm/customer/${customers[0].id}`) + await waitHeading('客户详情') + await page.reload() + await waitHeading('客户详情') + customers[0].createBy = 'another-user' + await page.reload() + await waitHeading('客户详情') + assert.equal(await page.getByRole('button', { name: '删除', exact: true }).isDisabled(), true) + customers[0].createBy = 'user-1' + await page.reload() + await waitHeading('客户详情') + assert.equal(await page.getByRole('button', { name: '删除', exact: true }).isEnabled(), true) + const detailActionSizes = await page.locator('.mp-wv-fab-bar button').evaluateAll((buttons) => + buttons.map((button) => ({ + width: button.getBoundingClientRect().width, + height: button.getBoundingClientRect().height + })) + ) + assert.ok(detailActionSizes.every(({ width, height }) => width >= 44 && height >= 44)) + assert.deepEqual(await page.locator('.mp-customer-detail-tabs button').allTextContents(), [ + '资料', + '跟进记录', + '联系人', + '商机', + '合同', + '开票信息', + '操作日志' + ]) + const detailTag = page.locator('.mp-customer-webview-tag').first() + await detailTag.waitFor() + assert.notEqual( + await detailTag.evaluate((tag) => getComputedStyle(tag).color), + 'rgb(255, 255, 255)' + ) + await page.setViewportSize({ width: 414, height: 812 }) + await hideDevTools() + await assertNoOverflow('414px 客户详情') + await page.screenshot({ path: `${artifacts}/detail-414.png`, fullPage: true }) + await page.setViewportSize({ width: 375, height: 812 }) + + await page.goto(`${origin}/#/m/crm/customer/${secondCustomer.id}?tab=invoice`) + await page.getByText('暂无开票信息', { exact: true }).waitFor() + assert.equal( + calls.findLast((call) => call.path.endsWith('/customer/detail')).body.id, + secondCustomer.id + ) + assert.ok( + await page + .locator('.mp-customer-detail-tabs button') + .filter({ hasText: '开票信息' }) + .evaluate((button) => button.classList.contains('active')) + ) + delayedDetailId = customers[0].id + const slowARequest = page.waitForRequest((request) => { + if (!request.url().endsWith('/web/crm/customer/detail')) return false + try { + return request.postDataJSON()?.id === customers[0].id + } catch { + return false + } + }) + await page.evaluate((id) => { + location.hash = `#/m/crm/customer/${id}?tab=follow` + }, customers[0].id) + await slowARequest + await page.evaluate((id) => { + location.hash = `#/m/crm/customer/${id}?tab=contact` + }, secondCustomer.id) + await page.getByRole('heading', { name: '张经理', exact: true }).waitFor() + await page.waitForTimeout(650) + assert.ok( + await page + .locator('.mp-customer-detail-tabs button') + .filter({ hasText: '联系人' }) + .evaluate((button) => button.classList.contains('active')) + ) + await click('资料') + await page.getByRole('heading', { name: secondCustomer.customerName, exact: true }).waitFor() + assert.equal(await page.getByRole('heading', { name: customers[0].customerName }).count(), 0) + delayedDetailId = '' + await page.evaluate((id) => { + location.hash = `#/m/crm/customer/${id}?tab=follow` + }, customers[0].id) + await page.getByRole('button', { name: '+ 添加跟进', exact: true }).waitFor() + assert.ok( + await page + .locator('.mp-customer-detail-tabs button') + .filter({ hasText: '跟进记录' }) + .evaluate((button) => button.classList.contains('active')) + ) + await click('跟进记录') + await click('+ 添加跟进') + await label('关联联系人').selectOption('contact-1') + await label('跟进内容 *').fill('移动端跟进测试') + await label('下次联系时间').fill('2026-10-18T10:00') + await page + .locator('.mp-sheet') + .filter({ hasText: '添加跟进记录' }) + .locator('input[type=file]') + .setInputFiles({ + name: '跟进附件.pdf', + mimeType: 'application/pdf', + buffer: Buffer.from('%PDF-1.4\nfollow-fixture') + }) + await page.getByText('customer.pdf', { exact: true }).filter({ visible: true }).waitFor() + await click('保存跟进') + await page.getByText('移动端跟进测试', { exact: true }).waitFor() + assert.equal(follows[0].customerId, '90071992547409931') + assert.equal(follows[0].nextTime, '2026-10-18 10:00:00') + assert.equal(follows[0].attachment, '/fixtures/customer.pdf') + const followAttachment = page + .locator('.mp-wv-card') + .filter({ hasText: '移动端跟进测试' }) + .locator('.att-item') + .first() + const followAttachmentBox = await followAttachment.boundingBox() + assert.equal(followAttachmentBox?.width, 72) + assert.equal(followAttachmentBox?.height, 72) + await followAttachment.locator('.att-preview').click() + await page.getByRole('dialog').getByText('customer.pdf', { exact: true }).waitFor() + await page.keyboard.press('Escape') + await click('联系人') + await page.getByRole('heading', { name: '张经理', exact: true }).waitFor() + await click('+ 新增联系人') + await label('联系人姓名 *').fill('李经理') + await label('手机号 *').fill('13900139000') + await click('保存联系人') + await page.getByRole('heading', { name: '李经理', exact: true }).waitFor() + assert.equal(contacts[1].customerId, '90071992547409931') + await click('开票信息') + await click('+ 新增开票信息') + await label('单位名称(章) *').fill('测试开票单位') + await label('税号').fill('123456789') + await click('保存开票信息') + await page.getByText('测试开票单位', { exact: true }).waitFor() + await click('设为默认') + await page.getByText('默认', { exact: true }).filter({ visible: true }).waitFor() + assert.equal(invoices[0].isDefault, '1') + await click('操作日志') + await click('CRM客户管理') + await page.getByText('', { exact: true }).waitFor() + assert.equal(await page.locator('img[src="x"]').count(), 0) + await closeSheet() + assert.equal(await page.locator('.mp-sheet-mask').filter({ visible: true }).count(), 0) + await click('商机') + await click('测试商机') + await page.getByText('123', { exact: true }).waitFor() + await click('修改商机') + await label('商机名称 *').fill('移动修改商机') + await click('保存商机操作') + await page.getByText('移动修改商机', { exact: true }).filter({ visible: true }).first().waitFor() + assert.equal(opportunity.customerId, '90071992547409931') + await click('推进阶段') + await label('商机阶段 *').selectOption('quote') + await label('变更原因 *').fill('已报价') + await click('保存商机操作') + await page.getByRole('button', { name: '推进阶段', exact: true }).waitFor() + assert.equal(opportunity.stagePercent, 60) + await click('添加商机跟进') + await label('商机跟进内容 *').fill('商机跟进测试') + await click('保存商机操作') + await page.getByText('商机跟进测试', { exact: true }).waitFor() + await click('编辑商机跟进') + await label('商机跟进内容 *').fill('商机跟进已编辑') + await click('保存商机操作') + await page.getByText('商机跟进已编辑', { exact: true }).waitFor() + await click('删除商机跟进') + await page.getByRole('button', { name: /^(确定|确认)$/ }).click() + await page.getByText('暂无跟进记录', { exact: true }).waitFor() + await closeSheet() + await click('合同') + await page.getByText('测试合同', { exact: true }).waitFor() + await click('资料') + await page.screenshot({ path: `${artifacts}/detail-375.png`, fullPage: true }) + await click('编辑') + await waitHeading('编辑客户') + await label('客户简称 *').fill('移动编辑') + const certificateInput = page.locator('input[type=file]').first() + let releaseUploadGate + uploadGate = new Promise((resolve) => { + releaseUploadGate = resolve + }) + const uploadStarted = new Promise((resolve) => { + signalUploadStarted = resolve + }) + const uploadCallsBeforeConcurrent = calls.filter( + (call) => call.path === '/web/admin/attachment/upload' + ).length + await certificateInput.setInputFiles({ + name: '并发首个.pdf', + mimeType: 'application/pdf', + buffer: Buffer.from('%PDF-1.4\nconcurrent-first') + }) + await uploadStarted + await certificateInput.evaluate((input) => { + const transfer = new DataTransfer() + transfer.items.add(new File(['second'], '并发第二个.pdf', { type: 'application/pdf' })) + Object.defineProperty(input, 'files', { value: transfer.files, configurable: true }) + input.dispatchEvent(new Event('change', { bubbles: true })) + }) + await page.waitForTimeout(100) + assert.equal( + calls.filter((call) => call.path === '/web/admin/attachment/upload').length, + uploadCallsBeforeConcurrent + 1, + '上传期间再次选择不得启动第二个上传请求' + ) + releaseUploadGate() + uploadGate = null + await page.getByText('customer.pdf', { exact: true }).waitFor() + await page.waitForFunction(() => { + const input = document.querySelector('input[type=file]') + return !!input && !input.disabled + }) + uploadQueue = [ + { + data: { + id: 'partial-ok', + fileName: '部分成功.pdf', + fileUrl: '/fixtures/partial-ok.pdf', + fileType: 'application/pdf' + } + } + ] + const uploadCallsBeforePartialFailure = calls.filter( + (call) => call.path === '/web/admin/attachment/upload' + ).length + await certificateInput.setInputFiles({ + name: '部分成功.pdf', + mimeType: 'application/pdf', + buffer: Buffer.from('%PDF-1.4\npartial-ok') + }) + await page.getByText('partial-ok.pdf', { exact: true }).waitFor() + await page.waitForFunction(() => { + const input = document.querySelector('input[type=file]') + return !!input && !input.disabled + }) + uploadQueue = [{ fail: '后续上传失败' }] + await certificateInput.setInputFiles({ + name: '后续失败.pdf', + mimeType: 'application/pdf', + buffer: Buffer.from('%PDF-1.4\npartial-fail') + }) + for ( + let attempt = 0; + attempt < 100 && + calls.filter((call) => call.path === '/web/admin/attachment/upload').length < + uploadCallsBeforePartialFailure + 2; + attempt += 1 + ) + await page.waitForTimeout(20) + await page.getByText('后续上传失败', { exact: true }).last().waitFor() + assert.equal(uploadQueue.length, 0, '后续失败请求应被处理') + assert.equal( + calls.filter((call) => call.path === '/web/admin/attachment/upload').length, + uploadCallsBeforePartialFailure + 2 + ) + assert.ok(await page.getByText('customer.pdf', { exact: true }).isVisible()) + await assertMinTouchTargets( + page.locator( + '.mp-customer-attachments .att-preview, .mp-customer-attachments .att-remove, .mp-customer-attachments .att-add' + ), + '附件预览、删除与添加' + ) + await waitForMessagesToClear() + await page.setViewportSize({ width: 414, height: 812 }) + await hideDevTools() + await assertNoOverflow('414px 附件表单') + await page.screenshot({ path: `${artifacts}/form-attachments-414.png`, fullPage: true }) + await page.setViewportSize({ width: 375, height: 812 }) + await click('保存客户') + await waitHeading('客户详情') + assert.equal(customers[0].shortName, '移动编辑') + assert.match(customers[0].businessLicenseImages, /\/fixtures\/customer\.pdf/) + assert.match(customers[0].businessLicenseImages, /\/fixtures\/partial-ok\.pdf/) + await page.getByRole('button', { name: '返回客户列表' }).click() + await click('快捷操作') + await click('新增客户') + await waitHeading('新增客户') + for (const [name, value] of [ + ['客户名称 *', '新客户'], + ['客户简称 *', '新'], + ['省份 *', '湖北'], + ['城市 *', '宜昌'], + ['区县 *', '西陵'], + ['所在园区 *', '园区A'] + ]) + await label(name).fill(value) + await label('客户类型 *').selectOption('company') + await label('客户来源 *').selectOption('phone') + await label('单位名称(章)').fill('新增开票单位') + failInvoice = true + await click('保存客户') + await page.getByText('客户已创建。请补存开票资料,无需再次新增客户。').waitFor() + await click('补存开票资料') + await waitHeading('客户详情') + assert.equal(calls.filter((c) => c.path === '/web/crm/customer/add').length, 1) + await page.getByRole('button', { name: '返回客户列表' }).click() + await page.getByRole('button', { name: '查看客户:新客户', exact: true }).waitFor() + await click('快捷操作') + await click('批量选择') + await page + .locator('.mp-crm-expense-card') + .filter({ hasText: '新客户' }) + .locator('.expense-card__select') + .click() + await click('放入公海') + await label('放入原因 *').fill('测试批量放入') + await click('确认放入') + await page.getByRole('button', { name: /^(确定|确认)$/ }).click() + await page.getByRole('button', { name: '查看客户:新客户', exact: true }).waitFor({ + state: 'hidden' + }) + assert.deepEqual(calls.findLast((c) => c.path.endsWith('/customer/intoPool')).body.ids, [ + 'created-customer' + ]) + await click('快捷操作') + await click('批量选择') + await page.locator('.expense-card__select').first().click() + await click('删除') + await page.getByRole('button', { name: /^(确定|确认)$/ }).click() + await page.getByText('暂无客户,可调整筛选后重试').waitFor() + assert.deepEqual(calls.findLast((c) => c.path.endsWith('/customer/delete')).body.ids, [ + '90071992547409931' + ]) + failList = true + await page.getByLabel('搜索客户').fill('失败') + await page.getByLabel('搜索客户').press('Enter') + await page.getByText('列表测试失败', { exact: true }).first().waitFor() + await click('重试') + await page.getByText('暂无客户,可调整筛选后重试').waitFor() + await waitForMessagesToClear() + for (const width of [375, 414]) { + await page.setViewportSize({ width, height: 812 }) + await assertNoOverflow(`${width}px 空列表`) + assert.equal(await page.locator('.mp-sheet-mask').filter({ visible: true }).count(), 0) + assert.equal(await page.locator('.mp-wv-speed-mask.open').count(), 0) + if (width === 414) + await page.screenshot({ path: `${artifacts}/list-empty-414.png`, fullPage: true }) + } + assert.deepEqual(pageErrors, []) + console.log( + JSON.stringify({ + result: 'PASS', + assertions: + '四视图、快捷/高级筛选与显示字段、搜索清空、分页失败回滚与乱序隔离、卡片动作、直达详情刷新、创建人权限、客户跟进/联系人/商机/合同/开票/日志、72px附件上传预览、客户编辑与新增失败重试、批量公海/删除、44px触达、375/414无溢出遮罩', + apiCalls: calls.length, + screenshots: artifacts + }) + ) +} catch (error) { + await page.screenshot({ path: `${artifacts}/failure.png`, fullPage: true }) + console.error(await page.locator('body').innerText()) + console.error('Page errors:', pageErrors) + console.error( + 'API calls:', + calls.map((c) => c.path) + ) + throw error +} finally { + await context.close() + await browser.close() +} diff --git a/web-admin/scripts/test-mp-crm-primitives.mjs b/web-admin/scripts/test-mp-crm-primitives.mjs new file mode 100644 index 000000000..d11c6fc39 --- /dev/null +++ b/web-admin/scripts/test-mp-crm-primitives.mjs @@ -0,0 +1,221 @@ +import assert from 'node:assert/strict' +import { mkdir } from 'node:fs/promises' +import { chromium } from 'playwright' + +const origin = process.env.MP_CRM_PRIMITIVES_ORIGIN || 'http://localhost:3006' +const artifacts = '/tmp/shanxia-mp-crm-primitives' +await mkdir(artifacts, { recursive: true }) + +const browser = await chromium.launch({ headless: true, channel: 'chrome' }) +const context = await browser.newContext({ + viewport: { width: 375, height: 812 }, + isMobile: true, + deviceScaleFactor: 1 +}) +const page = await context.newPage() +const pageErrors = [] +page.on('pageerror', (error) => pageErrors.push(error.message)) + +try { + await page.goto(origin, { waitUntil: 'domcontentloaded' }) + await page.evaluate(async () => { + const [ + { createApp, h, ref }, + { default: Header }, + { default: Tabs }, + { default: Filters }, + { default: Card }, + { default: Attachments }, + { default: Timeline } + ] = await Promise.all([ + import('/node_modules/.vite/deps/vue.js'), + import('/src/components/mp/MpBusinessHeader.vue'), + import('/src/components/mp/MpStatusTabs.vue'), + import('/src/components/mp/MpThreeColumnFilters.vue'), + import('/src/components/mp/MpExpenseCard.vue'), + import('/src/components/mp/MpAttachmentGrid.vue'), + import('/src/components/mp/MpApprovalTimeline.vue'), + import('/src/styles/mp-webview.scss') + ]) + + document.body.innerHTML = '
' + document.body.style.margin = '0' + window.__primitiveEvents = [] + + createApp({ + setup() { + const keyword = ref('') + const status = ref('all') + const quickFilters = ref([ + { + key: 'owner', + label: '负责人', + value: 'all', + options: [ + { label: '全部负责人', value: 'all' }, + { label: '测试用户', value: 'user-1' } + ] + }, + { + key: 'date', + label: '创建时间', + value: 'all', + options: [ + { label: '全部时间', value: 'all' }, + { label: '本月', value: 'month' } + ] + } + ]) + const event = (name, payload) => window.__primitiveEvents.push({ name, payload }) + return () => + h( + 'main', + { + class: 'primitive-page', + style: { + boxSizing: 'border-box', + width: '100%', + padding: '0 10px 24px', + overflowX: 'clip' + } + }, + [ + h(Header, { + title: '报价管理', + searchable: true, + keyword: keyword.value, + searchPlaceholder: '搜索报价单号或客户', + 'onUpdate:keyword': (value) => (keyword.value = value), + onSearch: () => event('search', keyword.value), + onBack: () => event('back') + }), + h(Tabs, { + modelValue: status.value, + tabs: [ + { label: '全部', value: 'all', count: 2 }, + { label: '草稿', value: 'draft', count: 1 } + ], + 'onUpdate:modelValue': (value) => (status.value = value), + onChange: (value) => event('status', value) + }), + h(Filters, { + quickFilters: quickFilters.value, + moreActive: true, + onSelect: (payload) => event('filter', payload), + onMore: () => event('more') + }), + h( + Card, + { + title: 'BJ20261017001', + status: '审批中', + statusTone: 'warning', + amount: '¥ 12,680.00', + amountLabel: '报价金额', + time: '2026-10-17 10:30', + onOpen: () => event('open') + }, + { + emphasis: () => h('span', '山峡化工测试客户'), + kv: () => [h('div', '有效期:30 天'), h('div', '负责人:测试用户')], + actions: () => h('button', { type: 'button' }, '编辑') + } + ), + h(Attachments, { + items: [{ id: '1', url: '/fixture.pdf', name: '报价附件.pdf' }], + editable: true, + onAdd: () => event('attachment-add') + }), + h(Timeline, { + items: [ + { + id: '1', + name: '张审批', + status: '已通过', + tone: 'success', + opinion: '同意', + time: '2026-10-17 11:00' + } + ] + }), + h('section', { class: 'legacy-filter-smoke', 'aria-label': '历史两栏筛选冒烟' }, [ + h('div', { class: 'mp-wv-filter-bar' }, [ + h('button', { class: 'mp-wv-filter-trig', type: 'button' }, '历史筛选一'), + h('button', { class: 'mp-wv-filter-trig', type: 'button' }, '历史筛选二') + ]) + ]) + ] + ) + } + }).mount('#primitive-fixture') + }) + + await page.locator('.primitive-page').waitFor() + const searchBox = page.locator('.mp-wv-search') + assert.equal(await searchBox.getAttribute('aria-label'), '搜索') + assert.ok((await searchBox.boundingBox()).height >= 44, '搜索框触达高度不足 44px') + await searchBox.fill('测试报价') + await searchBox.press('Enter') + + await page.locator('.mp-wv-status-tabs .filter-tag').nth(1).click() + assert.equal( + await page.locator('.mp-wv-status-tabs .filter-tag').nth(1).getAttribute('aria-pressed'), + 'true' + ) + + const firstFilter = page.locator('.mp-wv-filter-trig').first() + await firstFilter.click() + const option = page.locator('.mp-wv-filter-panel .mp-wv-filter-opt').nth(1) + await option.waitFor() + const optionIsTopmost = await option.evaluate((element) => { + const box = element.getBoundingClientRect() + const topmost = document.elementFromPoint(box.left + box.width / 2, box.top + box.height / 2) + return topmost === element || element.contains(topmost) + }) + assert.equal(optionIsTopmost, true, '筛选遮罩覆盖了下拉选项') + assert.ok((await option.boundingBox()).height >= 44, '筛选选项触达高度不足 44px') + await option.click() + assert.equal( + await page.locator('.mp-wv-filter-panel').getAttribute('class'), + 'mp-wv-filter-panel' + ) + + await firstFilter.click() + await page.locator('.mp-wv-filter-mask.open').waitFor() + await page.mouse.click(5, 760) + assert.equal(await firstFilter.getAttribute('aria-expanded'), 'false') + + const cardOpen = page.locator('.mp-crm-expense-card .expense-card__open') + await cardOpen.focus() + await cardOpen.press('Enter') + await cardOpen.press('Space') + + const eventNames = await page.evaluate(() => window.__primitiveEvents.map((item) => item.name)) + assert.deepEqual(eventNames.slice(0, 5), ['search', 'status', 'filter', 'open', 'open']) + + const legacyColumns = await page + .locator('.legacy-filter-smoke .mp-wv-filter-bar') + .evaluate((element) => getComputedStyle(element).gridTemplateColumns.split(' ').length) + assert.equal(legacyColumns, 2, '历史筛选栏不应被改成三列') + + const attachmentBox = await page.locator('.mp-crm-att-grid .att-item').first().boundingBox() + assert.equal(attachmentBox.width, 72) + assert.equal(attachmentBox.height, 72) + + await page.evaluate(() => document.activeElement?.blur()) + const viewportGeometry = await page.evaluate(() => ({ + clientWidth: document.documentElement.clientWidth, + scrollWidth: document.documentElement.scrollWidth + })) + assert.equal(viewportGeometry.clientWidth, 375) + assert.ok( + viewportGeometry.scrollWidth <= viewportGeometry.clientWidth, + `公共原语出现横向溢出:${JSON.stringify(viewportGeometry)}` + ) + + await page.screenshot({ path: `${artifacts}/primitives-375.png`, fullPage: true }) + assert.deepEqual(pageErrors, [], `页面异常:${pageErrors.join(';')}`) + console.log('CRM 公共原语浏览器交互回归通过:搜索、Tab、筛选、键盘开卡、附件与历史两栏冒烟') +} finally { + await browser.close() +} diff --git a/web-admin/scripts/test-mp-crm-product-dom.mjs b/web-admin/scripts/test-mp-crm-product-dom.mjs new file mode 100644 index 000000000..2b4dd87b7 --- /dev/null +++ b/web-admin/scripts/test-mp-crm-product-dom.mjs @@ -0,0 +1,76 @@ +import assert from 'node:assert/strict' +import { readFile } from 'node:fs/promises' + +const root = new URL('../src/views/m/crm/product/', import.meta.url) +const list = await readFile(new URL('index.vue', root), 'utf8') +const detail = await readFile(new URL('detail.vue', root), 'utf8') +const form = await readFile(new URL('form.vue', root), 'utf8') +const formDialog = await readFile( + new URL('../src/components/business/product-form-dialog/index.vue', import.meta.url), + 'utf8' +) + +const order = [' list.indexOf(token) +) +assert.ok( + order.every((index) => index >= 0), + '产品列表必须使用四个共享展示原语' +) +assert.deepEqual( + [...order].sort((a, b) => a - b), + order, + '列表必须依次为搜索、Tab、三栏筛选、卡片' +) +assert.match(list, /