提交
This commit is contained in:
1 parent
5b3edb1700
commit
74e5a0f0cf
30 files changed
+9036
-7974
No files matched your search
+2
-1
@@ -12,7 +12,8 @@ ARG PIP_TRUSTED_HOST=mirrors.aliyun.com
|
||||
|
||||
COPY requirements.txt .
|
||||
|
||||
RUN pip install --upgrade pip setuptools wheel \
|
||||
RUN --mount=type=cache,id=zkxw-pip,target=/root/.cache/pip \
|
||||
pip install --upgrade pip setuptools wheel \
|
||||
--default-timeout=300 --retries 10 \
|
||||
-i "${PIP_INDEX_URL}" --trusted-host "${PIP_TRUSTED_HOST}" \
|
||||
&& pip install --default-timeout=300 --retries 10 \
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
22137
|
||||
@@ -395,6 +395,107 @@ def _leaf_node_ids_for_path_prefix(
|
||||
return result
|
||||
|
||||
|
||||
def _build_node_path_cache(
|
||||
facility_by_id: Dict[str, BizStorageFacility],
|
||||
) -> Dict[str, str]:
|
||||
return {
|
||||
node_id: build_node_code_path(node_id, facility_by_id)
|
||||
for node_id in facility_by_id
|
||||
}
|
||||
|
||||
|
||||
def _exact_node_ids_for_path(
|
||||
path_cache: Dict[str, str],
|
||||
path: str,
|
||||
) -> List[str]:
|
||||
target = (path or "").strip().lower()
|
||||
if not target:
|
||||
return []
|
||||
return [
|
||||
node_id
|
||||
for node_id, node_path in path_cache.items()
|
||||
if (node_path or "").strip().lower() == target
|
||||
]
|
||||
|
||||
|
||||
def _collect_slot_host_node_ids(
|
||||
path_cache: Dict[str, str],
|
||||
facility_by_id: Dict[str, BizStorageFacility],
|
||||
path: str,
|
||||
) -> List[str]:
|
||||
"""储物格只挂在叶子节点;路径命中非叶子(如 1-1 架子)时展开其下全部叶子层。"""
|
||||
target = (path or "").strip().lower()
|
||||
if not target:
|
||||
return []
|
||||
|
||||
anchor_ids = _exact_node_ids_for_path(path_cache, path)
|
||||
if not anchor_ids:
|
||||
return []
|
||||
|
||||
host_ids: List[str] = []
|
||||
seen: set[str] = set()
|
||||
child_prefix = f"{target}-"
|
||||
|
||||
for anchor_id in anchor_ids:
|
||||
anchor = facility_by_id.get(anchor_id)
|
||||
if anchor and int(getattr(anchor, "is_leaf", 0) or 0) == 1:
|
||||
if anchor_id not in seen:
|
||||
seen.add(anchor_id)
|
||||
host_ids.append(anchor_id)
|
||||
continue
|
||||
|
||||
for node_id, node_path in path_cache.items():
|
||||
if node_id in seen:
|
||||
continue
|
||||
node = facility_by_id.get(node_id)
|
||||
if not node or int(getattr(node, "is_leaf", 0) or 0) != 1:
|
||||
continue
|
||||
np = (node_path or "").strip().lower()
|
||||
if np.startswith(child_prefix):
|
||||
seen.add(node_id)
|
||||
host_ids.append(node_id)
|
||||
|
||||
return host_ids
|
||||
|
||||
|
||||
def _resolve_path_keyword(
|
||||
path_cache: Dict[str, str],
|
||||
keyword: str,
|
||||
) -> tuple[Optional[str], Optional[str]]:
|
||||
"""
|
||||
解析路径型储物格编号关键词。
|
||||
- '1-1-2-' -> ('1-1-2', None) 整盒
|
||||
- '1-1-2-1' -> ('1-1-2', '1') 精确格位
|
||||
- '1-1-2' -> ('1-1-2', None) 若存在该节点路径
|
||||
"""
|
||||
kw = (keyword or "").strip()
|
||||
if not kw or "-" not in kw:
|
||||
return None, None
|
||||
|
||||
if kw.endswith("-"):
|
||||
path = kw.rstrip("-").strip()
|
||||
if path and _exact_node_ids_for_path(path_cache, path):
|
||||
return path, None
|
||||
return None, None
|
||||
|
||||
known_paths = {
|
||||
(path or "").strip().lower()
|
||||
for path in path_cache.values()
|
||||
if (path or "").strip()
|
||||
}
|
||||
parts = kw.split("-")
|
||||
for i in range(len(parts), 0, -1):
|
||||
candidate = "-".join(parts[:i]).strip()
|
||||
if not candidate:
|
||||
continue
|
||||
if candidate.lower() not in known_paths:
|
||||
continue
|
||||
slot_part = "-".join(parts[i:]).strip() if i < len(parts) else ""
|
||||
return candidate, slot_part or None
|
||||
|
||||
return None, None
|
||||
|
||||
|
||||
def _build_slot_keyword_sql_filters(
|
||||
db: Session,
|
||||
tenant_no: str,
|
||||
@@ -412,12 +513,20 @@ def _build_slot_keyword_sql_filters(
|
||||
if matching_node_ids:
|
||||
filters.append(BizStorageFacilitySlot.facility_node_id.in_(list(matching_node_ids)))
|
||||
|
||||
if "-" in kw:
|
||||
prefix, slot_part = kw.rsplit("-", 1)
|
||||
path_cache = _build_node_path_cache(facility_by_id)
|
||||
path_prefix, slot_part = _resolve_path_keyword(path_cache, kw)
|
||||
if path_prefix:
|
||||
host_nodes = _collect_slot_host_node_ids(path_cache, facility_by_id, path_prefix)
|
||||
if host_nodes:
|
||||
filters.append(BizStorageFacilitySlot.facility_node_id.in_(host_nodes))
|
||||
if slot_part:
|
||||
filters.append(BizStorageFacilitySlot.slot_code.like(f"{slot_part}%"))
|
||||
elif "-" in kw:
|
||||
prefix, loose_slot_part = kw.rsplit("-", 1)
|
||||
prefix = prefix.strip()
|
||||
slot_part = slot_part.strip()
|
||||
if slot_part:
|
||||
filters.append(BizStorageFacilitySlot.slot_code.like(f"%{slot_part}%"))
|
||||
loose_slot_part = loose_slot_part.strip()
|
||||
if loose_slot_part:
|
||||
filters.append(BizStorageFacilitySlot.slot_code.like(f"%{loose_slot_part}%"))
|
||||
if prefix:
|
||||
path_node_ids = _leaf_node_ids_for_path_prefix(facility_by_id, prefix)
|
||||
if path_node_ids:
|
||||
@@ -471,9 +580,7 @@ def _search_slot_select_matched_ids(
|
||||
return []
|
||||
|
||||
facility_by_id = load_facility_map(db, tenant_no)
|
||||
path_cache = {
|
||||
node_id: build_node_code_path(node_id, facility_by_id) for node_id in facility_by_id
|
||||
}
|
||||
path_cache = _build_node_path_cache(facility_by_id)
|
||||
matching_node_ids = _facility_node_ids_matching_keyword(db, tenant_no, kw)
|
||||
|
||||
matched_ids: List[str] = []
|
||||
@@ -496,30 +603,27 @@ def _search_slot_select_matched_ids(
|
||||
BizStorageFacilitySlot.create_time.asc(),
|
||||
)
|
||||
|
||||
# 快路径:完整路径型编码 3-1-1-53 → 路径 3-1-1 + 格位 53
|
||||
if "-" in kw:
|
||||
prefix, slot_part = kw.rsplit("-", 1)
|
||||
prefix = prefix.strip()
|
||||
slot_part = slot_part.strip()
|
||||
if prefix and slot_part:
|
||||
prefix_lower = prefix.lower()
|
||||
exact_nodes = [
|
||||
node_id
|
||||
for node_id, path in path_cache.items()
|
||||
if path.lower() == prefix_lower
|
||||
]
|
||||
if exact_nodes:
|
||||
exact_rows = (
|
||||
filtered.filter(
|
||||
BizStorageFacilitySlot.facility_node_id.in_(exact_nodes),
|
||||
BizStorageFacilitySlot.slot_code.like(f"{slot_part}%"),
|
||||
)
|
||||
.order_by(*order_clause)
|
||||
.limit(max(max_results * 2, 10))
|
||||
.all()
|
||||
# 快路径:路径型编码 1-1-2- / 1-1-2 / 1-1-2-1 → 设施路径 + 可选格位前缀(非叶子展开子层)
|
||||
path_prefix, slot_part = _resolve_path_keyword(path_cache, kw)
|
||||
if path_prefix:
|
||||
host_nodes = _collect_slot_host_node_ids(path_cache, facility_by_id, path_prefix)
|
||||
if host_nodes:
|
||||
exact_q = filtered.filter(
|
||||
BizStorageFacilitySlot.facility_node_id.in_(host_nodes)
|
||||
)
|
||||
if slot_part:
|
||||
exact_q = exact_q.filter(
|
||||
BizStorageFacilitySlot.slot_code.like(f"{slot_part}%")
|
||||
)
|
||||
if collect(exact_rows):
|
||||
return matched_ids
|
||||
exact_rows = (
|
||||
exact_q.order_by(*order_clause)
|
||||
.limit(max(max_results * 2, 10))
|
||||
.all()
|
||||
)
|
||||
if collect(exact_rows):
|
||||
return matched_ids
|
||||
if matched_ids:
|
||||
return matched_ids
|
||||
|
||||
keyword_filters = _build_slot_keyword_sql_filters(
|
||||
db, tenant_no, kw, facility_by_id, matching_node_ids
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_production_reception_py", "label": "sample_production_reception.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L1"}, {"id": "crud_sample_production_reception_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L62"}, {"id": "crud_sample_production_reception_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L66"}, {"id": "crud_sample_production_reception_int_val", "label": "_int_val()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L72"}, {"id": "crud_sample_production_reception_resolve_field_profile", "label": "resolve_field_profile()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L78"}, {"id": "crud_sample_production_reception_row_to_dict", "label": "_row_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L84"}, {"id": "crud_sample_production_reception_validate_handler_user_id", "label": "_validate_handler_user_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L114"}, {"id": "crud_sample_production_reception_get_qc_reception", "label": "_get_qc_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L126"}, {"id": "crud_sample_production_reception_validate_payload", "label": "_validate_payload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L145"}, {"id": "crud_sample_production_reception_apply_payload_to_row", "label": "_apply_payload_to_row()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L164"}, {"id": "crud_sample_production_reception_get_by_reception_id", "label": "get_by_reception_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L220"}, {"id": "crud_sample_production_reception_get_map_by_reception_ids", "label": "get_map_by_reception_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L235"}, {"id": "crud_sample_production_reception_get_by_id", "label": "get_by_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L252"}, {"id": "crud_sample_production_reception_create_production_reception", "label": "create_production_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L265"}, {"id": "crud_sample_production_reception_update_production_reception", "label": "update_production_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L322"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_production_reception_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_production_reception_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_production_reception_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_production_reception_py", "target": "app_core_utils", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_production_receLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_collection_protocol_py", "label": "collection_protocol.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L1"}, {"id": "api_collection_protocol_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L29"}, {"id": "api_collection_protocol_get_current_user_id", "label": "_get_current_user_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L39"}, {"id": "api_collection_protocol_protocol_accessible", "label": "_protocol_accessible()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L46"}, {"id": "api_collection_protocol_parse_datetime_fields", "label": "_parse_datetime_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L68"}, {"id": "api_collection_protocol_ensure_customer_for_mother", "label": "_ensure_customer_for_mother()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L82"}, {"id": "api_collection_protocol_list_collection_protocols", "label": "list_collection_protocols()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L131"}, {"id": "api_collection_protocol_get_collection_protocol_detail", "label": "get_collection_protocol_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L162"}, {"id": "api_collection_protocol_protocolcreatebody", "label": "ProtocolCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L176"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_collection_protocol_protocolupdatebody", "label": "ProtocolUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L195"}, {"id": "api_collection_protocol_resolve_protocol_attachments", "label": "_resolve_protocol_attachments()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L221"}, {"id": "api_collection_protocol_persist_protocol_sub_resources", "label": "_persist_protocol_sub_resources()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L231"}, {"id": "api_collection_protocol_create_collection_protocol", "label": "create_collection_protocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L267"}, {"id": "api_collection_protocol_update_collection_protocol", "label": "update_collection_protocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L310"}, {"id": "api_collection_protocol_delete_collection_protocol", "label": "delete_collection_protocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L360"}, {"id": "api_collection_protocol_list_collection_protocol_audits", "label": "list_collection_protocol_audits()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L387"}, {"id": "api_collection_protocol_auditcreatebody", "label": "AuditCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L411"}, {"id": "api_collection_protocol_submit_collection_protocol_audit", "label": "submit_collection_protocol_audit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L419"}, {"id": "api_collection_protocol_list_payment_details", "label": "list_payment_details()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L448"}, {"id": "api_collection_protocol_batchdetailidsbody", "label": "BatchDetailIdsBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L476"}, {"id": "api_collection_protocol_paymentdetaildraftbody", "label": "PaymentDetailDraftBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_cell_product_py", "label": "cell_product.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L1"}, {"id": "crud_cell_product_apply_cell_product_status_change", "label": "_apply_cell_product_status_change()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L31"}, {"id": "crud_cell_product_row_to_dict", "label": "_row_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L86"}, {"id": "crud_cell_product_build_facility_path_label", "label": "_build_facility_path_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L120"}, {"id": "crud_cell_product_enrich_product_dicts", "label": "_enrich_product_dicts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L135"}, {"id": "crud_cell_product_product_to_response", "label": "product_to_response()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L271"}, {"id": "crud_cell_product_list_cell_products", "label": "list_cell_products()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L276"}, {"id": "crud_cell_product_get_cell_product", "label": "get_cell_product()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L343"}, {"id": "crud_cell_product_create_cell_product", "label": "create_cell_product()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L357"}, {"id": "crud_cell_product_update_cell_product", "label": "update_cell_product()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L430"}, {"id": "crud_cell_product_delete_cell_product", "label": "delete_cell_product()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L530"}, {"id": "crud_cell_product_next_code_start_seq", "label": "_next_code_start_seq()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L547"}, {"id": "crud_cell_product_get_next_code", "label": "get_next_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L568"}, {"id": "crud_cell_product_normalize_passage_product_base", "label": "normalize_passage_product_base()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L579"}, {"id": "crud_cell_product_get_max_passage_product_seq", "label": "get_max_passage_product_seq()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L590"}, {"id": "crud_cell_product_get_max_passage_product_seq_map", "label": "get_max_passage_product_seq_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L624"}, {"id": "crud_cell_product_get_max_product_suffix_seq", "label": "get_max_product_suffix_seq()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L642"}, {"id": "crud_cell_product_product_code_exists", "label": "product_code_exists()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L674"}, {"id": "crud_cell_product_normalize_product_code_base", "label": "normalize_product_code_base()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L693"}, {"id": "crud_cell_product_build_split_product_codes", "label": "build_split_product_codes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L704"}, {"id": "crud_cell_product_reserve_next_codes", "label": "reserve_next_codes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L711"}, {"id": "crud_cell_product_validate_batch_items", "label": "_validate_batch_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py", "source_location": "L721"}, {"id": "crud_cell_product_create_cell_products_by_quantity", "label": "create_cell_products_by_quantity()", "file_type": "code"Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_storage_facility_py", "label": "storage_facility.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L1"}, {"id": "crud_storage_facility_row_to_dict", "label": "_row_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L31"}, {"id": "crud_storage_facility_list_all_facilities", "label": "list_all_facilities()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L47"}, {"id": "crud_storage_facility_get_facility", "label": "get_facility()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L70"}, {"id": "crud_storage_facility_get_children", "label": "get_children()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L79"}, {"id": "crud_storage_facility_collect_descendant_ids", "label": "collect_descendant_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L95"}, {"id": "crud_storage_facility_create_facility", "label": "create_facility()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L108"}, {"id": "crud_storage_facility_update_facility", "label": "update_facility()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L152"}, {"id": "crud_storage_facility_soft_delete_facility", "label": "soft_delete_facility()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L210"}, {"id": "crud_storage_facility_slot_to_dict", "label": "_slot_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L236"}, {"id": "crud_storage_facility_aggregate_slot_stats_by_facility", "label": "aggregate_slot_stats_by_facility()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L259"}, {"id": "crud_storage_facility_list_slots", "label": "list_slots()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L287"}, {"id": "crud_storage_facility_is_slot_available_row", "label": "_is_slot_available_row()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L311"}, {"id": "crud_storage_facility_slot_select_display_name", "label": "_slot_select_display_name()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L317"}, {"id": "crud_storage_facility_slot_available_filter", "label": "_slot_available_filter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L323"}, {"id": "crud_storage_facility_facility_node_ids_matching_keyword", "label": "_facility_node_ids_matching_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L332"}, {"id": "crud_storage_facility_slot_matches_select_keyword", "label": "_slot_matches_select_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L353"}, {"id": "crud_storage_facility_leaf_node_ids_for_path_prefix", "label": "_leaf_node_ids_for_path_prefix()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L375"}, {"id": "crud_storage_facility_build_node_path_cache", "label": "_build_node_path_cache()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L398"}, {"id": "crud_storage_facility_exact_node_ids_for_path", "label": "_exact_node_ids_for_path()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L407"}, {"id": "crud_storage_facility_collect_slot_host_node_ids", "label": "_collect_slot_host_node_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L421"}, {"id": "crud_storage_facility_resolve_path_keyword", "label": "_resolve_path_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L461"}Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_storage_facility_py", "label": "storage_facility.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L1"}, {"id": "crud_storage_facility_row_to_dict", "label": "_row_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L31"}, {"id": "crud_storage_facility_list_all_facilities", "label": "list_all_facilities()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L47"}, {"id": "crud_storage_facility_get_facility", "label": "get_facility()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L70"}, {"id": "crud_storage_facility_get_children", "label": "get_children()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L79"}, {"id": "crud_storage_facility_collect_descendant_ids", "label": "collect_descendant_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L95"}, {"id": "crud_storage_facility_create_facility", "label": "create_facility()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L108"}, {"id": "crud_storage_facility_update_facility", "label": "update_facility()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L152"}, {"id": "crud_storage_facility_soft_delete_facility", "label": "soft_delete_facility()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L210"}, {"id": "crud_storage_facility_slot_to_dict", "label": "_slot_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L236"}, {"id": "crud_storage_facility_aggregate_slot_stats_by_facility", "label": "aggregate_slot_stats_by_facility()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L259"}, {"id": "crud_storage_facility_list_slots", "label": "list_slots()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L287"}, {"id": "crud_storage_facility_is_slot_available_row", "label": "_is_slot_available_row()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L311"}, {"id": "crud_storage_facility_slot_select_display_name", "label": "_slot_select_display_name()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L317"}, {"id": "crud_storage_facility_slot_available_filter", "label": "_slot_available_filter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L323"}, {"id": "crud_storage_facility_facility_node_ids_matching_keyword", "label": "_facility_node_ids_matching_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L332"}, {"id": "crud_storage_facility_slot_matches_select_keyword", "label": "_slot_matches_select_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L353"}, {"id": "crud_storage_facility_leaf_node_ids_for_path_prefix", "label": "_leaf_node_ids_for_path_prefix()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L375"}, {"id": "crud_storage_facility_build_node_path_cache", "label": "_build_node_path_cache()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L398"}, {"id": "crud_storage_facility_exact_node_ids_for_path", "label": "_exact_node_ids_for_path()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L407"}, {"id": "crud_storage_facility_resolve_path_keyword", "label": "_resolve_path_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location": "L421"}, {"id": "crud_storage_facility_build_slot_keyword_sql_filters", "label": "_build_slot_keyword_sql_filters()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py", "source_location":Line truncated
|
||||
File diff suppressed because it is too large.
Load diff
+1337
-1000
File diff suppressed because it is too large.
Load diff
@@ -1,11 +1,11 @@
|
||||
# Graph Report - app (2026-06-29)
|
||||
# Graph Report - app (2026-06-30)
|
||||
|
||||
## Corpus Check
|
||||
- Large corpus: 214 files · ~259,848 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
|
||||
- Large corpus: 214 files · ~260,199 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
|
||||
|
||||
## Summary
|
||||
- 4437 nodes · 23779 edges · 48 communities detected
|
||||
- Extraction: 32% EXTRACTED · 68% INFERRED · 0% AMBIGUOUS · INFERRED: 16163 edges (avg confidence: 0.59)
|
||||
- 4445 nodes · 23810 edges · 51 communities detected
|
||||
- Extraction: 32% EXTRACTED · 68% INFERRED · 0% AMBIGUOUS · INFERRED: 16176 edges (avg confidence: 0.59)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## Community Hubs (Navigation)
|
||||
@@ -51,17 +51,20 @@
|
||||
- [[_COMMUNITY_Community 39|Community 39]]
|
||||
- [[_COMMUNITY_Community 40|Community 40]]
|
||||
- [[_COMMUNITY_Community 41|Community 41]]
|
||||
- [[_COMMUNITY_Community 42|Community 42]]
|
||||
- [[_COMMUNITY_Community 43|Community 43]]
|
||||
- [[_COMMUNITY_Community 44|Community 44]]
|
||||
- [[_COMMUNITY_Community 45|Community 45]]
|
||||
- [[_COMMUNITY_Community 46|Community 46]]
|
||||
- [[_COMMUNITY_Community 47|Community 47]]
|
||||
- [[_COMMUNITY_Community 48|Community 48]]
|
||||
- [[_COMMUNITY_Community 49|Community 49]]
|
||||
- [[_COMMUNITY_Community 50|Community 50]]
|
||||
- [[_COMMUNITY_Community 51|Community 51]]
|
||||
- [[_COMMUNITY_Community 52|Community 52]]
|
||||
|
||||
## God Nodes (most connected - your core abstractions)
|
||||
1. `success_response()` - 668 edges
|
||||
2. `error_response()` - 552 edges
|
||||
3. `SysUser` - 478 edges
|
||||
3. `SysUser` - 479 edges
|
||||
4. `BizProductionMaterial` - 311 edges
|
||||
5. `BizQcTaskResult` - 309 edges
|
||||
6. `BizProductionMaterialUsage` - 306 edges
|
||||
@@ -75,8 +78,8 @@
|
||||
core/api_request_log_middleware.py → models/models.py
|
||||
- `get_menu_list()` --calls--> `success_response()` [INFERRED]
|
||||
api/menu.py → core/response.py
|
||||
- `mark_requisition_fully_used()` --calls--> `apply_data_scope()` [INFERRED]
|
||||
crud/material_usage.py → core/data_scope.py
|
||||
- `中试服务体检管理 API(体检信息、预约项目、实际项目)` --uses--> `SysUser` [INFERRED]
|
||||
api/pilot_checkup.py → models/models.py
|
||||
- `保留匹配节点及其全部上级,供关键词检索后仍能正确组树。` --uses--> `SysDept` [INFERRED]
|
||||
crud/dept.py → models/models.py
|
||||
- `物品单位 CRUD(biz_item_unit)` --uses--> `BizItemUnit` [INFERRED]
|
||||
@@ -86,59 +89,59 @@
|
||||
|
||||
### Community 0 - "Community 0"
|
||||
Cohesion: 0.01
|
||||
Nodes (870): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+862 more)
|
||||
Nodes (908): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+900 more)
|
||||
|
||||
### Community 1 - "Community 1"
|
||||
Cohesion: 0.01
|
||||
Nodes (599): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+591 more)
|
||||
Nodes (616): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+608 more)
|
||||
|
||||
### Community 2 - "Community 2"
|
||||
Cohesion: 0.09
|
||||
Nodes (342): 环境检测 — 检测项维护 + 登记管理 API, 保险公司及险种价格管理 API(保险公司 + 开票信息 + 险种价格), AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody (+334 more)
|
||||
Cohesion: 0.01
|
||||
Nodes (334): _normalize_date_bound(), _persist_protocol_sub_resources(), list_ethnics_for_select(), apply_data_scope(), _get_child_dept_ids(), get_user_dept_id(), _resolve_user_role_scopes(), format_date() (+326 more)
|
||||
|
||||
### Community 3 - "Community 3"
|
||||
Cohesion: 0.01
|
||||
Nodes (296): generate_uuid(), create_cell_sample_type(), get_cell_sample_type(), list_cell_sample_types(), 细胞样本类型 CRUD(biz_cell_sample_type), _row_to_dict(), soft_delete_cell_sample_type(), type_code_exists() (+288 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (343): 环境检测 — 检测项维护 + 登记管理 API, 保险公司及险种价格管理 API(保险公司 + 开票信息 + 险种价格), Base, 将 BizMaterialUsage 行转换为字典(用于我的领用记录)。, 当前登录人的手动出库领用记录:领用人字段存昵称或用户 ID(与生产/质检一致)。, 获取当前用户的物料领用记录(手动出库记录) 筛选条件: - tenant_no = 当前用户租户 - source_type = 'm, 根据 usage_id / batch_id 补全登记行快照字段。, 输注计划出库交接 — 细胞产品状态与市场物料库存联动。 (+335 more)
|
||||
|
||||
### Community 4 - "Community 4"
|
||||
Cohesion: 0.07
|
||||
Nodes (320): AuditCreateBody, BatchDetailIdsBody, BatchRefundFinanceSubmitBody, FinanceConfirmBody, FullmoonTodoInsuranceBody, InvoiceRequestCompleteBody, InvoiceRequestCreateBody, PaymentDetailDraftBody (+312 more)
|
||||
Cohesion: 0.01
|
||||
Nodes (303): generate_uuid(), batch_stock_in(), batch_stock_out(), consumable_code_exists(), create_consumable(), _dec(), get_consumable(), _is_enabled_status() (+295 more)
|
||||
|
||||
### Community 5 - "Community 5"
|
||||
Cohesion: 0.02
|
||||
Nodes (270): _normalize_date_bound(), create_collection_protocol(), delete_collection_protocol(), _draft_fields_from_body(), _ensure_customer_for_mother(), get_collection_protocol_detail(), _get_current_user_id(), get_invoice_eligible_payments() (+262 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (244): CellSampleTypeCreateBody, CellSampleTypeUpdateBody, CollectionRegionCreateBody, CollectionRegionUpdateBody, CustomerCreateBody, CustomerUpdateBody, HospitalCreateBody, HospitalUpdateBody (+236 more)
|
||||
|
||||
### Community 6 - "Community 6"
|
||||
Cohesion: 0.02
|
||||
Nodes (261): ApiRequestLogCRUD, delete(), get_multi_with_filters(), create_collection_region(), create_hospital(), get_collection_region(), get_hospital(), _hospital_names_by_region_ids() (+253 more)
|
||||
Nodes (205): api_get_checkup_detail(), get_protocol_nos_used_in_protocols(), create_dict_type(), dict_type_code_exists(), get_dict_type(), list_dict_types(), 字典类型 CRUD(sys_dict_type), _row_to_dict() (+197 more)
|
||||
|
||||
### Community 7 - "Community 7"
|
||||
Cohesion: 0.02
|
||||
Nodes (198): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时统一排序规则,避免 Illegal mix of collations。, 跨表字符串等值比较(JOIN / WHERE)时统一为 utf8mb4_unicode_ci。, 将列显式设为 utf8mb4_unicode_ci。, unicode_ci(), batch_review(), _dec() (+190 more)
|
||||
Nodes (199): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时统一排序规则,避免 Illegal mix of collations。, 跨表字符串等值比较(JOIN / WHERE)时统一为 utf8mb4_unicode_ci。, 将列显式设为 utf8mb4_unicode_ci。, unicode_ci(), batch_review(), _dec() (+191 more)
|
||||
|
||||
### Community 8 - "Community 8"
|
||||
Cohesion: 0.02
|
||||
Nodes (174): get_protocol_nos_used_in_protocols(), create_dict_type(), dict_type_code_exists(), get_dict_type(), list_dict_types(), 字典类型 CRUD(sys_dict_type), _row_to_dict(), soft_delete_dict_type() (+166 more)
|
||||
Nodes (125): get_designer_data(), _error_json(), 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, sqlalchemy_exception_handler(), unhandled_exception_handler(), BaseHTTPMiddleware, ApiCryptoError (+117 more)
|
||||
|
||||
### Community 9 - "Community 9"
|
||||
Cohesion: 0.02
|
||||
Nodes (112): get_designer_data(), _error_json(), 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, sqlalchemy_exception_handler(), unhandled_exception_handler(), BaseHTTPMiddleware, ApiCryptoError (+104 more)
|
||||
Cohesion: 0.03
|
||||
Nodes (179): batch_discard(), batch_options(), _batch_row_to_dict(), batch_stock_in(), batch_stock_out(), _create_batch_and_usage(), delete_batch(), _discard_batch() (+171 more)
|
||||
|
||||
### Community 10 - "Community 10"
|
||||
Cohesion: 0.03
|
||||
Nodes (131): get_next_cell_product_code(), _ancestor_link_from_cell_product_input(), _ancestor_sample_chain_link(), _apply_cell_product_status_change(), _build_ancestor_chain(), _build_descendant_chain(), _build_facility_path_label(), create_cell_product() (+123 more)
|
||||
Cohesion: 0.04
|
||||
Nodes (124): AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody, list_storage_slot_stats(), OccupancyCreateBody (+116 more)
|
||||
|
||||
### Community 11 - "Community 11"
|
||||
Cohesion: 0.04
|
||||
Nodes (99): urls_to_attachment_list(), _apply_qc_status_filter(), _base_query(), _derive_qc_conclusion(), _ensure_notification(), _eq_ci(), _fetch_completed_tasks(), _fmt_dt() (+91 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (71): get_next_cell_product_code(), _ancestor_link_from_cell_product_input(), _ancestor_sample_chain_link(), _apply_cell_product_status_change(), _build_ancestor_chain(), _build_descendant_chain(), _build_facility_path_label(), build_split_product_codes() (+63 more)
|
||||
|
||||
### Community 12 - "Community 12"
|
||||
Cohesion: 0.06
|
||||
Nodes (51): _avatar_url_field(), _build_user_info_payload(), _jwt_user_payload(), logout(), 公共接口(Web 登录、刷新 Token、登出;用户模型对齐 docs/sql/zkxw.sql 基线), Web 端登录用 RSA 公钥(PKCS#1 v1.5,与 JSEncrypt 一致), Web 端登录:账号为 sys_user.user_no,密码为 sys_user.password(bcrypt)。, 登出:吊销 Redis 会话(若已配置 REDIS_HOST)。 (+43 more)
|
||||
Nodes (58): generate_id(), optional_date(), parse_date(), 将字符串 / date / datetime 转为 date 或 None, camel_to_snake(), get_model_attr(), HistoryCRUD, allocate_next_biz_no() (+50 more)
|
||||
|
||||
### Community 13 - "Community 13"
|
||||
Cohesion: 0.07
|
||||
Nodes (57): aggregate_slot_stats_by_facility(), _apply_slot_select_base_filters(), _apply_slot_select_query_filters(), batch_create_slots(), _build_slot_keyword_sql_filters(), collect_descendant_ids(), create_facility(), create_slot() (+49 more)
|
||||
Nodes (49): _jwt_user_payload(), Web 端登录用 RSA 公钥(PKCS#1 v1.5,与 JSEncrypt 一致), Web 端登录:账号为 sys_user.user_no,密码为 sys_user.password(bcrypt)。, refresh_token(), web_login(), web_login_rsa_public_key(), lifespan(), create_access_token() (+41 more)
|
||||
|
||||
### Community 14 - "Community 14"
|
||||
Cohesion: 0.11
|
||||
@@ -149,173 +152,185 @@ Cohesion: 0.12
|
||||
Nodes (10): get_wechat_pay_client(), get_wechat_pay_v2(), 微信支付工具模块 支持微信支付 V3 API 文档参考: https://pay.weixin.qq.com/docs/v3/apis/index.ht, 统一下单接口 (V3) Args: out_trade_no: 商户订单号 total, 小程序调起支付的二次签名参数(与公众号 JSAPI 规则一致), 统一下单 (V2 API) Args: out_trade_no: 商户订单号 tot, 生成签名 V3 (SHA256 with RSA), wechat_pay() (+2 more)
|
||||
|
||||
### Community 16 - "Community 16"
|
||||
Cohesion: 0.19
|
||||
Nodes (27): _amount_for_row(), _batch_map(), deduct_for_task(), _deduct_task_usage_legacy_batch(), _display_remark(), _fmt_date_val(), _linked_qc_task_no_map(), list_linked_task_usages() (+19 more)
|
||||
|
||||
### Community 17 - "Community 17"
|
||||
Cohesion: 0.2
|
||||
Nodes (19): _code_exists(), create_material(), _dec(), _fmt_dt(), get_material(), get_material_entity(), get_my_usages(), _is_enabled_status() (+11 more)
|
||||
|
||||
### Community 17 - "Community 17"
|
||||
Cohesion: 0.15
|
||||
Nodes (16): create_cell_sample_type(), get_cell_sample_type(), list_cell_sample_types(), 细胞样本类型 CRUD(biz_cell_sample_type), _row_to_dict(), soft_delete_cell_sample_type(), type_code_exists(), update_cell_sample_type() (+8 more)
|
||||
|
||||
### Community 18 - "Community 18"
|
||||
Cohesion: 0.27
|
||||
Nodes (12): create_equipment(), _dec(), equipment_code_exists(), equipment_is_referenced(), get_equipment(), list_equipments(), _norm_status(), _parse_date() (+4 more)
|
||||
Cohesion: 0.21
|
||||
Nodes (15): batch_generate_protocol_nos(), batch_issue_protocol_nos(), batch_revoke_protocol_nos(), create_protocol_no(), get_protocol_no(), list_protocol_nos(), _parse_issued_time(), protocol_no_exists() (+7 more)
|
||||
|
||||
### Community 19 - "Community 19"
|
||||
Cohesion: 0.26
|
||||
Nodes (12): batch_issue_sample_codes(), batch_revoke_sample_codes(), create_sample_code(), get_sample_code(), list_sample_codes(), _parse_issued_time(), 样本编码池 CRUD(biz_sample_code), _resolve_issued_user_display_name() (+4 more)
|
||||
Cohesion: 0.22
|
||||
Nodes (14): batch_generate_sample_codes(), batch_issue_sample_codes(), batch_revoke_sample_codes(), create_sample_code(), get_sample_code(), list_sample_codes(), _parse_issued_time(), 样本编码池 CRUD(biz_sample_code) (+6 more)
|
||||
|
||||
### Community 20 - "Community 20"
|
||||
Cohesion: 0.24
|
||||
Nodes (9): 微信消息通知服务 支持微信小程序模板消息推送 使用方式: from app.core.wechat_message import Wech, 发送模板消息 Args: openid: 用户openid templ, send_delivery_notice(), send_delivery_warning(), send_order_status(), send_payment_success(), send_refund_result(), send_urge_notification() (+1 more)
|
||||
|
||||
### Community 21 - "Community 21"
|
||||
Cohesion: 0.24
|
||||
Nodes (12): appointment_no_exists(), create_exhibition_appointment(), _format_visit_date(), _generate_appointment_no(), get_exhibition_appointment(), list_exhibition_appointments(), 展览预约 CRUD(biz_exhibition_appointment), 生成预约编号:YYYYMMDD + 6位序号(如 20260515000001) (+4 more)
|
||||
Cohesion: 0.23
|
||||
Nodes (12): Config, ProductBase, ProductCategoryBase, ProductCategoryCreate, ProductCategoryResponse, ProductCreate, ProductResponse, ProductUnitBase (+4 more)
|
||||
|
||||
### Community 22 - "Community 22"
|
||||
Cohesion: 0.24
|
||||
Nodes (11): deduct_for_step(), _display_remark(), list_stock_logs(), _parse_receiver_purpose_from_remark(), 耗材变动记录 CRUD(biz_consumable_stock_log), 撤销步骤此前 step_save 扣减,便于重新填报。, 扣减耗材库存并生成变动记录。调用方控制事务,本函数不 commit。, _resolve_receiver_purpose() (+3 more)
|
||||
Cohesion: 0.26
|
||||
Nodes (11): create_collection_region(), create_hospital(), get_collection_region(), get_hospital(), _hospital_to_dict(), list_hospitals(), search_hospitals_by_keyword(), soft_delete_collection_region() (+3 more)
|
||||
|
||||
### Community 23 - "Community 23"
|
||||
Cohesion: 0.27
|
||||
Nodes (11): create_consumable_pack(), get_consumable_pack(), get_pack_detail(), _item_row_to_dict(), list_all_packs(), list_consumable_packs(), pack_code_exists(), 耗材包 CRUD(biz_consumable_pack + biz_consumable_pack_item) (+3 more)
|
||||
|
||||
### Community 24 - "Community 24"
|
||||
Cohesion: 0.24
|
||||
Nodes (11): deduct_for_step(), _display_remark(), list_stock_logs(), _parse_receiver_purpose_from_remark(), 试剂变动记录 CRUD(biz_reagent_stock_log), 撤销步骤此前 step_save 扣减,便于重新填报。, 扣减试剂库存并生成变动记录。调用方控制事务,本函数不 commit。, _resolve_receiver_purpose() (+3 more)
|
||||
|
||||
### Community 24 - "Community 24"
|
||||
### Community 25 - "Community 25"
|
||||
Cohesion: 0.23
|
||||
Nodes (10): create_dict_data(), get_dict_data(), is_dict_value_valid(), list_dict_data(), list_dict_data_options(), normalize_transfer_type(), 字典数据 CRUD(sys_dict_data), _row_to_dict() (+2 more)
|
||||
|
||||
### Community 25 - "Community 25"
|
||||
### Community 26 - "Community 26"
|
||||
Cohesion: 0.24
|
||||
Nodes (11): deduct_for_step(), _display_remark(), list_stock_logs(), _parse_receiver_purpose_from_remark(), 耗材变动记录 CRUD(biz_consumable_stock_log), 撤销步骤此前 step_save 扣减,便于重新填报。, 扣减耗材库存并生成变动记录。调用方控制事务,本函数不 commit。, _resolve_receiver_purpose() (+3 more)
|
||||
|
||||
### Community 27 - "Community 27"
|
||||
Cohesion: 0.27
|
||||
Nodes (11): _build_tree(), _cascade_soft_delete(), _collect_with_ancestors(), create_dept(), get_dept(), list_depts(), list_depts_tree(), 保留匹配节点及其全部上级,供关键词检索后仍能正确组树。 (+3 more)
|
||||
|
||||
### Community 26 - "Community 26"
|
||||
Cohesion: 0.2
|
||||
Nodes (5): CellProductBatchItem, CellProductListQuery, coerce_date_fields(), _coerce_optional_datetime(), 兼容前端 date-picker 的 YYYY-MM-DD 与完整日期时间字符串。
|
||||
|
||||
### Community 27 - "Community 27"
|
||||
Cohesion: 0.2
|
||||
Nodes (9): get_user_menu_codes(), 菜单 code 权限守卫(V0.3:通过 sys_user_role → sys_role_menu → sys_menu.perms), 运营端角色守卫:admin / super_admin 可访问。, 读取用户授权的菜单权限标识集合(与前端 meta.menuCode / perms 对齐)。, 接口菜单权限守卫(已统一放行 menuCode 校验,仅保留运营端登录)。, 接口菜单权限守卫(已统一放行 menuCode 校验,仅保留运营端登录)。, require_admin_or_super_admin(), require_any_menu_code() (+1 more)
|
||||
|
||||
### Community 28 - "Community 28"
|
||||
Cohesion: 0.29
|
||||
Nodes (9): _build_tree(), _cascade_soft_delete(), create_menu(), get_menu(), list_menus(), list_menus_tree(), _row_to_dict(), soft_delete_menu() (+1 more)
|
||||
|
||||
### Community 29 - "Community 29"
|
||||
Cohesion: 0.27
|
||||
Nodes (8): create_customer(), get_customer(), id_card_taken(), list_customers(), 客户 CRUD(biz_customer), _row_to_dict(), soft_delete_customer(), update_customer()
|
||||
|
||||
### Community 30 - "Community 30"
|
||||
Cohesion: 0.38
|
||||
Nodes (9): create_check_item(), get_check_item(), item_code_exists(), list_active_check_items(), list_check_items(), _order_query(), _row_to_dict(), soft_delete_check_item() (+1 more)
|
||||
|
||||
### Community 29 - "Community 29"
|
||||
### Community 31 - "Community 31"
|
||||
Cohesion: 0.38
|
||||
Nodes (9): create_env_detect_item(), get_env_detect_item(), item_code_exists(), list_active_env_detect_items(), list_env_detect_items(), _order_query(), _row_to_dict(), soft_delete_env_detect_item() (+1 more)
|
||||
|
||||
### Community 30 - "Community 30"
|
||||
### Community 32 - "Community 32"
|
||||
Cohesion: 0.31
|
||||
Nodes (8): category_code_exists(), create_process_category(), get_process_category(), list_process_categories(), 工艺工序分类 CRUD(biz_process_category), _row_to_dict(), soft_delete_process_category(), update_process_category()
|
||||
|
||||
### Community 31 - "Community 31"
|
||||
### Community 33 - "Community 33"
|
||||
Cohesion: 0.31
|
||||
Nodes (8): create_item_unit(), get_item_unit(), list_item_units(), 物品单位 CRUD(biz_item_unit), _row_to_dict(), soft_delete_item_unit(), unit_code_exists(), update_item_unit()
|
||||
|
||||
### Community 34 - "Community 34"
|
||||
Cohesion: 0.31
|
||||
Nodes (8): create_output_type(), get_output_type(), list_output_types(), 工艺产出物类型 CRUD(biz_output_type), _row_to_dict(), soft_delete_output_type(), type_code_exists(), update_output_type()
|
||||
|
||||
### Community 32 - "Community 32"
|
||||
Cohesion: 0.33
|
||||
Nodes (7): _cascade_soft_delete(), create_menu(), get_menu(), list_menus(), _row_to_dict(), soft_delete_menu(), update_menu()
|
||||
### Community 35 - "Community 35"
|
||||
Cohesion: 0.36
|
||||
Nodes (7): create_post(), get_post(), list_posts(), post_code_exists(), _row_to_dict(), soft_delete_post(), update_post()
|
||||
|
||||
### Community 33 - "Community 33"
|
||||
### Community 36 - "Community 36"
|
||||
Cohesion: 0.36
|
||||
Nodes (7): create_tenant(), get_tenant(), list_tenants(), _row_to_dict(), soft_delete_tenant(), tenant_no_exists(), update_tenant()
|
||||
|
||||
### Community 37 - "Community 37"
|
||||
Cohesion: 0.36
|
||||
Nodes (7): create_site(), get_site(), list_sites(), _row_to_dict(), site_code_exists(), soft_delete_site(), update_site()
|
||||
|
||||
### Community 34 - "Community 34"
|
||||
### Community 38 - "Community 38"
|
||||
Cohesion: 0.29
|
||||
Nodes (2): BaseModel, SoftDeleteModel
|
||||
|
||||
### Community 35 - "Community 35"
|
||||
### Community 39 - "Community 39"
|
||||
Cohesion: 0.38
|
||||
Nodes (6): derive_legacy_status_from_three(), derive_three_status_from_legacy(), 阶段A兼容:从旧 status 推导三字段。 约束:旧 status 本身混合了支付/配送/订单生命周期,因此只能尽力推断; 若业务侧已有更精确, 阶段A兼容:从三字段反推旧 status(用于旧前端/旧筛选参数兼容)。, ThreeStatus, _to_decimal()
|
||||
|
||||
### Community 36 - "Community 36"
|
||||
Cohesion: 0.4
|
||||
Nodes (4): list_ethnics_for_select(), list_ethnics(), 民族码表 CRUD(全局 sys_ethnic), _row_to_dict()
|
||||
|
||||
### Community 37 - "Community 37"
|
||||
### Community 40 - "Community 40"
|
||||
Cohesion: 0.5
|
||||
Nodes (3): BaseSettings, Config, Settings
|
||||
|
||||
### Community 38 - "Community 38"
|
||||
### Community 41 - "Community 41"
|
||||
Cohesion: 0.5
|
||||
Nodes (2): _auto_fill_create_dept_id(), ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID
|
||||
|
||||
### Community 39 - "Community 39"
|
||||
### Community 42 - "Community 42"
|
||||
Cohesion: 0.67
|
||||
Nodes (2): get_menu_list(), 运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)
|
||||
|
||||
### Community 40 - "Community 40"
|
||||
### Community 43 - "Community 43"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): 请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传
|
||||
|
||||
### Community 41 - "Community 41"
|
||||
### Community 44 - "Community 44"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)
|
||||
|
||||
### Community 44 - "Community 44"
|
||||
### Community 47 - "Community 47"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): 发送订单状态通知 Args: openid: 用户openid ord
|
||||
|
||||
### Community 45 - "Community 45"
|
||||
### Community 48 - "Community 48"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): 发送支付成功通知 Args: openid: 用户openid ord
|
||||
|
||||
### Community 46 - "Community 46"
|
||||
### Community 49 - "Community 49"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): 发送配送通知 Args: openid: 配送员openid task
|
||||
|
||||
### Community 47 - "Community 47"
|
||||
### Community 50 - "Community 50"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): 发送配送时效预警 Args: openid: 配送员openid ta
|
||||
|
||||
### Community 48 - "Community 48"
|
||||
### Community 51 - "Community 51"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): 发送退款结果通知 Args: openid: 用户openid ord
|
||||
|
||||
### Community 49 - "Community 49"
|
||||
### Community 52 - "Community 52"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): 发送催单通知给配送员 Args: deliver_openid: 配送员openid
|
||||
|
||||
## Knowledge Gaps
|
||||
- **132 isolated node(s):** `刷新会话 TTL(refreshToken 续期;已登录用户每次 API 校验通过后滑动续期)`, `写入 refreshToken(用于 one-time 使用/吊销)`, `根据 token 获取当前用户(包含 Redis 会话校验;会话滑动续期)`, `登录凭据 RSA 解密(与前端 JSEncrypt PKCS#1 v1.5 兼容)。`, `加载 RSA 密钥对:优先环境变量,否则使用内置固定默认密钥。` (+127 more)
|
||||
These have ≤1 connection - possible missing edges or undocumented components.
|
||||
- **Thin community `Community 34`** (8 nodes): `BaseModel`, `.to_dict()`, `get_active()`, `base.py`, `SoftDeleteModel`, `.restore()`, `.soft_delete()`, `__tablename__()`
|
||||
- **Thin community `Community 38`** (8 nodes): `BaseModel`, `.to_dict()`, `get_active()`, `base.py`, `SoftDeleteModel`, `.restore()`, `.soft_delete()`, `__tablename__()`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 38`** (4 nodes): `_auto_fill_create_dept_id()`, `get_db()`, `database.py`, `ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID`
|
||||
- **Thin community `Community 41`** (4 nodes): `_auto_fill_create_dept_id()`, `get_db()`, `database.py`, `ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 39`** (3 nodes): `get_menu_list()`, `menu.py`, `运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)`
|
||||
- **Thin community `Community 42`** (3 nodes): `get_menu_list()`, `menu.py`, `运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 40`** (2 nodes): `context.py`, `请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传`
|
||||
- **Thin community `Community 43`** (2 nodes): `context.py`, `请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 41`** (2 nodes): `__init__.py`, `API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)`
|
||||
- **Thin community `Community 44`** (2 nodes): `__init__.py`, `API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 44`** (1 nodes): `发送订单状态通知 Args: openid: 用户openid ord`
|
||||
- **Thin community `Community 47`** (1 nodes): `发送订单状态通知 Args: openid: 用户openid ord`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 45`** (1 nodes): `发送支付成功通知 Args: openid: 用户openid ord`
|
||||
- **Thin community `Community 48`** (1 nodes): `发送支付成功通知 Args: openid: 用户openid ord`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 46`** (1 nodes): `发送配送通知 Args: openid: 配送员openid task`
|
||||
- **Thin community `Community 49`** (1 nodes): `发送配送通知 Args: openid: 配送员openid task`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 47`** (1 nodes): `发送配送时效预警 Args: openid: 配送员openid ta`
|
||||
- **Thin community `Community 50`** (1 nodes): `发送配送时效预警 Args: openid: 配送员openid ta`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 48`** (1 nodes): `发送退款结果通知 Args: openid: 用户openid ord`
|
||||
- **Thin community `Community 51`** (1 nodes): `发送退款结果通知 Args: openid: 用户openid ord`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 49`** (1 nodes): `发送催单通知给配送员 Args: deliver_openid: 配送员openid`
|
||||
- **Thin community `Community 52`** (1 nodes): `发送催单通知给配送员 Args: deliver_openid: 配送员openid`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
|
||||
## Suggested Questions
|
||||
_Questions this graph is uniquely positioned to answer:_
|
||||
|
||||
- **Why does `SysUser` connect `Community 1` to `Community 2`, `Community 3`, `Community 4`, `Community 5`, `Community 6`, `Community 8`, `Community 9`, `Community 12`, `Community 19`, `Community 22`, `Community 23`?**
|
||||
_High betweenness centrality (0.097) - this node is a cross-community bridge._
|
||||
- **Why does `generate_uuid()` connect `Community 3` to `Community 0`, `Community 1`, `Community 4`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 14`, `Community 16`, `Community 17`, `Community 18`, `Community 19`, `Community 21`, `Community 22`, `Community 23`, `Community 24`, `Community 25`, `Community 28`, `Community 29`, `Community 30`, `Community 31`, `Community 32`, `Community 33`?**
|
||||
_High betweenness centrality (0.073) - this node is a cross-community bridge._
|
||||
- **Why does `success_response()` connect `Community 0` to `Community 1`, `Community 36`, `Community 5`, `Community 39`, `Community 9`, `Community 10`, `Community 12`?**
|
||||
_High betweenness centrality (0.067) - this node is a cross-community bridge._
|
||||
- **Why does `SysUser` connect `Community 1` to `Community 0`, `Community 2`, `Community 3`, `Community 5`, `Community 6`, `Community 7`, `Community 9`, `Community 10`, `Community 13`, `Community 18`, `Community 19`, `Community 24`, `Community 26`?**
|
||||
_High betweenness centrality (0.101) - this node is a cross-community bridge._
|
||||
- **Why does `generate_uuid()` connect `Community 4` to `Community 0`, `Community 2`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 14`, `Community 16`, `Community 17`, `Community 18`, `Community 19`, `Community 22`, `Community 23`, `Community 24`, `Community 25`, `Community 26`, `Community 27`, `Community 28`, `Community 29`, `Community 30`, `Community 31`, `Community 32`, `Community 33`, `Community 34`, `Community 35`, `Community 36`, `Community 37`?**
|
||||
_High betweenness centrality (0.072) - this node is a cross-community bridge._
|
||||
- **Why does `success_response()` connect `Community 0` to `Community 1`, `Community 2`, `Community 6`, `Community 8`, `Community 10`, `Community 42`, `Community 11`, `Community 13`?**
|
||||
_High betweenness centrality (0.065) - this node is a cross-community bridge._
|
||||
- **Are the 729 inferred relationships involving `str` (e.g. with `unhandled_exception_handler()` and `get_current_user_by_token()`) actually correct?**
|
||||
_`str` has 729 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 667 inferred relationships involving `success_response()` (e.g. with `list_storage_release_reviews()` and `get_storage_release_review_detail()`) actually correct?**
|
||||
_`success_response()` has 667 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 551 inferred relationships involving `error_response()` (e.g. with `_json_error_response()` and `list_storage_release_reviews()`) actually correct?**
|
||||
_`error_response()` has 551 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 476 inferred relationships involving `SysUser` (e.g. with `数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3` and `从 SysUser 读取用户的 dept_id。`) actually correct?**
|
||||
_`SysUser` has 476 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 477 inferred relationships involving `SysUser` (e.g. with `数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3` and `从 SysUser 读取用户的 dept_id。`) actually correct?**
|
||||
_`SysUser` has 477 INFERRED edges - model-reasoned connections that need verification._
|
||||
@@ -57,12 +57,12 @@
|
||||
</div>
|
||||
<div id="legend"></div>
|
||||
</div>
|
||||
<div id="stats">4437 nodes · 23779 edges · 54 communities</div>
|
||||
<div id="stats">4445 nodes · 23810 edges · 57 communities</div>
|
||||
</div>
|
||||
<script>
|
||||
const RAW_NODES = [{"id": "init_py", "label": "__init__.py", "color": {"background": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 42, "community_name": "Community 42", "source_file": "__init__.py", "file_type": "code", "degree": 0}, {"id": "main_py", "label": "main.py", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "main.py", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 7}, {"id": "app_main_lifespan", "label": "lifespan()", "color": {"background": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "lifespan()", "community": 12, "community_name": "Community 12", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_error_json", "label": "_error_json()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "_error_json()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 3}, {"id": "app_main_sqlalchemy_exception_handler", "label": "sqlalchemy_exception_handler()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "sqlalchemy_exception_handler()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_unhandled_exception_handler", "label": "unhandled_exception_handler()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "unhandled_exception_handler()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 5}, {"id": "app_main_mask_secret", "label": "_mask_secret()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "_mask_secret()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_root", "label": "root()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "root()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_health_check", "label": "health_check()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "health_check()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_rationale_81", "label": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "app_main_rationale_92", "label": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "tasks_init_py", "label": "__init__.py", "color": {"background": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 12, "community_name": "Community 12", "source_file": "tasks/__init__.py", "file_type": "code", Line truncated
|
||||
const RAW_EDGES = [{"from": "main_py", "to": "app_main_lifespan", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_error_json", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_sqlalchemy_exception_handler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_unhandled_exception_handler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_mask_secret", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_root", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_health_check", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_lifespan", "to": "core_login_crypto_ensure_initialized", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_lifespan", "to": "tasks_init_init_scheduled_tasks", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_lifespan", "to": "tasks_init_shutdown_scheduler", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_error_json", "to": "app_main_sqlalchemy_exception_handler", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_error_json", "to": "app_main_unhandled_exception_handler", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_sqlalchemy_exception_handler", "to": "app_main_rationale_81", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_sqlalchemy_exception_handler", "to": "exception", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_unhandled_exception_handler", "to": "app_main_rationale_92", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_unhandled_exception_handler", "to": "exception", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_unhandled_exception_handler", "to": "str", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_81", "to": "core_api_request_log_middleware_apirequestlogmiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_81", "to": "core_api_crypto_middleware_apicryptomiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_92", "to": "core_api_request_log_middleware_apirequestlogmiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_92", "to": "core_api_crypto_middleware_apicryptomiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "tasks_init_py", "to": "tasks_init_init_scheduled_tasks", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "tasks_init_py", "to": "tasks_init_shutdown_scheduler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_py", "to": "core_auth_redis_session_enabled", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_py", "to": "core_auth_get_redis_client", "labeLine truncated
|
||||
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 906}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 641}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 347}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 326}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 324}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 306}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 288}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 210}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 193}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 181}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 140}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 112}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 60}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 59}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 38}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 29}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 28}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 20}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 14}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 14}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 13}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 13}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 12}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 12}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 12}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 12}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 11}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 10}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 10}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 10}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 10}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 10}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 9}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 9}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 8}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 7}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 6}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 4}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 4}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 3}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 2}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 2}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 1}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 1}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 1}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 1}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 1}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 1}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 1}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 1}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 1}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 1}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 1}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 1}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 0}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 0}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 0}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 0}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 0}];
|
||||
const RAW_NODES = [{"id": "init_py", "label": "__init__.py", "color": {"background": "#EDC948", "border": "#EDC948", "highlight": {"background": "#ffffff", "border": "#EDC948"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 45, "community_name": "Community 45", "source_file": "__init__.py", "file_type": "code", "degree": 0}, {"id": "main_py", "label": "main.py", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "main.py", "community": 8, "community_name": "Community 8", "source_file": "main.py", "file_type": "code", "degree": 7}, {"id": "app_main_lifespan", "label": "lifespan()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "lifespan()", "community": 13, "community_name": "Community 13", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_error_json", "label": "_error_json()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "_error_json()", "community": 8, "community_name": "Community 8", "source_file": "main.py", "file_type": "code", "degree": 3}, {"id": "app_main_sqlalchemy_exception_handler", "label": "sqlalchemy_exception_handler()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "sqlalchemy_exception_handler()", "community": 8, "community_name": "Community 8", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_unhandled_exception_handler", "label": "unhandled_exception_handler()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "unhandled_exception_handler()", "community": 8, "community_name": "Community 8", "source_file": "main.py", "file_type": "code", "degree": 5}, {"id": "app_main_mask_secret", "label": "_mask_secret()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "_mask_secret()", "community": 8, "community_name": "Community 8", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_root", "label": "root()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "root()", "community": 8, "community_name": "Community 8", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_health_check", "label": "health_check()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "health_check()", "community": 8, "community_name": "Community 8", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_rationale_81", "label": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "community": 8, "community_name": "Community 8", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "app_main_rationale_92", "label": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "community": 8, "community_name": "Community 8", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "tasks_init_py", "label": "__init__.py", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 13, "community_name": "Community 13", "source_file": "tasks/__init__.py", "file_type": "code", Line truncated
|
||||
const RAW_EDGES = [{"from": "main_py", "to": "app_main_lifespan", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_error_json", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_sqlalchemy_exception_handler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_unhandled_exception_handler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_mask_secret", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_root", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_health_check", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_lifespan", "to": "core_login_crypto_ensure_initialized", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_lifespan", "to": "tasks_init_init_scheduled_tasks", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_lifespan", "to": "tasks_init_shutdown_scheduler", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_error_json", "to": "app_main_sqlalchemy_exception_handler", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_error_json", "to": "app_main_unhandled_exception_handler", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_sqlalchemy_exception_handler", "to": "app_main_rationale_81", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_sqlalchemy_exception_handler", "to": "exception", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_unhandled_exception_handler", "to": "app_main_rationale_92", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_unhandled_exception_handler", "to": "exception", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_unhandled_exception_handler", "to": "str", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_81", "to": "core_api_request_log_middleware_apirequestlogmiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_81", "to": "core_api_crypto_middleware_apicryptomiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_92", "to": "core_api_request_log_middleware_apirequestlogmiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_92", "to": "core_api_crypto_middleware_apicryptomiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "tasks_init_py", "to": "tasks_init_init_scheduled_tasks", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "tasks_init_py", "to": "tasks_init_shutdown_scheduler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_py", "to": "core_auth_redis_session_enabled", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_py", "to": "core_auth_get_redis_client", "labeLine truncated
|
||||
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 948}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 663}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 378}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 348}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 327}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 245}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 225}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 212}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 196}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 190}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 129}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 75}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 70}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 58}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 38}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 29}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 20}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 20}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 17}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 16}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 13}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 13}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 13}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 13}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 12}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 12}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 12}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 12}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 11}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 11}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 10}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 10}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 10}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 10}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 10}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 9}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 9}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 9}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 8}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 7}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 4}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 4}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 3}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 2}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 2}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 1}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 1}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 1}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 1}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 1}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 1}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 1}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 1}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 1}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 1}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 1}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 1}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 0}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 0}];
|
||||
|
||||
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
|
||||
function esc(s) {
|
||||
|
||||
+4181
-3737
File diff suppressed because it is too large.
Load diff
@@ -99,7 +99,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/sop_document.py": 1779265721.9928973,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py": 1782720551.1688514,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_third_party_item.py": 1779265661.482352,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py": 1782721891.8907404,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_production_reception.py": 1782722028.9202535,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/reagent.py": 1779512669.9847593,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py": 1782719109.6706095,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py": 1782264452.4901433,
|
||||
@@ -124,7 +124,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_sms_notification.py": 1781590614.9654794,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task_assignee.py": 1781233180.3766735,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation_sample_collection.py": 1781063441.5812025,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py": 1782711017.1302924,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py": 1782752273.7485654,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/menu.py": 1779265729.0381103,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py": 1782181887.2821388,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/pilot_delivery.py": 1779935673.6808827,
|
||||
@@ -155,7 +155,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_material.py": 1779284415.64655,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol_no.py": 1779882001.753651,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/outbound_handover.py": 1780455574.0993364,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py": 1782711148.1420732,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_facility.py": 1782785836.0614257,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py": 1782377429.191194,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_sample_type.py": 1781747645.1762104,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/pilot_outbound_status_sync.py": 1781595840.6955194,
|
||||
@@ -177,7 +177,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py": 1782603414.9912539,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/market.py": 1781522283.6823432,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/sample_production_reception.py": 1782718998.90251,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py": 1782195334.2335806,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py": 1782747504.4073274,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/cleanroom_garment.py": 1781347256.2326367,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py": 1782709076.3968658,
|
||||
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_infusion_confirm.py": 1779657043.1389203,
|
||||
|
||||
@@ -3,7 +3,11 @@
|
||||
from types import SimpleNamespace
|
||||
|
||||
from app.crud.storage_facility import (
|
||||
_build_node_path_cache,
|
||||
_collect_slot_host_node_ids,
|
||||
_exact_node_ids_for_path,
|
||||
_leaf_node_ids_for_path_prefix,
|
||||
_resolve_path_keyword,
|
||||
_slot_matches_select_keyword,
|
||||
_slot_to_dict,
|
||||
)
|
||||
@@ -86,3 +90,45 @@ def test_no_match_returns_false():
|
||||
slot = _slot("s1", "box", "01")
|
||||
|
||||
assert not _slot_matches_select_keyword(slot, "NOT-EXIST", facilities, set())
|
||||
|
||||
|
||||
def test_resolve_path_keyword_for_box_prefix():
|
||||
facilities = {
|
||||
"box": _facility("box", "2", "shelf"),
|
||||
"shelf": _facility("shelf", "1", "root"),
|
||||
"root": _facility("root", "1", "0"),
|
||||
}
|
||||
path_cache = _build_node_path_cache(facilities)
|
||||
|
||||
assert _resolve_path_keyword(path_cache, "1-1-2-") == ("1-1-2", None)
|
||||
assert _resolve_path_keyword(path_cache, "1-1-2") == ("1-1-2", None)
|
||||
assert _resolve_path_keyword(path_cache, "1-1-2-1") == ("1-1-2", "1")
|
||||
assert _exact_node_ids_for_path(path_cache, "1-1-2") == ["box"]
|
||||
|
||||
|
||||
def test_trailing_dash_matches_all_slots_in_box():
|
||||
facilities = {
|
||||
"box": _facility("box", "2", "shelf"),
|
||||
"shelf": _facility("shelf", "1", "root"),
|
||||
"root": _facility("root", "1", "0"),
|
||||
}
|
||||
slots = [_slot("s1", "box", "1"), _slot("s2", "box", "2")]
|
||||
kw = "1-1-2-"
|
||||
for slot in slots:
|
||||
assert _slot_matches_select_keyword(slot, kw, facilities, set())
|
||||
|
||||
|
||||
def test_non_leaf_path_expands_to_descendant_leaves():
|
||||
facilities = {
|
||||
"layer2": _facility("layer2", "2", "shelf"),
|
||||
"layer10": _facility("layer10", "10", "shelf"),
|
||||
"shelf": _facility("shelf", "1", "root"),
|
||||
"root": _facility("root", "1", "0"),
|
||||
}
|
||||
facilities["layer2"].is_leaf = 1
|
||||
facilities["layer10"].is_leaf = 1
|
||||
path_cache = _build_node_path_cache(facilities)
|
||||
|
||||
host_ids = _collect_slot_host_node_ids(path_cache, facilities, "1-1")
|
||||
assert set(host_ids) == {"layer2", "layer10"}
|
||||
assert _collect_slot_host_node_ids(path_cache, facilities, "1-1-2") == ["layer2"]
|
||||
@@ -413,12 +413,15 @@ docker compose up -d
|
||||
### 发版方打包时 pip / pnpm 很慢或超时
|
||||
|
||||
- 已默认 **阿里云 PyPI** + **npmmirror**,并启用 BuildKit 缓存。
|
||||
- 若前端构建在 `corepack prepare pnpm@...` 报错(请求 `registry.npmjs.org` 失败),请更新到含 `COREPACK_NPM_REGISTRY` 的 Dockerfile,或手动指定:
|
||||
- 默认 **npmmirror**(`https://registry.npmmirror.com`)。**国内 Intel / Linux 机器不要设 `NPM_REGISTRY=https://registry.npmjs.org`**,该地址在国内常 ETIMEDOUT。
|
||||
- 若 npmmirror 不稳定,可换其它国内源:
|
||||
```bash
|
||||
NPM_REGISTRY=https://registry.npmmirror.com ./scripts/package-docker-deploy.sh v1.0.0
|
||||
NPM_REGISTRY=https://mirrors.cloud.tencent.com/npm/ ./scripts/package-docker-deploy.sh v1.0.0
|
||||
# 或
|
||||
NPM_REGISTRY=https://repo.huaweicloud.com/repository/npm/ ./scripts/package-docker-deploy.sh v1.0.0
|
||||
```
|
||||
- **在 Mac(M 芯片)上交叉构建 `linux/amd64` 很慢**(后端 pip 常见 15~40 分钟),日志会长时间不动,**不要误按 Ctrl+C**。
|
||||
- **推荐**:把仓库放到 **Linux x86 云主机**(与甲方同架构),在该机器执行 `./scripts/package-docker-deploy.sh`,通常 5~15 分钟完成。
|
||||
- 安装 pnpm 失败时 Dockerfile 会自动回退为 tarball 直装;`pnpm install` 出现 ETIMEDOUT 时会重试,日志可能长时间不动,**不要误按 Ctrl+C**。
|
||||
- **在 Mac(M 芯片)上交叉构建 `linux/amd64` 很慢**(后端 pip 常见 15~40 分钟);**Intel Linux 同架构构建**通常 5~15 分钟,推荐在发版机上直接执行 `./scripts/package-docker-deploy.sh v1.0.0`(无需设 `NPM_REGISTRY`)。
|
||||
|
||||
默认已使用阿里云 PyPI(`mirrors.aliyun.com`)。若需改用清华源:
|
||||
|
||||
|
||||
@@ -5,18 +5,35 @@ ARG NGINX_IMAGE=docker.m.daocloud.io/library/nginx:1.27-alpine
|
||||
FROM ${NODE_IMAGE} AS builder
|
||||
|
||||
ARG NPM_REGISTRY=https://registry.npmmirror.com
|
||||
ARG PNPM_VERSION=9.15.4
|
||||
ARG NODE_MAX_OLD_SPACE_SIZE=4096
|
||||
# corepack 默认走 registry.npmjs.org,国内/受限网络会失败;须显式指定镜像
|
||||
ENV COREPACK_NPM_REGISTRY=${NPM_REGISTRY}
|
||||
ENV NODE_OPTIONS="--max-old-space-size=${NODE_MAX_OLD_SPACE_SIZE}"
|
||||
ENV NODE_ENV=production
|
||||
# 构建阶段须安装 devDependencies(vite 等);勿设 NODE_ENV=production
|
||||
ENV HUSKY=0
|
||||
|
||||
RUN corepack enable && corepack prepare pnpm@9.15.4 --activate
|
||||
# 国内机器勿用 registry.npmjs.org;先走镜像元数据,失败再直装 tarball
|
||||
RUN set -eux; \
|
||||
npm config set registry "${NPM_REGISTRY}"; \
|
||||
npm config set fetch-retries 5; \
|
||||
npm config set fetch-retry-mintimeout 60000; \
|
||||
npm config set fetch-retry-maxtimeout 600000; \
|
||||
npm config set fetch-timeout 600000; \
|
||||
if ! npm install -g "pnpm@${PNPM_VERSION}"; then \
|
||||
echo "npm 元数据安装 pnpm 失败,尝试 tarball: ${NPM_REGISTRY}/pnpm/-/pnpm-${PNPM_VERSION}.tgz"; \
|
||||
npm install -g "${NPM_REGISTRY}/pnpm/-/pnpm-${PNPM_VERSION}.tgz"; \
|
||||
fi; \
|
||||
pnpm --version
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY web-admin/package.json web-admin/pnpm-lock.yaml ./
|
||||
RUN pnpm config set registry "${NPM_REGISTRY}" \
|
||||
# BuildKit 缓存 pnpm store;提高 fetch 重试与超时,缓解 npmmirror ETIMEDOUT
|
||||
RUN --mount=type=cache,id=zkxw-pnpm-store,target=/root/.local/share/pnpm/store \
|
||||
pnpm config set registry "${NPM_REGISTRY}" \
|
||||
&& pnpm config set fetch-retries 5 \
|
||||
&& pnpm config set fetch-retry-mintimeout 60000 \
|
||||
&& pnpm config set fetch-retry-maxtimeout 600000 \
|
||||
&& pnpm config set network-timeout 600000 \
|
||||
&& pnpm install --frozen-lockfile
|
||||
|
||||
COPY web-admin/ .
|
||||
|
||||
@@ -38,6 +38,8 @@ if [[ "$(uname -s)" == "Darwin" && "$(uname -m)" == "arm64" && "${PLATFORM}" ==
|
||||
echo " 更快方式: 在 Linux x86 云主机上执行同一打包脚本"
|
||||
echo " 前端 vite build 建议 Docker Desktop 内存 ≥ 4GB"
|
||||
echo " (Settings → Resources → Memory;仍 OOM 可加大 NODE_MAX_OLD_SPACE_SIZE)"
|
||||
echo " pnpm install 出现 ETIMEDOUT 时会自动重试,336/340 后仍可能再等数分钟"
|
||||
echo " 请勿 Ctrl+C;更快方式见 deploy/docker/README.md §11 发版方打包"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
fi
|
||||
@@ -54,7 +56,11 @@ NODE_MAX_OLD_SPACE_SIZE="${NODE_MAX_OLD_SPACE_SIZE:-4096}"
|
||||
|
||||
echo "==> 构建前端镜像: ${WEB_IMAGE} (${PLATFORM})"
|
||||
echo " 基础镜像: ${NODE_IMAGE} / ${NGINX_IMAGE}"
|
||||
echo " npm/pnpm 镜像: ${NPM_REGISTRY}"
|
||||
echo " Node 堆上限: ${NODE_MAX_OLD_SPACE_SIZE}MB"
|
||||
if [[ "${NPM_REGISTRY}" == *"registry.npmjs.org"* ]]; then
|
||||
echo " 警告: 国内网络访问 registry.npmjs.org 常 ETIMEDOUT,建议去掉 NPM_REGISTRY 用默认 npmmirror"
|
||||
fi
|
||||
docker build "${BUILD_ARGS[@]}" \
|
||||
--build-arg "NODE_IMAGE=${NODE_IMAGE}" \
|
||||
--build-arg "NGINX_IMAGE=${NGINX_IMAGE}" \
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -525,145 +525,159 @@
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L1"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_mapremoteslotselectoption",
|
||||
"label": "mapRemoteSlotSelectOption()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L21"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_isstorageslotselectoptiondisabled",
|
||||
"label": "isStorageSlotSelectOptionDisabled()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L35"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_getlaststorageslotsearchquery",
|
||||
"label": "getLastStorageSlotSearchQuery()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L26"
|
||||
"source_location": "L54"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_remotesearchstorageslotselectoptions",
|
||||
"label": "remoteSearchStorageSlotSelectOptions()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L30"
|
||||
"source_location": "L58"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_getstoragefacilityordernum",
|
||||
"label": "getStorageFacilityOrderNum()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L60"
|
||||
"source_location": "L90"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_getstorageslotordernum",
|
||||
"label": "getStorageSlotOrderNum()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L66"
|
||||
"source_location": "L96"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_decodeslotlayoutorder",
|
||||
"label": "decodeSlotLayoutOrder()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L75"
|
||||
"source_location": "L105"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_parselegacyrowcolslotcode",
|
||||
"label": "parseLegacyRowColSlotCode()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L84"
|
||||
"source_location": "L114"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_parsestorageslotcode",
|
||||
"label": "parseStorageSlotCode()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L91"
|
||||
"source_location": "L121"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_buildnodecodepathfromflat",
|
||||
"label": "buildNodeCodePathFromFlat()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L98"
|
||||
"source_location": "L128"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_buildfullslotcodefromflat",
|
||||
"label": "buildFullSlotCodeFromFlat()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L122"
|
||||
"source_location": "L152"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_comparestoragefacilityslots",
|
||||
"label": "compareStorageFacilitySlots()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L134"
|
||||
"source_location": "L164"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_sortstoragefacilityslots",
|
||||
"label": "sortStorageFacilitySlots()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L162"
|
||||
"source_location": "L192"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_isstorageslotavailable",
|
||||
"label": "isStorageSlotAvailable()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L166"
|
||||
"source_location": "L196"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_collectleaffacilitynodesintreeorder",
|
||||
"label": "collectLeafFacilityNodesInTreeOrder()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L175"
|
||||
"source_location": "L205"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_mapslotstoselectoptions",
|
||||
"label": "mapSlotsToSelectOptions()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L227"
|
||||
"source_location": "L257"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_loadstorageslotselectoptions",
|
||||
"label": "loadStorageSlotSelectOptions()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L255"
|
||||
"source_location": "L285"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_ensurestorageslotsinoptions",
|
||||
"label": "ensureStorageSlotsInOptions()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L293"
|
||||
"source_location": "L323"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_filterstorageslotselectoptions",
|
||||
"label": "filterStorageSlotSelectOptions()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L312"
|
||||
"source_location": "L343"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_validateuniquestorageslotids",
|
||||
"label": "validateUniqueStorageSlotIds()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L326"
|
||||
"source_location": "L357"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_isoutputmissingstorageslot",
|
||||
"label": "isOutputMissingStorageSlot()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L347"
|
||||
"source_location": "L378"
|
||||
},
|
||||
{
|
||||
"id": "utils_storage_slot_options_countoutputsmissingstorageslot",
|
||||
"label": "countOutputsMissingStorageSlot()",
|
||||
"file_type": "code",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L355"
|
||||
"source_location": "L386"
|
||||
},
|
||||
{
|
||||
"id": "utils_production_work_order_tabs_ts",
|
||||
@@ -15657,14 +15671,14 @@
|
||||
"label": "ensureCurrentUserInOptions()",
|
||||
"file_type": "code",
|
||||
"source_file": "views/quality-inspection/sample-reception/index.vue",
|
||||
"source_location": "L1211"
|
||||
"source_location": "L1229"
|
||||
},
|
||||
{
|
||||
"id": "sample_reception_index_if",
|
||||
"label": "if()",
|
||||
"file_type": "code",
|
||||
"source_file": "views/quality-inspection/sample-reception/index.vue",
|
||||
"source_location": "L1469"
|
||||
"source_location": "L1487"
|
||||
},
|
||||
{
|
||||
"id": "views_quality_inspection_sample_reception_samplereceptioncardlist_vue",
|
||||
@@ -20157,13 +20171,31 @@
|
||||
"source_location": "L5",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "utils_storage_slot_options_ts",
|
||||
"target": "utils_storage_slot_options_mapremoteslotselectoption",
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L21",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "utils_storage_slot_options_ts",
|
||||
"target": "utils_storage_slot_options_isstorageslotselectoptiondisabled",
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L35",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"source": "utils_storage_slot_options_ts",
|
||||
"target": "utils_storage_slot_options_getlaststorageslotsearchquery",
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L26",
|
||||
"source_location": "L54",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20172,7 +20204,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L30",
|
||||
"source_location": "L58",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20181,7 +20213,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L60",
|
||||
"source_location": "L90",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20190,7 +20222,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L66",
|
||||
"source_location": "L96",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20199,7 +20231,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L75",
|
||||
"source_location": "L105",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20208,7 +20240,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L84",
|
||||
"source_location": "L114",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20217,7 +20249,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L91",
|
||||
"source_location": "L121",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20226,7 +20258,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L98",
|
||||
"source_location": "L128",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20235,7 +20267,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L122",
|
||||
"source_location": "L152",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20244,7 +20276,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L134",
|
||||
"source_location": "L164",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20253,7 +20285,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L162",
|
||||
"source_location": "L192",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20262,7 +20294,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L166",
|
||||
"source_location": "L196",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20271,7 +20303,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L175",
|
||||
"source_location": "L205",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20280,7 +20312,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L227",
|
||||
"source_location": "L257",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20289,7 +20321,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L255",
|
||||
"source_location": "L285",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20298,7 +20330,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L293",
|
||||
"source_location": "L323",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20307,7 +20339,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L312",
|
||||
"source_location": "L343",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20316,7 +20348,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L326",
|
||||
"source_location": "L357",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20325,7 +20357,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L347",
|
||||
"source_location": "L378",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20334,7 +20366,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L355",
|
||||
"source_location": "L386",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20343,7 +20375,7 @@
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L92",
|
||||
"source_location": "L122",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20352,7 +20384,7 @@
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L127",
|
||||
"source_location": "L157",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20361,7 +20393,7 @@
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L138",
|
||||
"source_location": "L168",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20370,7 +20402,7 @@
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L143",
|
||||
"source_location": "L173",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20379,7 +20411,7 @@
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L150",
|
||||
"source_location": "L180",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20388,7 +20420,7 @@
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L237",
|
||||
"source_location": "L267",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -20397,7 +20429,7 @@
|
||||
"relation": "calls",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L263",
|
||||
"source_location": "L293",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -46677,7 +46709,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "views/quality-inspection/sample-reception/index.vue",
|
||||
"source_location": "L1211",
|
||||
"source_location": "L1229",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -46686,7 +46718,7 @@
|
||||
"relation": "contains",
|
||||
"confidence": "EXTRACTED",
|
||||
"source_file": "views/quality-inspection/sample-reception/index.vue",
|
||||
"source_location": "L1469",
|
||||
"source_location": "L1487",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -53547,7 +53579,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L42",
|
||||
"source_location": "L72",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -53557,7 +53589,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L105",
|
||||
"source_location": "L135",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -53567,7 +53599,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L111",
|
||||
"source_location": "L141",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -53577,7 +53609,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L112",
|
||||
"source_location": "L142",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -53587,7 +53619,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L184",
|
||||
"source_location": "L214",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -53597,7 +53629,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L188",
|
||||
"source_location": "L218",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -53607,7 +53639,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L192",
|
||||
"source_location": "L222",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -53617,7 +53649,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L223",
|
||||
"source_location": "L253",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -53627,7 +53659,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L234",
|
||||
"source_location": "L264",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -53637,7 +53669,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L302",
|
||||
"source_location": "L332",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
@@ -53647,7 +53679,7 @@
|
||||
"confidence": "INFERRED",
|
||||
"confidence_score": 0.8,
|
||||
"source_file": "utils/storage-slot-options.ts",
|
||||
"source_location": "L335",
|
||||
"source_location": "L366",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Graph Report - src (2026-06-29)
|
||||
# Graph Report - src (2026-06-30)
|
||||
|
||||
## Corpus Check
|
||||
- Large corpus: 825 files · ~547,785 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
|
||||
- Large corpus: 825 files · ~547,954 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
|
||||
|
||||
## Summary
|
||||
- 2698 nodes · 3714 edges · 55 communities detected
|
||||
- 2700 nodes · 3716 edges · 54 communities detected
|
||||
- Extraction: 78% EXTRACTED · 22% INFERRED · 0% AMBIGUOUS · INFERRED: 821 edges (avg confidence: 0.8)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
@@ -44,26 +44,25 @@
|
||||
- [[_COMMUNITY_Community 32|Community 32]]
|
||||
- [[_COMMUNITY_Community 33|Community 33]]
|
||||
- [[_COMMUNITY_Community 34|Community 34]]
|
||||
- [[_COMMUNITY_Community 35|Community 35]]
|
||||
- [[_COMMUNITY_Community 36|Community 36]]
|
||||
- [[_COMMUNITY_Community 37|Community 37]]
|
||||
- [[_COMMUNITY_Community 38|Community 38]]
|
||||
- [[_COMMUNITY_Community 39|Community 39]]
|
||||
- [[_COMMUNITY_Community 40|Community 40]]
|
||||
- [[_COMMUNITY_Community 41|Community 41]]
|
||||
- [[_COMMUNITY_Community 43|Community 43]]
|
||||
- [[_COMMUNITY_Community 45|Community 45]]
|
||||
- [[_COMMUNITY_Community 46|Community 46]]
|
||||
- [[_COMMUNITY_Community 47|Community 47]]
|
||||
- [[_COMMUNITY_Community 48|Community 48]]
|
||||
- [[_COMMUNITY_Community 49|Community 49]]
|
||||
- [[_COMMUNITY_Community 50|Community 50]]
|
||||
- [[_COMMUNITY_Community 51|Community 51]]
|
||||
- [[_COMMUNITY_Community 52|Community 52]]
|
||||
- [[_COMMUNITY_Community 53|Community 53]]
|
||||
- [[_COMMUNITY_Community 55|Community 55]]
|
||||
- [[_COMMUNITY_Community 57|Community 57]]
|
||||
- [[_COMMUNITY_Community 62|Community 62]]
|
||||
- [[_COMMUNITY_Community 64|Community 64]]
|
||||
- [[_COMMUNITY_Community 71|Community 71]]
|
||||
- [[_COMMUNITY_Community 73|Community 73]]
|
||||
- [[_COMMUNITY_Community 54|Community 54]]
|
||||
- [[_COMMUNITY_Community 56|Community 56]]
|
||||
- [[_COMMUNITY_Community 61|Community 61]]
|
||||
- [[_COMMUNITY_Community 63|Community 63]]
|
||||
- [[_COMMUNITY_Community 70|Community 70]]
|
||||
- [[_COMMUNITY_Community 72|Community 72]]
|
||||
|
||||
## God Nodes (most connected - your core abstractions)
|
||||
1. `get()` - 280 edges
|
||||
@@ -82,78 +81,78 @@
|
||||
utils/production-work-order-card-meta.ts → views/operations/storage-facility/index.vue
|
||||
- `resolveBatchSectionTasks()` --calls--> `set()` [INFERRED]
|
||||
utils/qc-inspection-batch.ts → views/production/process/ProcessRouteTab.vue
|
||||
- `formatAmount()` --calls--> `formatMoneyDisplay()` [INFERRED]
|
||||
views/pilot-service/clinical-payment-confirm/index.vue → utils/money-format.ts
|
||||
- `subscribeTokenRefresh()` --calls--> `push()` [INFERRED]
|
||||
utils/http/index.ts → views/operations/storage-facility/index.vue
|
||||
- `handleUnauthorizedResponse()` --calls--> `fetchRefreshToken()` [INFERRED]
|
||||
utils/http/index.ts → api/auth.ts
|
||||
- `fetchConsumableList()` --calls--> `get()` [INFERRED]
|
||||
api/production.ts → views/production/process/ProcessRouteTab.vue
|
||||
- `fetchStorageReleaseReviewList()` --calls--> `get()` [INFERRED]
|
||||
api/storage-release-review.ts → views/production/process/ProcessRouteTab.vue
|
||||
|
||||
## Communities
|
||||
|
||||
### Community 0 - "Community 0"
|
||||
Cohesion: 0.01
|
||||
Nodes (153): fetchAccessLogList(), fetchActiveRegions(), fetchCategoryList(), fetchCategoryParameters(), fetchCellProductPriceList(), fetchCellProductSpecList(), fetchCellProductTypeList(), fetchChannelAccount() (+145 more)
|
||||
Nodes (185): fetchAccessLogList(), fetchActiveRegions(), fetchCategoryList(), fetchCategoryParameters(), fetchCellProductPriceList(), fetchCellProductTypeList(), fetchChannelAccount(), fetchChannelAgreementPrices() (+177 more)
|
||||
|
||||
### Community 1 - "Community 1"
|
||||
Cohesion: 0.03
|
||||
Nodes (85): fetchUploadAttachment(), handleReportUpload(), handleReportUpload(), walk(), buildTemporaryViewSections(), async(), for(), set() (+77 more)
|
||||
Cohesion: 0.01
|
||||
Nodes (26): deletePilotCheckupActualItem(), fetchCreateCheckupInstitution(), fetchCreateCheckupInstitutionInvoice(), fetchDeleteProjectSystemItem(), fetchDeptTree(), fetchGetRoleList(), fetchNotDeletedRegions(), fetchPostBoundUserIds() (+18 more)
|
||||
|
||||
### Community 2 - "Community 2"
|
||||
Cohesion: 0.02
|
||||
Nodes (47): handleBlur(), handleFocus(), handleInput(), fetchQcMaterialBatchList(), fetchQcMaterialBatchOptions(), fetchQcMaterialList(), fetchQcMaterialOptions(), fetchUpdateQcMaterialBatch() (+39 more)
|
||||
Nodes (72): fetchCheckupInstitutionInvoices(), fetchCheckupInstitutionList(), fetchCheckupInstitutionProjects(), fetchCreateCheckupInstitutionProject(), fetchUpdateCheckupInstitutionProject(), submitOutboundReleaseReview(), fetchConsumablePackDetail(), fetchConsumablePackList() (+64 more)
|
||||
|
||||
### Community 3 - "Community 3"
|
||||
Cohesion: 0.03
|
||||
Nodes (85): batchSavePilotCheckup(), deletePilotCheckupActualItem(), fetchCheckupInstitutionPackageDetail(), fetchCheckupInstitutionPackages(), fetchPilotCheckupActualItems(), fetchPilotCheckupDetail(), fetchPilotCheckupReserveItems(), markPilotCheckupChecked() (+77 more)
|
||||
Nodes (85): fetchCellProductSpecList(), fetchUploadAttachment(), handleReportUpload(), handleReportUpload(), walk(), buildTemporaryViewSections(), async(), for() (+77 more)
|
||||
|
||||
### Community 4 - "Community 4"
|
||||
Cohesion: 0.02
|
||||
Nodes (42): fetchAllConsumablePacks(), fetchAllConsumables(), fetchAllConsumableStockLogs(), fetchAllEquipments(), fetchAllOutputTypes(), fetchAllProcessCategories(), fetchAllProcesses(), fetchAllReagents() (+34 more)
|
||||
Nodes (45): handleBlur(), handleFocus(), handleInput(), fetchQcMaterialBatchList(), fetchQcMaterialBatchOptions(), fetchQcMaterialList(), fetchQcMaterialOptions(), fetchUpdateQcMaterialBatch() (+37 more)
|
||||
|
||||
### Community 5 - "Community 5"
|
||||
Cohesion: 0.03
|
||||
Nodes (63): fetchFullmoonTodoList(), fetchUpdateFullmoonTodoInsurance(), fetchAttachmentDownloadUrl(), fetchCollectionProtocolAuditList(), fetchCollectionProtocolDetail(), fetchCollectionProtocolList(), fetchCreateProtocolInvoiceRequest(), fetchInvoiceEligiblePayments() (+55 more)
|
||||
Nodes (33): fetchGetMenuList(), ComponentLoader, IframeRouteManager, MenuProcessor, RouteRegistry, RouteTransformer, useAppMode(), useAuth() (+25 more)
|
||||
|
||||
### Community 6 - "Community 6"
|
||||
Cohesion: 0.03
|
||||
Nodes (33): fetchGetMenuList(), ComponentLoader, IframeRouteManager, MenuProcessor, RouteRegistry, RouteTransformer, useAppMode(), useAuth() (+25 more)
|
||||
Nodes (58): fetchMyProductionTasks(), fetchMyQcTaskList(), fetchQcTaskDetail(), fetchQcTaskList(), shouldApplyTriggerSourceFilter(), buildMineTableRows(), buildPresetTasksMap(), buildWorkOrderFromTasks() (+50 more)
|
||||
|
||||
### Community 7 - "Community 7"
|
||||
Cohesion: 0.03
|
||||
Nodes (52): fetchCheckupInstitutionInvoices(), fetchCheckupInstitutionList(), fetchCheckupInstitutionProjects(), fetchCreateCheckupInstitution(), fetchCreateCheckupInstitutionInvoice(), fetchCreateCheckupInstitutionProject(), fetchUpdateCheckupInstitution(), fetchUpdateCheckupInstitutionInvoice() (+44 more)
|
||||
Cohesion: 0.04
|
||||
Nodes (66): batchSavePilotCheckup(), fetchCheckupInstitutionPackageDetail(), fetchCheckupInstitutionPackages(), fetchPilotCheckupActualItems(), fetchPilotCheckupDetail(), fetchPilotCheckupReserveItems(), savePilotCheckupReserveItems(), actualItemExists() (+58 more)
|
||||
|
||||
### Community 8 - "Community 8"
|
||||
Cohesion: 0.04
|
||||
Nodes (51): fetchMyProductionTasks(), fetchMyQcTaskList(), fetchQcTaskDetail(), fetchQcTaskList(), shouldApplyTriggerSourceFilter(), buildMineTableRows(), buildPresetTasksMap(), buildWorkOrderFromTasks() (+43 more)
|
||||
Nodes (44): fetchFullmoonTodoList(), fetchUpdateFullmoonTodoInsurance(), fetchCollectionProtocolAuditList(), fetchCollectionProtocolDetail(), fetchCollectionProtocolList(), fetchCreateProtocolInvoiceRequest(), fetchInvoiceEligiblePayments(), fetchPaymentDetailList() (+36 more)
|
||||
|
||||
### Community 9 - "Community 9"
|
||||
Cohesion: 0.04
|
||||
Nodes (38): useSettingsHandlers(), useSettingsPanel(), useSettingsState(), RoutePermissionValidator, useCeremony(), useTheme(), if(), collectAllPostBindDeptIds() (+30 more)
|
||||
Cohesion: 0.05
|
||||
Nodes (38): fetchRoleOptions(), collectIds(), buildInboundBasicSection(), buildInboundCellStorageViewSections(), buildInboundResearchDonationViewSections(), buildReceptionSection(), buildTransportSection(), buildBaseFields() (+30 more)
|
||||
|
||||
### Community 10 - "Community 10"
|
||||
Cohesion: 0.05
|
||||
Nodes (37): fetchRoleOptions(), collectIds(), buildInboundBasicSection(), buildInboundCellStorageViewSections(), buildInboundResearchDonationViewSections(), buildReceptionSection(), buildTransportSection(), buildBaseFields() (+29 more)
|
||||
Cohesion: 0.04
|
||||
Nodes (37): fetchStorageSlotSelectOptions(), useSettingsHandlers(), useSettingsPanel(), useSettingsState(), RoutePermissionValidator, useCeremony(), useTheme(), if() (+29 more)
|
||||
|
||||
### Community 11 - "Community 11"
|
||||
Cohesion: 0.05
|
||||
Nodes (34): fetchClinicalPaymentDetail(), fetchClinicalPayments(), fetchClinicalReceiptConfirmed(), fetchClinicalReceiptPending(), fetchClinicalRefundConfirmed(), fetchClinicalRefundPending(), fetchOrderAdjusts(), fetchOrderDetail() (+26 more)
|
||||
Cohesion: 0.04
|
||||
Nodes (35): fetchClinicalPaymentDetail(), fetchClinicalPayments(), fetchClinicalReceiptConfirmed(), fetchClinicalReceiptPending(), fetchClinicalRefundConfirmed(), fetchClinicalRefundPending(), fetchOrderAdjusts(), fetchOrderDetail() (+27 more)
|
||||
|
||||
### Community 12 - "Community 12"
|
||||
Cohesion: 0.05
|
||||
Nodes (32): fetchEthnicList(), applyDonationBundleToForm(), createEmptyTransport(), ensureEthnicOptionInList(), handleOpenForAdd(), loadEthnicOptions(), normalizeSampleRow(), resetForm() (+24 more)
|
||||
Cohesion: 0.04
|
||||
Nodes (34): fetchEthnicList(), applyDonationBundleToForm(), createEmptyTransport(), ensureEthnicOptionInList(), handleOpenForAdd(), loadEthnicOptions(), normalizeSampleRow(), resetForm() (+26 more)
|
||||
|
||||
### Community 13 - "Community 13"
|
||||
Cohesion: 0.06
|
||||
Nodes (11): fetchGetLatestUpgradeLog(), getDefaultLanguage(), checkStorageCompatibility(), StorageConfig, getSystemStorage(), getSysVersion(), StorageKeyManager, StorageCompatibilityManager (+3 more)
|
||||
Nodes (10): getDefaultLanguage(), checkStorageCompatibility(), StorageConfig, getSystemStorage(), getSysVersion(), StorageKeyManager, StorageCompatibilityManager, validateStorageData() (+2 more)
|
||||
|
||||
### Community 14 - "Community 14"
|
||||
Cohesion: 0.06
|
||||
Nodes (37): fetchUserList(), fetchAddTaskStep(), fetchCopyTaskStep(), fetchDeleteTaskStep(), fetchDispatchProductionTaskSteps(), fetchForwardProductionTask(), fetchProductionTaskDetail(), fetchProductionTaskEditorInit() (+29 more)
|
||||
Cohesion: 0.05
|
||||
Nodes (26): fetchUserList(), fetchProductionReceptionBySampleCode(), fetchProductionReceptionSubmit(), fetchProductionReceptionUpdate(), formatHandoverUserLabel(), formatNowDatetime(), fullFileUrl(), handlePreviewAttachment() (+18 more)
|
||||
|
||||
### Community 15 - "Community 15"
|
||||
Cohesion: 0.04
|
||||
Nodes (21): fetchAvailableMaterialBatches(), fetchMyProductionMaterialConsumptions(), fetchMyProductionMaterialUsageList(), fetchProductionMaterialBatchList(), fetchProductionMaterialBatchOptions(), fetchProductionMaterialConsumptions(), fetchProductionMaterialFormula(), fetchProductionMaterialLinkedStepUsages() (+13 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (29): fetchInfusionScheduleMgmtDetail(), fetchAttachmentDownloadUrl(), qcAttachmentFullUrl(), qcDownloadAttachment(), qcPreviewAttachment(), handleDownloadAttachment(), attachmentFullUrl(), handleAttachmentDownload() (+21 more)
|
||||
|
||||
### Community 16 - "Community 16"
|
||||
Cohesion: 0.1
|
||||
@@ -161,7 +160,7 @@ Nodes (2): WebSocketClient, TableCache
|
||||
|
||||
### Community 17 - "Community 17"
|
||||
Cohesion: 0.08
|
||||
Nodes (32): toLogin(), base64ToBytes(), bytesToBase64(), decryptJson(), deriveKey(), encryptJson(), fromBase64Url(), hexToBytes() (+24 more)
|
||||
Nodes (33): fetchRefreshToken(), toLogin(), base64ToBytes(), bytesToBase64(), decryptJson(), deriveKey(), encryptJson(), fromBase64Url() (+25 more)
|
||||
|
||||
### Community 18 - "Community 18"
|
||||
Cohesion: 0.07
|
||||
@@ -172,29 +171,29 @@ Cohesion: 0.09
|
||||
Nodes (27): fetchCreateCustomer(), fetchCustomerList(), fetchDeleteCustomer(), fetchUpdateCustomer(), updateInfusionScheduleStatus(), handleAdd(), handleDelete(), handleDropdownCommand() (+19 more)
|
||||
|
||||
### Community 20 - "Community 20"
|
||||
Cohesion: 0.08
|
||||
Nodes (18): fetchProductionReceptionBySampleCode(), fetchProductionReceptionSubmit(), fetchProductionReceptionUpdate(), onUserSelectVisible(), remoteSearchUsers(), buildPayload(), ensureDefaultHandler(), initDialog() (+10 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (18): fetchDictDataOptions(), fetchDeleteMaterialBatch(), fetchMaterialBatchList(), fetchMaterialBatchOptions(), fetchMaterialList(), fetchMaterialOptions(), fetchUpdateMaterialBatch(), fetchMaterialUsageList() (+10 more)
|
||||
|
||||
### Community 21 - "Community 21"
|
||||
Cohesion: 0.09
|
||||
Nodes (27): completePilotApplication(), deletePilotApplication(), fetchPilotApplicationList(), startPilotApplication(), voidPilotApplication(), handleBatchComplete(), handleBatchStart(), handleBatchVoid() (+19 more)
|
||||
Nodes (29): fetchAddTaskStep(), fetchCopyTaskStep(), fetchDeleteTaskStep(), fetchDispatchProductionTaskSteps(), fetchForwardProductionTask(), fetchProductionTaskDetail(), fetchProductionTaskEditorInit(), fetchProductionTaskList() (+21 more)
|
||||
|
||||
### Community 22 - "Community 22"
|
||||
Cohesion: 0.07
|
||||
Nodes (16): fetchDeleteMaterialBatch(), fetchMaterialBatchList(), fetchMaterialBatchOptions(), fetchMaterialList(), fetchMaterialOptions(), fetchUpdateMaterialBatch(), fetchMaterialUsageList(), fetchMyMaterialUsageList() (+8 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (27): completePilotApplication(), deletePilotApplication(), fetchPilotApplicationList(), startPilotApplication(), voidPilotApplication(), handleBatchComplete(), handleBatchStart(), handleBatchVoid() (+19 more)
|
||||
|
||||
### Community 23 - "Community 23"
|
||||
Cohesion: 0.11
|
||||
Nodes (21): fetchGetMenuCodes(), fetchGetUserInfo(), fetchLogin(), fetchRefreshToken(), fetchUpdateProfile(), fetchUploadProfileAvatar(), fetchUserInfo(), buildWebEncryptedLoginBody() (+13 more)
|
||||
Cohesion: 0.12
|
||||
Nodes (20): fetchGetMenuCodes(), fetchGetUserInfo(), fetchLogin(), fetchUpdateProfile(), fetchUploadProfileAvatar(), fetchUserInfo(), buildWebEncryptedLoginBody(), defaultAvatarPathByRole() (+12 more)
|
||||
|
||||
### Community 24 - "Community 24"
|
||||
Cohesion: 0.09
|
||||
Nodes (11): fetchMineQcWorkOrderTabUnfinishedCounts(), fetchOutboundQcDetail(), fetchQcWorkOrderDetail(), fetchQcWorkOrderList(), fetchQcWorkOrderTabUnfinishedCounts(), reload(), reloadTabCounts(), handleMenuJump() (+3 more)
|
||||
|
||||
### Community 25 - "Community 25"
|
||||
Cohesion: 0.13
|
||||
Nodes (19): fetchCreateMenu(), fetchDeleteMenu(), fetchMenuTree(), fetchUpdateMenu(), postorder(), preorder(), applyTreeExpand(), handleAdd() (+11 more)
|
||||
|
||||
### Community 25 - "Community 25"
|
||||
Cohesion: 0.09
|
||||
Nodes (11): fetchMineQcWorkOrderTabUnfinishedCounts(), fetchOutboundQcDetail(), fetchQcWorkOrderDetail(), fetchQcWorkOrderList(), fetchQcWorkOrderTabUnfinishedCounts(), reload(), reloadTabCounts(), handleMenuJump() (+3 more)
|
||||
|
||||
### Community 26 - "Community 26"
|
||||
Cohesion: 0.12
|
||||
Nodes (15): addCopyButton(), highlightCode(), insertLineNumbers(), isBlockProcessed(), markBlockAsProcessed(), processBlock(), setupHighlightDirective(), setupRippleDirective() (+7 more)
|
||||
@@ -204,150 +203,146 @@ Cohesion: 0.11
|
||||
Nodes (10): fetchMineProductionWorkOrderTabStepCounts(), fetchMineProductionWorkOrderTabStepCountsDeduped(), fetchProductionWorkOrderCellProductOptions(), fetchProductionWorkOrderDetail(), fetchProductionWorkOrderList(), fetchProductionWorkOrderQcDispatchOptions(), fetchProductionWorkOrderTabStepCounts(), fetchProductionWorkOrderTabStepCountsDeduped() (+2 more)
|
||||
|
||||
### Community 28 - "Community 28"
|
||||
Cohesion: 0.11
|
||||
Nodes (11): fetchOutboundReleaseMaterial(), fetchOutboundReleaseReviewDetail(), fetchOutboundReleaseReviewList(), fetchReleaseReviewList(), handleReset(), handleSearch(), handleToggleSelect(), loadData() (+3 more)
|
||||
|
||||
### Community 29 - "Community 29"
|
||||
Cohesion: 0.13
|
||||
Nodes (18): fetchCellSampleTypeList(), fetchCreateCellSampleType(), fetchDeleteCellSampleType(), fetchUpdateCellSampleType(), handleAdd(), handleDelete(), handleDropdownCommand(), handleEdit() (+10 more)
|
||||
|
||||
### Community 30 - "Community 30"
|
||||
### Community 29 - "Community 29"
|
||||
Cohesion: 0.11
|
||||
Nodes (6): normalizeStepSubTables(), formatPlannedStartDate(), normalizePlannedStartDate(), productionStepAssigneeLabels(), productionStepAssigneeText(), productionStepPlannedStartText()
|
||||
|
||||
### Community 31 - "Community 31"
|
||||
### Community 30 - "Community 30"
|
||||
Cohesion: 0.16
|
||||
Nodes (14): fetchCreateEnvDetectItem(), fetchDeleteEnvDetectItem(), fetchEnvDetectItemDetail(), fetchEnvDetectItemList(), fetchEnvDetectItemsActive(), fetchUpdateEnvDetectItem(), handleAdd(), handleBatchDelete() (+6 more)
|
||||
|
||||
### Community 32 - "Community 32"
|
||||
### Community 31 - "Community 31"
|
||||
Cohesion: 0.16
|
||||
Nodes (10): useTable(), useTableImpl(), getColumnChecks(), useTableColumns(), createErrorHandler(), createSmartDebounce(), defaultResponseAdapter(), extractPagination() (+2 more)
|
||||
|
||||
### Community 33 - "Community 33"
|
||||
### Community 32 - "Community 32"
|
||||
Cohesion: 0.27
|
||||
Nodes (14): useChart(), useChartComponent(), useChartOps(), colourBlend(), getCssVar(), getDarkColor(), getLightColor(), handleElementThemeColor() (+6 more)
|
||||
|
||||
### Community 34 - "Community 34"
|
||||
### Community 33 - "Community 33"
|
||||
Cohesion: 0.33
|
||||
Nodes (13): buildProtocolPaymentFlowSteps(), dash(), financeReceiptTime(), formatAmount(), hasFinanceReceipt(), hasFinanceRefund(), hasReceiptSubmit(), hasRefundSubmit() (+5 more)
|
||||
|
||||
### Community 35 - "Community 35"
|
||||
### Community 34 - "Community 34"
|
||||
Cohesion: 0.19
|
||||
Nodes (6): fetchServiceOrderTxnList(), handleReset(), handleSearch(), handleTabChange(), loadData(), switchTab()
|
||||
|
||||
### Community 36 - "Community 36"
|
||||
Cohesion: 0.21
|
||||
Nodes (7): handleReset(), handleSearch(), handleToggleSelect(), loadData(), onReviewSubmitted(), rowId(), isSelected()
|
||||
|
||||
### Community 37 - "Community 37"
|
||||
Cohesion: 0.24
|
||||
Nodes (8): fullFileUrl(), handlePreviewAttachment(), isVideoFile(), normalizeDisplayValue(), resolveReviewCellType(), resolveReviewQuantity(), resolveReviewSpecText(), uniqueJoined()
|
||||
|
||||
### Community 38 - "Community 38"
|
||||
Cohesion: 0.23
|
||||
Nodes (7): buildInboundMetaFields(), getCardMetaConfig(), getCardMetaConfigForLegacyTab(), parseReceptionTime(), receptionOver24HoursLabel(), receptionOver24HoursTagType(), resolveCardMetaForRow()
|
||||
|
||||
### Community 39 - "Community 39"
|
||||
Cohesion: 0.42
|
||||
Nodes (9): buildPaymentFlowSteps(), dash(), formatAmount(), hasFinanceReceipt(), hasFinanceRefund(), hasReceiptSubmit(), hasRefundSubmit(), receiptSubmitTime() (+1 more)
|
||||
|
||||
### Community 40 - "Community 40"
|
||||
### Community 38 - "Community 38"
|
||||
Cohesion: 0.25
|
||||
Nodes (2): handleTouchEnd(), setTransition()
|
||||
|
||||
### Community 41 - "Community 41"
|
||||
### Community 39 - "Community 39"
|
||||
Cohesion: 0.28
|
||||
Nodes (1): FireworkSystem
|
||||
|
||||
### Community 43 - "Community 43"
|
||||
### Community 41 - "Community 41"
|
||||
Cohesion: 0.31
|
||||
Nodes (4): annotateForkEdges(), chainApiToElements(), walkAncestorBranch(), walkAncestorParents()
|
||||
|
||||
### Community 46 - "Community 46"
|
||||
### Community 43 - "Community 43"
|
||||
Cohesion: 0.28
|
||||
Nodes (4): fetchMyProductionMaterialConsumptions(), handleReset(), handleSearch(), loadData()
|
||||
|
||||
### Community 45 - "Community 45"
|
||||
Cohesion: 0.39
|
||||
Nodes (6): isIgnorableScriptError(), normalizeErrorMessage(), registerPromiseErrorHandler(), registerResourceErrorHandler(), scriptErrorHandler(), setupErrorHandle()
|
||||
|
||||
### Community 47 - "Community 47"
|
||||
### Community 46 - "Community 46"
|
||||
Cohesion: 0.36
|
||||
Nodes (1): TableHeightCalculator
|
||||
|
||||
### Community 49 - "Community 49"
|
||||
### Community 48 - "Community 48"
|
||||
Cohesion: 0.33
|
||||
Nodes (2): logApiCryptoBootInfo(), maskSecret()
|
||||
|
||||
### Community 50 - "Community 50"
|
||||
### Community 49 - "Community 49"
|
||||
Cohesion: 0.48
|
||||
Nodes (5): buildPrefilledLabStorageCode(), formatYear(), formatYm(), normalizeSampleTypeName(), normalizeSourceType()
|
||||
|
||||
### Community 51 - "Community 51"
|
||||
### Community 50 - "Community 50"
|
||||
Cohesion: 0.47
|
||||
Nodes (3): isPaymentDueWithinWarnWindow(), parsePaymentDueYmd(), startOfLocalDay()
|
||||
|
||||
### Community 52 - "Community 52"
|
||||
### Community 51 - "Community 51"
|
||||
Cohesion: 0.5
|
||||
Nodes (2): formatProtocolDocDeleteConfirm(), formatProtocolDocSubject()
|
||||
|
||||
### Community 53 - "Community 53"
|
||||
### Community 52 - "Community 52"
|
||||
Cohesion: 0.5
|
||||
Nodes (2): parseEquipmentIds(), syncEquipmentNamesFromOptions()
|
||||
|
||||
### Community 55 - "Community 55"
|
||||
### Community 54 - "Community 54"
|
||||
Cohesion: 0.5
|
||||
Nodes (2): focusInput(), handleKeydown()
|
||||
|
||||
### Community 57 - "Community 57"
|
||||
### Community 56 - "Community 56"
|
||||
Cohesion: 0.67
|
||||
Nodes (2): if(), logSidebarMenu()
|
||||
|
||||
### Community 62 - "Community 62"
|
||||
### Community 61 - "Community 61"
|
||||
Cohesion: 1.0
|
||||
Nodes (2): getSettingDefaults(), resetToDefaults()
|
||||
|
||||
### Community 64 - "Community 64"
|
||||
### Community 63 - "Community 63"
|
||||
Cohesion: 1.0
|
||||
Nodes (2): copyTextToClipboard(), copyTextWithFallback()
|
||||
|
||||
### Community 71 - "Community 71"
|
||||
### Community 70 - "Community 70"
|
||||
Cohesion: 1.0
|
||||
Nodes (2): emptyTabCounts(), useProductionWorkOrderTabStepCounts()
|
||||
|
||||
### Community 73 - "Community 73"
|
||||
### Community 72 - "Community 72"
|
||||
Cohesion: 1.0
|
||||
Nodes (2): emptyTabCounts(), useQcWorkOrderTabUnfinishedCounts()
|
||||
|
||||
## Knowledge Gaps
|
||||
- **Thin community `Community 16`** (42 nodes): `WebSocketClient`, `.calculateReconnectDelay()`, `.clearAllTimers()`, `.clearConnectionTimers()`, `.clearTimer()`, `.close()`, `.closeCurrentSocketForReconnect()`, `.connect()`, `.connectionStatusText()`, `.constructor()`, `.destroyInstance()`, `.flushMessageQueue()`, `.getInstance()`, `.getReadyStateText()`, `.handleClose()`, `.handleConnectionTimeout()`, `.handleError()`, `.handleMessage()`, `.handleOpen()`, `.init()`, `.isWebSocketConnected()`, `.reconnect()`, `.resetHeartbeat()`, `.send()`, `.startHeartbeat()`, `.startPing()`, `TableCache`, `.cleanupExpired()`, `.clear()`, `.clearByTags()`, `.clearCurrentSearch()`, `.clearPagination()`, `.constructor()`, `.evictLRU()`, `.generateKey()`, `.generateTags()`, `.get()`, `.getStats()`, `.log()`, `.set()`, `index.ts`, `tableCache.ts`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 40`** (9 nodes): `cleanupEventListeners()`, `handleTouchEnd()`, `handleTouchMove()`, `handleTouchStart()`, `handleWheelScroll()`, `if()`, `setTransition()`, `setupEventListeners()`, `index.vue`
|
||||
- **Thin community `Community 38`** (9 nodes): `cleanupEventListeners()`, `handleTouchEnd()`, `handleTouchMove()`, `handleTouchStart()`, `handleWheelScroll()`, `if()`, `setTransition()`, `setupEventListeners()`, `index.vue`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 41`** (9 nodes): `FireworkSystem`, `.constructor()`, `.createFirework()`, `.createParticle()`, `.getAvailableParticle()`, `.initializePool()`, `.preloadAllImages()`, `.preloadImage()`, `index.vue`
|
||||
- **Thin community `Community 39`** (9 nodes): `FireworkSystem`, `.constructor()`, `.createFirework()`, `.createParticle()`, `.getAvailableParticle()`, `.initializePool()`, `.preloadAllImages()`, `.preloadImage()`, `index.vue`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 47`** (8 nodes): `TableHeightCalculator`, `.calculate()`, `.calculateOffset()`, `.calculatePaginationOffset()`, `.constructor()`, `.getHeaderHeight()`, `useTableHeight()`, `useTableHeight.ts`
|
||||
- **Thin community `Community 46`** (8 nodes): `TableHeightCalculator`, `.calculate()`, `.calculateOffset()`, `.calculatePaginationOffset()`, `.constructor()`, `.getHeaderHeight()`, `useTableHeight()`, `useTableHeight.ts`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 49`** (7 nodes): `App.vue`, `main.ts`, `refreshButtonAutoIcons()`, `refreshPanelTitleIcons()`, `logApiCryptoBootInfo()`, `maskSecret()`, `console.ts`
|
||||
- **Thin community `Community 48`** (7 nodes): `App.vue`, `main.ts`, `refreshButtonAutoIcons()`, `refreshPanelTitleIcons()`, `logApiCryptoBootInfo()`, `maskSecret()`, `console.ts`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 52`** (5 nodes): `formatProtocolDocBatchDeleteConfirm()`, `formatProtocolDocDeleteConfirm()`, `formatProtocolDocSubject()`, `getProtocolDocTypeLabel()`, `protocol-doc-label.ts`
|
||||
- **Thin community `Community 51`** (5 nodes): `formatProtocolDocBatchDeleteConfirm()`, `formatProtocolDocDeleteConfirm()`, `formatProtocolDocSubject()`, `getProtocolDocTypeLabel()`, `protocol-doc-label.ts`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 53`** (5 nodes): `equipmentOptionLabel()`, `joinEquipmentIds()`, `parseEquipmentIds()`, `syncEquipmentNamesFromOptions()`, `equipment-select.ts`
|
||||
- **Thin community `Community 52`** (5 nodes): `equipmentOptionLabel()`, `joinEquipmentIds()`, `parseEquipmentIds()`, `syncEquipmentNamesFromOptions()`, `equipment-select.ts`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 55`** (5 nodes): `focusInput()`, `handleKeydown()`, `if()`, `search()`, `index.vue`
|
||||
- **Thin community `Community 54`** (5 nodes): `focusInput()`, `handleKeydown()`, `if()`, `search()`, `index.vue`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 57`** (4 nodes): `if()`, `logSidebarMenu()`, `index.vue`, `SidebarSubmenu.vue`
|
||||
- **Thin community `Community 56`** (4 nodes): `if()`, `logSidebarMenu()`, `index.vue`, `SidebarSubmenu.vue`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 62`** (3 nodes): `getSettingDefaults()`, `resetToDefaults()`, `setting.ts`
|
||||
- **Thin community `Community 61`** (3 nodes): `getSettingDefaults()`, `resetToDefaults()`, `setting.ts`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 64`** (3 nodes): `copyTextToClipboard()`, `copyTextWithFallback()`, `copy-text.ts`
|
||||
- **Thin community `Community 63`** (3 nodes): `copyTextToClipboard()`, `copyTextWithFallback()`, `copy-text.ts`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 71`** (3 nodes): `emptyTabCounts()`, `useProductionWorkOrderTabStepCounts()`, `useProductionWorkOrderTabStepCounts.ts`
|
||||
- **Thin community `Community 70`** (3 nodes): `emptyTabCounts()`, `useProductionWorkOrderTabStepCounts()`, `useProductionWorkOrderTabStepCounts.ts`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 73`** (3 nodes): `emptyTabCounts()`, `useQcWorkOrderTabUnfinishedCounts()`, `useQcWorkOrderTabUnfinishedCounts.ts`
|
||||
- **Thin community `Community 72`** (3 nodes): `emptyTabCounts()`, `useQcWorkOrderTabUnfinishedCounts()`, `useQcWorkOrderTabUnfinishedCounts.ts`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
|
||||
## Suggested Questions
|
||||
_Questions this graph is uniquely positioned to answer:_
|
||||
|
||||
- **Why does `get()` connect `Community 0` to `Community 1`, `Community 2`, `Community 3`, `Community 4`, `Community 5`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 14`, `Community 15`, `Community 19`, `Community 20`, `Community 21`, `Community 22`, `Community 23`, `Community 24`, `Community 25`, `Community 27`, `Community 28`, `Community 29`, `Community 31`, `Community 35`, `Community 43`?**
|
||||
_High betweenness centrality (0.295) - this node is a cross-community bridge._
|
||||
- **Why does `push()` connect `Community 1` to `Community 0`, `Community 2`, `Community 3`, `Community 4`, `Community 5`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 12`, `Community 13`, `Community 14`, `Community 16`, `Community 17`, `Community 18`, `Community 21`, `Community 24`, `Community 27`, `Community 38`, `Community 41`?**
|
||||
_High betweenness centrality (0.190) - this node is a cross-community bridge._
|
||||
- **Why does `handleDynamicRoutes()` connect `Community 6` to `Community 24`, `Community 9`, `Community 27`, `Community 23`?**
|
||||
_High betweenness centrality (0.040) - this node is a cross-community bridge._
|
||||
- **Why does `get()` connect `Community 0` to `Community 1`, `Community 2`, `Community 3`, `Community 4`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 14`, `Community 15`, `Community 19`, `Community 20`, `Community 21`, `Community 22`, `Community 23`, `Community 24`, `Community 25`, `Community 27`, `Community 28`, `Community 30`, `Community 34`, `Community 41`, `Community 43`?**
|
||||
_High betweenness centrality (0.298) - this node is a cross-community bridge._
|
||||
- **Why does `push()` connect `Community 3` to `Community 1`, `Community 2`, `Community 4`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 12`, `Community 13`, `Community 14`, `Community 16`, `Community 17`, `Community 18`, `Community 21`, `Community 22`, `Community 25`, `Community 27`, `Community 39`?**
|
||||
_High betweenness centrality (0.198) - this node is a cross-community bridge._
|
||||
- **Why does `handleDynamicRoutes()` connect `Community 5` to `Community 25`, `Community 10`, `Community 27`, `Community 23`?**
|
||||
_High betweenness centrality (0.050) - this node is a cross-community bridge._
|
||||
- **Are the 279 inferred relationships involving `get()` (e.g. with `buildNodeCodePathFromFlat()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
|
||||
_`get()` has 279 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 69 inferred relationships involving `push()` (e.g. with `refreshQcMenuBadges()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
|
||||
|
||||
@@ -57,12 +57,12 @@
|
||||
</div>
|
||||
<div id="legend"></div>
|
||||
</div>
|
||||
<div id="stats">2698 nodes · 3714 edges · 331 communities</div>
|
||||
<div id="stats">2700 nodes · 3716 edges · 330 communities</div>
|
||||
</div>
|
||||
<script>
|
||||
const RAW_NODES = [{"id": "app_vue", "label": "App.vue", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "App.vue", "community": 49, "community_name": "Community 49", "source_file": "App.vue", "file_type": "code", "degree": 3}, {"id": "src_app_refreshbuttonautoicons", "label": "refreshButtonAutoIcons()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshButtonAutoIcons()", "community": 49, "community_name": "Community 49", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "src_app_refreshpaneltitleicons", "label": "refreshPanelTitleIcons()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshPanelTitleIcons()", "community": 49, "community_name": "Community 49", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "main_ts", "label": "main.ts", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "main.ts", "community": 49, "community_name": "Community 49", "source_file": "main.ts", "file_type": "code", "degree": 4}, {"id": "src_main_masksecret", "label": "maskSecret()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "maskSecret()", "community": 49, "community_name": "Community 49", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "src_main_logapicryptobootinfo", "label": "logApiCryptoBootInfo()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "logApiCryptoBootInfo()", "community": 49, "community_name": "Community 49", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "env_d_ts", "label": "env.d.ts", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "env.d.ts", "community": 108, "community_name": "Community 108", "source_file": "env.d.ts", "file_type": "code", "degree": 0}, {"id": "shims_loose_d_ts", "label": "shims-loose.d.ts", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "shims-loose.d.ts", "community": 109, "community_name": "Community 109", "source_file": "shims-loose.d.ts", "file_type": "code", "degree": 0}, {"id": "directives_index_ts", "label": "index.ts", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "index.ts", "community": 26, "community_name": "Community 26", "source_file": "directives/index.ts", "file_type": "code", "degree": 1}, {"id": "directives_index_setupglobdirectives", "label": "setupGlobDirectives()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.5, "font": {"size": 0, "color": "#ffffff"}, "title": "setupGlobDirectives()", "community": 26, "community_name": "Community 26", "source_file": "directives/index.ts", "file_type": "code", "degree": 5}, {"id": "directives_core_roles_ts", "label": "roles.ts", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "roles.ts", "community": 26, "community_name": "Community 26", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 3}, {"id": "core_roles_checkrolepermission", "label": "checkRolePermission()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "checkRolePermission()", "community": 26, "community_name": "Community 26", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_removeelement", "label": "removeElement()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "removeElement()", "community": 26, "community_name": "Community 26", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_setuprolesdirective",Line truncated
|
||||
const RAW_EDGES = [{"from": "app_vue", "to": "src_app_refreshbuttonautoicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "src_app_refreshpaneltitleicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "main_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "utils_sys_console_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_masksecret", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_logapicryptobootinfo", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "src_main_masksecret", "to": "src_main_logapicryptobootinfo", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_ts", "to": "directives_index_setupglobdirectives", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_setupglobdirectives", "to": "core_auth_setupauthdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "core_roles_setuprolesdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_highlight_setuphighlightdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_ripple_setuprippledirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_core_roles_ts", "to": "core_roles_checkrolepermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_setuprolesdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_roles_checkrolepermission", "to": "core_roles_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_checkauthpermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_setupauthdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_checkauthpermission", "to": "core_auth_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_ripple_ts", "to": "business_ripple_setuprippledirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_highlightcode", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_insertlinenumbers", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_addcopybutton", "label": "contains", "title": "contains [EXTRACTED]", "dLine truncated
|
||||
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 425}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 123}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 117}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 112}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 104}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 97}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 94}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 90}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 80}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 68}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 67}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 61}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 59}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 55}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 50}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 48}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 42}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 40}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 40}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 37}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 37}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 34}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 33}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 29}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 24}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 24}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 22}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 22}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 22}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 22}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 21}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 19}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 17}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 16}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 14}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 14}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 13}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 13}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 12}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 10}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 9}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 9}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 9}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 9}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 9}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 9}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 8}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 8}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 8}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 7}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 7}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 6}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 5}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 5}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 5}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 5}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 5}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 4}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 4}, {"cid": 59, "color": "#BAB0AC", "label": "Community 59", "count": 4}, {"cid": 60, "color": "#4E79A7", "label": "Community 60", "count": 4}, {"cid": 61, "color": "#F28E2B", "label": "Community 61", "count": 4}, {"cid": 62, "color": "#E15759", "label": "Community 62", "count": 3}, {"cid": 63, "color": "#76B7B2", "label": "Community 63", "count": 3}, {"cid": 64, "color": "#59A14F", "label": "Community 64", "count": 3}, {"cid": 65, "color": "#EDC948", "label": "Community 65", "count": 3}, {"cid": 66, "color": "#B07AA1", "label": "Community 66", "count": 3}, {"cid": 67, "color": "#FF9DA7", "label": "Community 67", "count": 3}, {"cid": 68, "color": "#9C755F", "label": "Community 68", "count": 3}, {"cid": 69, "color": "#BAB0AC", "label": "Community 69", "count": 3}, {"cid": 70, "color": "#4E79A7", "label": "Community 70", "Line truncated
|
||||
const RAW_NODES = [{"id": "app_vue", "label": "App.vue", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "App.vue", "community": 48, "community_name": "Community 48", "source_file": "App.vue", "file_type": "code", "degree": 3}, {"id": "src_app_refreshbuttonautoicons", "label": "refreshButtonAutoIcons()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshButtonAutoIcons()", "community": 48, "community_name": "Community 48", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "src_app_refreshpaneltitleicons", "label": "refreshPanelTitleIcons()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshPanelTitleIcons()", "community": 48, "community_name": "Community 48", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "main_ts", "label": "main.ts", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "main.ts", "community": 48, "community_name": "Community 48", "source_file": "main.ts", "file_type": "code", "degree": 4}, {"id": "src_main_masksecret", "label": "maskSecret()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "maskSecret()", "community": 48, "community_name": "Community 48", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "src_main_logapicryptobootinfo", "label": "logApiCryptoBootInfo()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "logApiCryptoBootInfo()", "community": 48, "community_name": "Community 48", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "env_d_ts", "label": "env.d.ts", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "env.d.ts", "community": 107, "community_name": "Community 107", "source_file": "env.d.ts", "file_type": "code", "degree": 0}, {"id": "shims_loose_d_ts", "label": "shims-loose.d.ts", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "shims-loose.d.ts", "community": 108, "community_name": "Community 108", "source_file": "shims-loose.d.ts", "file_type": "code", "degree": 0}, {"id": "directives_index_ts", "label": "index.ts", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "index.ts", "community": 26, "community_name": "Community 26", "source_file": "directives/index.ts", "file_type": "code", "degree": 1}, {"id": "directives_index_setupglobdirectives", "label": "setupGlobDirectives()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.5, "font": {"size": 0, "color": "#ffffff"}, "title": "setupGlobDirectives()", "community": 26, "community_name": "Community 26", "source_file": "directives/index.ts", "file_type": "code", "degree": 5}, {"id": "directives_core_roles_ts", "label": "roles.ts", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "roles.ts", "community": 26, "community_name": "Community 26", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 3}, {"id": "core_roles_checkrolepermission", "label": "checkRolePermission()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "checkRolePermission()", "community": 26, "community_name": "Community 26", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_removeelement", "label": "removeElement()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "removeElement()", "community": 26, "community_name": "Community 26", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_setuprolesdirective",Line truncated
|
||||
const RAW_EDGES = [{"from": "app_vue", "to": "src_app_refreshbuttonautoicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "src_app_refreshpaneltitleicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "main_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "utils_sys_console_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_masksecret", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_logapicryptobootinfo", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "src_main_masksecret", "to": "src_main_logapicryptobootinfo", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_ts", "to": "directives_index_setupglobdirectives", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_setupglobdirectives", "to": "core_auth_setupauthdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "core_roles_setuprolesdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_highlight_setuphighlightdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_ripple_setuprippledirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_core_roles_ts", "to": "core_roles_checkrolepermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_setuprolesdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_roles_checkrolepermission", "to": "core_roles_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_checkauthpermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_setupauthdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_checkauthpermission", "to": "core_auth_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_ripple_ts", "to": "business_ripple_setuprippledirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_highlightcode", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_insertlinenumbers", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_addcopybutton", "label": "contains", "title": "contains [EXTRACTED]", "dLine truncated
|
||||
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 355}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 216}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 124}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 123}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 115}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 94}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 92}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 82}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 69}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 68}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 67}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 62}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 61}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 54}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 52}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 43}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 42}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 41}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 40}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 37}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 35}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 35}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 34}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 28}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 24}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 24}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 22}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 22}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 22}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 21}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 19}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 17}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 16}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 14}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 14}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 13}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 13}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 10}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 9}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 9}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 9}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 9}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 9}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 9}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 9}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 8}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 8}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 8}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 7}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 7}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 6}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 5}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 5}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 5}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 5}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 5}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 4}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 4}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 4}, {"cid": 59, "color": "#BAB0AC", "label": "Community 59", "count": 4}, {"cid": 60, "color": "#4E79A7", "label": "Community 60", "count": 4}, {"cid": 61, "color": "#F28E2B", "label": "Community 61", "count": 3}, {"cid": 62, "color": "#E15759", "label": "Community 62", "count": 3}, {"cid": 63, "color": "#76B7B2", "label": "Community 63", "count": 3}, {"cid": 64, "color": "#59A14F", "label": "Community 64", "count": 3}, {"cid": 65, "color": "#EDC948", "label": "Community 65", "count": 3}, {"cid": 66, "color": "#B07AA1", "label": "Community 66", "count": 3}, {"cid": 67, "color": "#FF9DA7", "label": "Community 67", "count": 3}, {"cid": 68, "color": "#9C755F", "label": "Community 68", "count": 3}, {"cid": 69, "color": "#BAB0AC", "label": "Community 69", "count": 3}, {"cid": 70, "color": "#4E79A7", "label": "Community 70", "coLine truncated
|
||||
|
||||
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
|
||||
function esc(s) {
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/common/index.ts": 1781272556.3597305,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/directive/directive.d.ts": 1781272556.3601494,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/api/api.d.ts": 1781272556.3606477,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1782722131.750165,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1782721958.229041,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1782785262.237019,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1782757665.1175961,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/store/index.ts": 1781272556.364766,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/router/index.ts": 1782394569.8806834,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/locales/index.ts": 1781272556.3657222,
|
||||
@@ -42,7 +42,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/enums/appEnum.ts": 1781272556.3784597,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-menu-badge.ts": 1782396392.0954244,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/patch-el-select-filterable.ts": 1781272556.3791182,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts": 1782705544.5747015,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts": 1782786221.3413239,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts": 1782703000.5943525,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/protocol-doc-label.ts": 1781272556.3840382,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/user-avatar.ts": 1781403605.517818,
|
||||
@@ -381,7 +381,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue": 1781563767.3525257,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskInputEnhancedTable.vue": 1782709493.924029,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue": 1782359900.6139107,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue": 1782721708.085559,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue": 1782747778.775207,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskEquipmentPanel.vue": 1782720192.2193718,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskExecutionDialog.vue": 1782717449.5105517,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/EditTaskInfoDialog.vue": 1781577178.2471955,
|
||||
@@ -389,7 +389,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue": 1782717441.142722,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskPaperAttachmentsPanel.vue": 1782483404.2007074,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue": 1782472596.5978415,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskOutputProductDialog.vue": 1782720544.1600132,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskOutputProductDialog.vue": 1782786175.222704,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderCardList.vue": 1782703015.4411287,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ForwardTaskDialog.vue": 1781563767.3550124,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskStepSubList.vue": 1782604891.2129428,
|
||||
@@ -483,7 +483,7 @@
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material/QcMaterialBatchAttachmentDialog.vue": 1781690342.0885053,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/index.vue": 1782206029.583706,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue": 1782565844.5059474,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue": 1782722418.0324364,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue": 1782748298.4772725,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/SampleReceptionCardList.vue": 1782716808.1745493,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/my-qc-task/index.vue": 1782394624.819391,
|
||||
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/env-detect-record/index.vue": 1782377015.4291072,
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "label": "SampleReceptionDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L1"}, {"id": "production_work_order_samplereceptiondialog_protocolstatuslabelbysource", "label": "protocolStatusLabelBySource()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L295"}, {"id": "production_work_order_samplereceptiondialog_protocolstatustagtypebysource", "label": "protocolStatusTagTypeBySource()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L301"}, {"id": "production_work_order_samplereceptiondialog_nowdatetime", "label": "nowDatetime()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L347"}, {"id": "production_work_order_samplereceptiondialog_resetprodform", "label": "resetProdForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L353"}, {"id": "production_work_order_samplereceptiondialog_populatefromproduction", "label": "populateFromProduction()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L363"}, {"id": "production_work_order_samplereceptiondialog_loadassignees", "label": "loadAssignees()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L373"}, {"id": "production_work_order_samplereceptiondialog_searchassignees", "label": "searchAssignees()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L378"}, {"id": "production_work_order_samplereceptiondialog_onhandlerchange", "label": "onHandlerChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L382"}, {"id": "production_work_order_samplereceptiondialog_ensuredefaulthandler", "label": "ensureDefaultHandler()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L387"}, {"id": "production_work_order_samplereceptiondialog_buildpayload", "label": "buildPayload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L400"}, {"id": "production_work_order_samplereceptiondialog_initdialog", "label": "initDialog()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"id": "production_work_order_samplereceptiondialog_handleclosed", "label": "handleClosed()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L449"}, {"id": "production_work_order_samplereceptiondialog_submitproduction", "label": "submitProduction()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L457"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_protocolstatuslabelbysource", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L295", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_protocolstatustagtypebysource", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L301", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplerLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_taskoutputproductdialog_vue", "label": "TaskOutputProductDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskOutputProductDialog.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_sample_reception_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue", "source_location": "L1"}, {"id": "sample_reception_index_ensurecurrentuserinoptions", "label": "ensureCurrentUserInOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue", "source_location": "L1229"}, {"id": "sample_reception_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue", "source_location": "L1487"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_sample_reception_index_vue", "target": "sample_reception_index_ensurecurrentuserinoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue", "source_location": "L1229", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_sample_reception_index_vue", "target": "sample_reception_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue", "source_location": "L1487", "weight": 1.0}], "raw_calls": [{"caller_nid": "sample_reception_index_if", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue", "source_location": "L1488"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_storage_slot_options_ts", "label": "storage-slot-options.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L1"}, {"id": "utils_storage_slot_options_mapremoteslotselectoption", "label": "mapRemoteSlotSelectOption()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L21"}, {"id": "utils_storage_slot_options_isstorageslotselectoptiondisabled", "label": "isStorageSlotSelectOptionDisabled()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L35"}, {"id": "utils_storage_slot_options_getlaststorageslotsearchquery", "label": "getLastStorageSlotSearchQuery()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L54"}, {"id": "utils_storage_slot_options_remotesearchstorageslotselectoptions", "label": "remoteSearchStorageSlotSelectOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L58"}, {"id": "utils_storage_slot_options_getstoragefacilityordernum", "label": "getStorageFacilityOrderNum()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L90"}, {"id": "utils_storage_slot_options_getstorageslotordernum", "label": "getStorageSlotOrderNum()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L96"}, {"id": "utils_storage_slot_options_decodeslotlayoutorder", "label": "decodeSlotLayoutOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L105"}, {"id": "utils_storage_slot_options_parselegacyrowcolslotcode", "label": "parseLegacyRowColSlotCode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L114"}, {"id": "utils_storage_slot_options_parsestorageslotcode", "label": "parseStorageSlotCode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L121"}, {"id": "utils_storage_slot_options_buildnodecodepathfromflat", "label": "buildNodeCodePathFromFlat()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L128"}, {"id": "utils_storage_slot_options_buildfullslotcodefromflat", "label": "buildFullSlotCodeFromFlat()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L152"}, {"id": "utils_storage_slot_options_comparestoragefacilityslots", "label": "compareStorageFacilitySlots()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L164"}, {"id": "utils_storage_slot_options_sortstoragefacilityslots", "label": "sortStorageFacilitySlots()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L192"}, {"id": "utils_storage_slot_options_isstorageslotavailable", "label": "isStorageSlotAvailable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L196"}, {"id": "utils_storage_slot_options_collectleaffacilitynodesintreeorder", "label": "collectLeafFacilityNodesInTreeOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L205"}, {"id": "utils_storage_slot_options_mapslotstoselectoptions", "label": "mapSlotsToSelectOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L257"}, {"id": "utils_storage_slot_options_loadstorageslotselectoptions", "label": "loadStorageSlotSelectOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L285"}, {"id": "utils_storage_slot_options_ensurestorageslotsinoptions", "label": "ensureStorageSlotsInOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L323"}, {"id": "utils_storage_slot_options_filterstorageslotselectoptions", "label": "filterStorageSlotSelectOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_lLine truncated
|
||||
@@ -4,15 +4,43 @@
|
||||
import { buildTreePathLabelFromFlat } from '@/utils/tree-path'
|
||||
import { fetchStorageSlotSelectOptions } from '@/api/admin'
|
||||
|
||||
export type StorageSlotSelectOption = { id: string; name: string }
|
||||
export type StorageSlotSelectOption = {
|
||||
id: string
|
||||
name: string
|
||||
/** 是否可分配(空格子);已占用项仍展示但应置灰 */
|
||||
available?: boolean
|
||||
}
|
||||
|
||||
export type LoadStorageSlotSelectOptions = {
|
||||
/** 仅返回空格子(编辑时可配合 includeSlotIds 保留当前格) */
|
||||
/** 无关键词初始加载时仅返回空格子(默认 true) */
|
||||
availableOnly?: boolean
|
||||
/** 额外保留在选项中的格子 ID(如编辑态当前储物格) */
|
||||
includeSlotIds?: string[]
|
||||
}
|
||||
|
||||
function mapRemoteSlotSelectOption(item: Record<string, unknown>): StorageSlotSelectOption {
|
||||
const id = String(item.id || '')
|
||||
const baseName = String(item.name || item.fullSlotCode || item.slot_code || item.slotCode || id)
|
||||
const status = String(item.slotStatus ?? item.slot_status ?? '')
|
||||
const occupied = Number(item.occupiedCount ?? item.occupied_count ?? 0)
|
||||
const available = status === '空' || occupied === 0
|
||||
return {
|
||||
id,
|
||||
name: available ? baseName : `${baseName}(已占用)`,
|
||||
available
|
||||
}
|
||||
}
|
||||
|
||||
/** 下拉项是否应禁用(保留当前已选格便于编辑展示) */
|
||||
export function isStorageSlotSelectOptionDisabled(
|
||||
opt: StorageSlotSelectOption,
|
||||
keepSlotId?: string
|
||||
): boolean {
|
||||
const keep = String(keepSlotId ?? '').trim()
|
||||
if (keep && opt.id === keep) return false
|
||||
return opt.available === false
|
||||
}
|
||||
|
||||
/** 远程检索防抖(毫秒):用户停顿后再请求 */
|
||||
export const STORAGE_SLOT_REMOTE_SEARCH_DEBOUNCE_MS = 1000
|
||||
|
||||
@@ -39,18 +67,20 @@ export async function remoteSearchStorageSlotSelectOptions(
|
||||
.filter(Boolean)
|
||||
.join(',')
|
||||
try {
|
||||
const hasKeyword = !!trimmed
|
||||
const availableOnlyDefault = opts?.availableOnly !== false
|
||||
const res = await fetchStorageSlotSelectOptions({
|
||||
keyword: trimmed || undefined,
|
||||
availableOnly: opts?.availableOnly ? true : undefined,
|
||||
// 无关键词:只列空格子;有关键词:返回全部匹配编号,已占用由前端置灰
|
||||
availableOnly: availableOnlyDefault && !hasKeyword ? true : undefined,
|
||||
includeSlotIds: includeSlotIds || undefined,
|
||||
page: 1,
|
||||
pageSize: STORAGE_SLOT_SELECT_PAGE_SIZE
|
||||
})
|
||||
if (seq !== storageSlotRemoteSearchSeq) return null
|
||||
return (res?.list || []).map((item) => ({
|
||||
id: String(item.id || ''),
|
||||
name: String(item.name || item.fullSlotCode || item.slotCode || item.id || '')
|
||||
}))
|
||||
return (res?.list || []).map((item) =>
|
||||
mapRemoteSlotSelectOption(item as Record<string, unknown>)
|
||||
)
|
||||
} catch {
|
||||
if (seq !== storageSlotRemoteSearchSeq) return null
|
||||
return []
|
||||
@@ -302,7 +332,8 @@ export function ensureStorageSlotsInOptions(
|
||||
seen.add(id)
|
||||
next.unshift({
|
||||
id,
|
||||
name: String(stub.name || id)
|
||||
name: String(stub.name || id),
|
||||
available: true
|
||||
})
|
||||
}
|
||||
return next
|
||||
|
||||
@@ -99,6 +99,7 @@
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="isStorageSlotSelectOptionDisabled(item, formData.storageSlotId)"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -260,6 +261,9 @@
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="
|
||||
isStorageSlotSelectOptionDisabled(item, productLines[$index]?.storageSlotId)
|
||||
"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
@@ -299,8 +303,10 @@
|
||||
STORAGE_SLOT_REMOTE_SEARCH_DEBOUNCE_MS,
|
||||
ensureStorageSlotsInOptions,
|
||||
filterStorageSlotSelectOptions,
|
||||
isStorageSlotSelectOptionDisabled,
|
||||
validateUniqueStorageSlotIds
|
||||
} from '@/utils/storage-slot-options'
|
||||
import type { StorageSlotSelectOption } from '@/utils/storage-slot-options'
|
||||
|
||||
defineOptions({ name: 'TaskOutputProductDialog' })
|
||||
|
||||
@@ -343,7 +349,7 @@
|
||||
const productTypeOptions = ref<
|
||||
Array<{ id: string; productTypeName: string; productTypeCode?: string }>
|
||||
>([])
|
||||
const storageSlotOptions = ref<Array<{ id: string; name: string }>>([])
|
||||
const storageSlotOptions = ref<StorageSlotSelectOption[]>([])
|
||||
const productTypeOptionsLoading = ref(false)
|
||||
const storageSlotOptionsLoading = ref(false)
|
||||
let storageSlotSearchToken = 0
|
||||
|
||||
Reference in new issue
Block a user