This commit is contained in:
zlwu committed 2026-07-06 16:59:53 +08:00
1 parent 973176d508
commit cdaa0ac273
327 files changed
+32861 -25627

No files matched your search

+1
View File
@@ -0,0 +1 @@
56839
+12
View File
@@ -1681,6 +1681,9 @@ async def list_production_work_orders(
createTimeEnd: Optional[str] = Query(None, alias="createTimeEnd"),
infusionTimeStart: Optional[str] = Query(None, alias="infusionTimeStart"),
infusionTimeEnd: Optional[str] = Query(None, alias="infusionTimeEnd"),
plannedStartTimeStart: Optional[str] = Query(None, alias="plannedStartTimeStart"),
plannedStartTimeEnd: Optional[str] = Query(None, alias="plannedStartTimeEnd"),
excludeVoidProtocol: bool = Query(True, alias="excludeVoidProtocol"),
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
@@ -1697,6 +1700,9 @@ async def list_production_work_orders(
create_time_end=createTimeEnd,
infusion_time_start=infusionTimeStart,
infusion_time_end=infusionTimeEnd,
planned_start_time_start=plannedStartTimeStart,
planned_start_time_end=plannedStartTimeEnd,
exclude_void_protocol=excludeVoidProtocol,
)
result = production_work_order_svc.list_production_work_orders(
db, tenant_no=tenant_no, query=query, page=page, page_size=pageSize,
@@ -2009,6 +2015,9 @@ async def list_my_production_tasks(
bizType: Optional[str] = Query(None, alias="bizType"),
scope: str = Query("current", description="current|history"),
includeStepSummary: bool = Query(False, alias="includeStepSummary"),
excludeVoidProtocol: bool = Query(True, alias="excludeVoidProtocol"),
plannedStartTimeStart: Optional[str] = Query(None, alias="plannedStartTimeStart"),
plannedStartTimeEnd: Optional[str] = Query(None, alias="plannedStartTimeEnd"),
user: dict = Depends(require_menu_code("production:my-task:list")),
db: Session = Depends(get_db),
):
@@ -2026,6 +2035,9 @@ async def list_my_production_tasks(
reception_source=receptionSource,
biz_type=bizType,
include_step_summary=includeStepSummary,
exclude_void_protocol=excludeVoidProtocol,
planned_start_time_start=plannedStartTimeStart,
planned_start_time_end=plannedStartTimeEnd,
)
tp = production_task_svc.total_pages(total, pageSize)
return success_response({"list": items, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
+2
View File
@@ -651,6 +651,7 @@ async def list_qc_work_orders(
infusionTimeStart: Optional[str] = Query(None, alias="infusionTimeStart"),
infusionTimeEnd: Optional[str] = Query(None, alias="infusionTimeEnd"),
triggerSource: Optional[str] = Query(None, alias="triggerSource"),
sampleTypeId: Optional[str] = Query(None, alias="sampleTypeId"),
db: Session = Depends(get_db),
user: dict = Depends(require_menu_code("biz:qcWorkOrder:list")),
):
@@ -666,6 +667,7 @@ async def list_qc_work_orders(
biz_type=bizType,
reception_source=receptionSource,
trigger_source=triggerSource,
sample_type_id=sampleTypeId,
create_time_start=createTimeStart,
create_time_end=createTimeEnd,
infusion_time_start=infusionTimeStart,
@@ -9,6 +9,9 @@ from app.models.models import SysDictData
VOID_TYPE_DICT = "xyzflx"
# 协议/捐赠单无效态(与样本接收、生产工单列表过滤口径一致)
INACTIVE_PROTOCOL_STATUSES = ("yzf", "sdfq")
_PROTOCOL_STATUS_LABELS = {
"dsx": "待生效",
"sxz": "生效中",
+63 -14
View File
@@ -1146,6 +1146,9 @@ def list_production_tasks(
task_status: Optional[str] = None,
started_time_start: Optional[str] = None,
started_time_end: Optional[str] = None,
planned_start_time_start: Optional[str] = None,
planned_start_time_end: Optional[str] = None,
planned_start_time_mine_user_id: Optional[str] = None,
current_assignee_user_id: Optional[str] = None,
step_assignee_user_id: Optional[str] = None,
mine_history_user_id: Optional[str] = None,
@@ -1154,6 +1157,7 @@ def list_production_tasks(
biz_type: Optional[str] = None,
user_info=None,
include_step_summary: bool = False,
exclude_void_protocol: bool = True,
) -> Tuple[List[Dict[str, Any]], int]:
def _filtered():
q = db.query(BizProductionTask).filter(
@@ -1202,6 +1206,28 @@ def list_production_tasks(
BizProductionTask.started_time
<= _normalize_date_bound(started_time_end.strip(), end_of_day=True)
)
pst_start = (planned_start_time_start or "").strip()
pst_end = (planned_start_time_end or "").strip()
if pst_start or pst_end:
if not joined_wo:
q = q.join(
BizProductionWorkOrder,
and_(
BizProductionWorkOrder.id == BizProductionTask.work_order_id,
BizProductionWorkOrder.del_flag == 0,
),
)
joined_wo = True
from app.crud.production_work_order import apply_planned_start_time_step_filter
q = apply_planned_start_time_step_filter(
q,
tenant_no=tenant_no,
work_order_id_column=BizProductionTask.work_order_id,
planned_start_time_start=planned_start_time_start,
planned_start_time_end=planned_start_time_end,
mine_user_id=planned_start_time_mine_user_id,
)
ca_uid = (current_assignee_user_id or "").strip()
if ca_uid:
q = q.filter(BizProductionTask.current_assignee_user_id == ca_uid)
@@ -1283,6 +1309,18 @@ def list_production_tasks(
if user_info:
from app.core.data_scope import apply_data_scope
q = apply_data_scope(q, BizProductionTask, user_info, db, tenant_no)
if exclude_void_protocol:
if not joined_wo:
q = q.join(
BizProductionWorkOrder,
and_(
BizProductionWorkOrder.id == BizProductionTask.work_order_id,
BizProductionWorkOrder.del_flag == 0,
),
)
from app.crud.production_work_order import apply_exclude_inactive_protocol_filter
q = apply_exclude_inactive_protocol_filter(q, exclude=True)
return q
total = _filtered().order_by(None).with_entities(func.count(BizProductionTask.id)).scalar() or 0
@@ -1524,10 +1562,16 @@ def list_mine_production_tasks(
reception_source: Optional[str] = None,
biz_type: Optional[str] = None,
include_step_summary: bool = False,
exclude_void_protocol: bool = True,
planned_start_time_start: Optional[str] = None,
planned_start_time_end: Optional[str] = None,
) -> Tuple[List[Dict[str, Any]], int]:
uid = (assignee_user_id or "").strip()
if not uid:
return [], 0
pst_start = (planned_start_time_start or "").strip()
pst_end = (planned_start_time_end or "").strip()
mine_planned_user_id = uid if (pst_start or pst_end) else None
sc = (scope or "current").strip().lower()
if sc == "history":
items, total = list_production_tasks(
@@ -1542,6 +1586,10 @@ def list_mine_production_tasks(
reception_source=reception_source,
biz_type=biz_type,
include_step_summary=include_step_summary,
exclude_void_protocol=exclude_void_protocol,
planned_start_time_start=planned_start_time_start,
planned_start_time_end=planned_start_time_end,
planned_start_time_mine_user_id=mine_planned_user_id,
)
_enrich_handover_times(db, items, from_user_id=uid, tenant_no=tenant_no)
return items, total
@@ -1557,6 +1605,10 @@ def list_mine_production_tasks(
reception_source=reception_source,
biz_type=biz_type,
include_step_summary=include_step_summary,
exclude_void_protocol=exclude_void_protocol,
planned_start_time_start=planned_start_time_start,
planned_start_time_end=planned_start_time_end,
planned_start_time_mine_user_id=mine_planned_user_id,
)
@@ -2941,7 +2993,7 @@ _PRODUCTION_TAB_STEP_COUNT_KEYS = (
def _empty_production_tab_step_counts() -> Dict[str, Dict[str, int]]:
return {
k: {"overdueIncomplete": 0, "unassigned": 0}
k: {"overdueIncomplete": 0, "futureIncomplete": 0}
for k in _PRODUCTION_TAB_STEP_COUNT_KEYS
}
@@ -3044,6 +3096,9 @@ def _base_active_step_count_query(
BizProductionTask.current_assignee_user_id == uid,
)
)
from app.crud.production_work_order import apply_exclude_inactive_protocol_filter
q = apply_exclude_inactive_protocol_filter(q, exclude=True)
return q
@@ -3054,7 +3109,7 @@ def count_step_tab_badges_by_tab(
user_info=None,
mine_user_id: Optional[str] = None,
) -> Dict[str, Dict[str, int]]:
"""按 Tab 统计工艺步骤角标:计划开始已到期未完成数 + 未安排负责人数。"""
"""按 Tab 统计工艺步骤角标:计划开始已到期未完成数 + 计划开始在今日之后未完成数。"""
counts = _empty_production_tab_step_counts()
today_end = datetime.now().replace(hour=23, minute=59, second=59, microsecond=0)
@@ -3075,20 +3130,14 @@ def count_step_tab_badges_by_tab(
)
_aggregate_production_tab_step_field(counts, overdue_rows, "overdueIncomplete")
assignee_exists = (
db.query(BizProductionTaskStepAssignee.id)
.filter(
BizProductionTaskStepAssignee.step_id == BizProductionTaskStep.id,
BizProductionTaskStepAssignee.tenant_no == tenant_no,
BizProductionTaskStepAssignee.del_flag == 0,
)
.exists()
)
unassigned_rows = (
future_rows = (
_base_active_step_count_query(
db, tenant_no=tenant_no, user_info=user_info, mine_user_id=mine_user_id
)
.filter(~assignee_exists)
.filter(
BizProductionTaskStep.planned_start_time.isnot(None),
BizProductionTaskStep.planned_start_time > today_end,
)
.group_by(
BizProductionWorkOrder.work_order_type,
BizProductionWorkOrder.reception_source,
@@ -3096,7 +3145,7 @@ def count_step_tab_badges_by_tab(
)
.all()
)
_aggregate_production_tab_step_field(counts, unassigned_rows, "unassigned")
_aggregate_production_tab_step_field(counts, future_rows, "futureIncomplete")
return counts
+146 -35
View File
@@ -5,10 +5,11 @@ from collections import defaultdict
from datetime import datetime
from typing import Any, Dict, List, Optional, Tuple
from sqlalchemy import and_, func, or_
from sqlalchemy import and_, exists, func, or_
from sqlalchemy.orm import Session
from app.core.db_collation import eq_unicode, like_unicode
from app.core.protocol_status_display import INACTIVE_PROTOCOL_STATUSES
from app.core.utils import generate_uuid
from app.crud.collection_protocol import urls_to_attachment_list
from app.crud import sample_reception as sample_reception_svc
@@ -20,6 +21,7 @@ from app.models.models import (
BizProductionTaskInput,
BizProductionTaskOutput,
BizProductionTaskStep,
BizProductionTaskStepAssignee,
BizProductionTaskStepConsumable,
BizProductionTaskStepDataCollection,
BizProductionTaskStepOutput,
@@ -48,6 +50,98 @@ _RECEPTION_SOURCE_LABELS = {
_ACCEPT_CONCLUSION_LABELS = {"js": "接收", "bj": "拒收"}
def apply_exclude_inactive_protocol_filter(query, *, exclude: bool = True):
"""排除关联采集协议/捐赠协议处于无效态(已作废、属地废弃)的入库生产工单。"""
if not exclude:
return query
inactive_cell_storage = and_(
BizProductionWorkOrder.work_order_type == "inbound",
BizProductionWorkOrder.reception_source == "cell_storage",
exists().where(
and_(
eq_unicode(
BizCollectionProtocol.id,
BizProductionWorkOrder.collection_protocol_id,
),
BizCollectionProtocol.del_flag == 0,
BizCollectionProtocol.protocol_status.in_(INACTIVE_PROTOCOL_STATUSES),
)
),
)
inactive_research_donation = and_(
BizProductionWorkOrder.work_order_type == "inbound",
BizProductionWorkOrder.reception_source == "research_donation",
exists().where(
and_(
eq_unicode(
BizResearchDonation.id,
BizProductionWorkOrder.collection_protocol_id,
),
BizResearchDonation.del_flag == 0,
BizResearchDonation.donation_status.in_(INACTIVE_PROTOCOL_STATUSES),
)
),
)
return query.filter(~or_(inactive_cell_storage, inactive_research_donation))
def apply_planned_start_time_step_filter(
query,
*,
tenant_no: str,
work_order_id_column,
planned_start_time_start: Optional[str] = None,
planned_start_time_end: Optional[str] = None,
mine_user_id: Optional[str] = None,
):
"""按活跃工单/任务下未完成工艺步骤的计划开始时间过滤。"""
start = (planned_start_time_start or "").strip()
end = (planned_start_time_end or "").strip()
if not start and not end:
return query
step_conditions = [
BizProductionTaskStep.del_flag == 0,
BizProductionTaskStep.tenant_no == tenant_no,
BizProductionTaskStep.planned_start_time.isnot(None),
BizProductionTaskStep.step_status != "ywc",
BizProductionTask.id == BizProductionTaskStep.task_id,
BizProductionTask.del_flag == 0,
BizProductionTask.tenant_no == tenant_no,
BizProductionTask.task_status.in_(("dpz", "jxz")),
BizProductionWorkOrder.id == BizProductionTask.work_order_id,
BizProductionWorkOrder.del_flag == 0,
BizProductionWorkOrder.tenant_no == tenant_no,
BizProductionWorkOrder.work_order_status.in_(("dpz", "jxz")),
work_order_id_column == BizProductionTask.work_order_id,
]
if start:
step_conditions.append(
BizProductionTaskStep.planned_start_time >= _normalize_date_bound(start)
)
if end:
step_conditions.append(
BizProductionTaskStep.planned_start_time
<= _normalize_date_bound(end, end_of_day=True)
)
uid = (mine_user_id or "").strip()
if uid:
assignee_match = exists().where(
and_(
BizProductionTaskStepAssignee.step_id == BizProductionTaskStep.id,
BizProductionTaskStepAssignee.user_id == uid,
BizProductionTaskStepAssignee.tenant_no == tenant_no,
BizProductionTaskStepAssignee.del_flag == 0,
)
)
step_conditions.append(
or_(assignee_match, BizProductionTask.current_assignee_user_id == uid)
)
return query.filter(exists().where(and_(*step_conditions)))
def _normalize_date_bound(value: str, *, end_of_day: bool = False) -> str:
val = (value or "").strip()
if len(val) == 10:
@@ -610,47 +704,64 @@ def list_production_work_orders(
if query.sample_code and query.sample_code.strip():
like = f"%{query.sample_code.strip()}%"
q0 = q0.filter(BizProductionWorkOrder.sample_code.like(like))
use_infusion_time = wo_type == "outbound" and (
(query.infusion_time_start and query.infusion_time_start.strip())
or (query.infusion_time_end and query.infusion_time_end.strip())
use_planned_start_time = (
(query.planned_start_time_start and query.planned_start_time_start.strip())
or (query.planned_start_time_end and query.planned_start_time_end.strip())
)
if use_infusion_time:
from app.models.models import BizPilotInfusionSchedule
q0 = q0.join(
BizPilotInfusionSchedule,
eq_unicode(
BizProductionWorkOrder.infusion_schedule_id,
BizPilotInfusionSchedule.id,
),
).filter(
BizPilotInfusionSchedule.del_flag == 0,
BizPilotInfusionSchedule.tenant_no == tenant_no,
if use_planned_start_time:
q0 = apply_planned_start_time_step_filter(
q0,
tenant_no=tenant_no,
work_order_id_column=BizProductionWorkOrder.id,
planned_start_time_start=query.planned_start_time_start,
planned_start_time_end=query.planned_start_time_end,
)
if query.infusion_time_start and query.infusion_time_start.strip():
q0 = q0.filter(
BizPilotInfusionSchedule.infusion_time
>= _normalize_date_bound(query.infusion_time_start.strip())
)
if query.infusion_time_end and query.infusion_time_end.strip():
q0 = q0.filter(
BizPilotInfusionSchedule.infusion_time
<= _normalize_date_bound(query.infusion_time_end.strip(), end_of_day=True)
)
else:
if query.create_time_start and query.create_time_start.strip():
q0 = q0.filter(
BizProductionWorkOrder.create_time
>= _normalize_date_bound(query.create_time_start.strip())
)
if query.create_time_end and query.create_time_end.strip():
q0 = q0.filter(
BizProductionWorkOrder.create_time
<= _normalize_date_bound(query.create_time_end.strip(), end_of_day=True)
use_infusion_time = wo_type == "outbound" and (
(query.infusion_time_start and query.infusion_time_start.strip())
or (query.infusion_time_end and query.infusion_time_end.strip())
)
if use_infusion_time:
from app.models.models import BizPilotInfusionSchedule
q0 = q0.join(
BizPilotInfusionSchedule,
eq_unicode(
BizProductionWorkOrder.infusion_schedule_id,
BizPilotInfusionSchedule.id,
),
).filter(
BizPilotInfusionSchedule.del_flag == 0,
BizPilotInfusionSchedule.tenant_no == tenant_no,
)
if query.infusion_time_start and query.infusion_time_start.strip():
q0 = q0.filter(
BizPilotInfusionSchedule.infusion_time
>= _normalize_date_bound(query.infusion_time_start.strip())
)
if query.infusion_time_end and query.infusion_time_end.strip():
q0 = q0.filter(
BizPilotInfusionSchedule.infusion_time
<= _normalize_date_bound(query.infusion_time_end.strip(), end_of_day=True)
)
else:
if query.create_time_start and query.create_time_start.strip():
q0 = q0.filter(
BizProductionWorkOrder.create_time
>= _normalize_date_bound(query.create_time_start.strip())
)
if query.create_time_end and query.create_time_end.strip():
q0 = q0.filter(
BizProductionWorkOrder.create_time
<= _normalize_date_bound(query.create_time_end.strip(), end_of_day=True)
)
if user_info:
from app.core.data_scope import apply_data_scope
q0 = apply_data_scope(q0, BizProductionWorkOrder, user_info, db, tenant_no)
exclude_inactive = True
if query and query.exclude_void_protocol is not None:
exclude_inactive = bool(query.exclude_void_protocol)
q0 = apply_exclude_inactive_protocol_filter(q0, exclude=exclude_inactive)
return q0
effective_page = query.page if query and query.page else page
+1
View File
@@ -170,6 +170,7 @@ _WORK_ORDER_SUMMARY_COPY_KEYS = (
"isSpecial",
"specialRemark",
"unfinishedBadgeCount",
"protocolSiblingSamples",
)
+198
View File
@@ -817,6 +817,157 @@ def _enrich_work_order_list_items(
item["protocolStatusLabel"] = format_protocol_status_label(
_st, _vt, kind="protocol", db=db, tenant_no=tenant_no_for_status or None
)
return _enrich_protocol_sibling_samples(db, items)
def _protocol_group_key_for_item(item: Dict[str, Any]) -> str:
wo_type = (item.get("workOrderType") or "inbound").strip() or "inbound"
if wo_type != "inbound":
return ""
source = (item.get("receptionSource") or "cell_storage").strip() or "cell_storage"
proto_id = (item.get("collectionProtocolId") or "").strip()
if proto_id:
if source == "research_donation":
return f"donation:{proto_id}"
return f"protocol:{proto_id}"
protocol_no = (item.get("protocolNo") or "").strip()
if protocol_no:
return f"protocol-no:{protocol_no}"
return ""
def _enrich_protocol_sibling_samples(
db: Session, items: List[Dict[str, Any]]
) -> List[Dict[str, Any]]:
"""入库列表:补充同协议下全部样本(供卡片标题栏「同协议样本」展示)。"""
if not items:
return items
cell_proto_ids: List[str] = []
donation_ids: List[str] = []
for item in items:
if (item.get("workOrderType") or "inbound").strip() not in ("", "inbound"):
continue
pid = (item.get("collectionProtocolId") or "").strip()
if not pid:
continue
source = (item.get("receptionSource") or "cell_storage").strip() or "cell_storage"
if source == "research_donation":
if pid not in donation_ids:
donation_ids.append(pid)
elif pid not in cell_proto_ids:
cell_proto_ids.append(pid)
siblings_by_key: Dict[str, List[Dict[str, str]]] = {}
if cell_proto_ids:
proto_samples = (
db.query(BizProtocolSample)
.filter(
BizProtocolSample.collection_protocol_id.in_(cell_proto_ids),
BizProtocolSample.del_flag == 0,
)
.all()
)
by_proto: Dict[str, List[BizProtocolSample]] = defaultdict(list)
type_ids: List[str] = []
tenant_no = ""
for sample in proto_samples:
pid = (sample.collection_protocol_id or "").strip()
if pid:
by_proto[pid].append(sample)
if sample.sample_type_id and sample.sample_type_id not in type_ids:
type_ids.append(sample.sample_type_id)
if not tenant_no and (sample.tenant_no or "").strip():
tenant_no = (sample.tenant_no or "").strip()
type_map = _load_sample_type_name_map(db, type_ids)
sample_codes = list(
{
(s.sample_code or "").strip()
for samples in by_proto.values()
for s in samples
if (s.sample_code or "").strip()
}
)
lab_map = (
sample_reception_svc.get_lab_storage_code_map_by_sample_codes(
db, tenant_no, sample_codes, reception_source="cell_storage"
)
if tenant_no and sample_codes
else {}
)
for pid, samples in by_proto.items():
entries: List[Dict[str, str]] = []
for sample in sorted(samples, key=lambda row: (row.sample_code or "")):
code = (sample.sample_code or "").strip()
if not code:
continue
entries.append(
{
"sampleCode": code,
"labStorageCode": lab_map.get(code, ""),
"sampleTypeName": type_map.get(sample.sample_type_id or "", ""),
}
)
if len(entries) > 1:
siblings_by_key[f"protocol:{pid}"] = entries
if donation_ids:
donation_samples = (
db.query(BizResearchDonationSample)
.filter(
BizResearchDonationSample.research_donation_id.in_(donation_ids),
BizResearchDonationSample.del_flag == 0,
)
.all()
)
by_donation: Dict[str, List[BizResearchDonationSample]] = defaultdict(list)
type_ids = []
tenant_no = ""
for sample in donation_samples:
did = (sample.research_donation_id or "").strip()
if did:
by_donation[did].append(sample)
if sample.sample_type_id and sample.sample_type_id not in type_ids:
type_ids.append(sample.sample_type_id)
if not tenant_no and (sample.tenant_no or "").strip():
tenant_no = (sample.tenant_no or "").strip()
type_map = _load_sample_type_name_map(db, type_ids)
sample_codes = list(
{
(s.sample_code or "").strip()
for samples in by_donation.values()
for s in samples
if (s.sample_code or "").strip()
}
)
lab_map = (
sample_reception_svc.get_lab_storage_code_map_by_sample_codes(
db, tenant_no, sample_codes, reception_source="research_donation"
)
if tenant_no and sample_codes
else {}
)
for did, samples in by_donation.items():
entries = []
for sample in sorted(samples, key=lambda row: (row.sample_code or "")):
code = (sample.sample_code or "").strip()
if not code:
continue
entries.append(
{
"sampleCode": code,
"labStorageCode": lab_map.get(code, ""),
"sampleTypeName": type_map.get(sample.sample_type_id or "", ""),
}
)
if len(entries) > 1:
siblings_by_key[f"donation:{did}"] = entries
for item in items:
key = _protocol_group_key_for_item(item)
siblings = siblings_by_key.get(key)
if siblings:
item["protocolSiblingSamples"] = siblings
return items
@@ -1362,6 +1513,42 @@ def list_cell_product_options_for_production_work_order(
)
def _protocol_sample_ids_for_sample_type(
db: Session,
tenant_no: str,
sample_type_id: str,
reception_source: Optional[str] = None,
) -> List[str]:
stid = (sample_type_id or "").strip()
if not stid or not tenant_no:
return []
ids: List[str] = []
rs = (reception_source or "").strip()
if not rs or rs == "cell_storage":
cell_rows = (
db.query(BizProtocolSample.id)
.filter(
BizProtocolSample.tenant_no == tenant_no,
BizProtocolSample.del_flag == 0,
BizProtocolSample.sample_type_id == stid,
)
.all()
)
ids.extend([r[0] for r in cell_rows if r[0]])
if not rs or rs == "research_donation":
donation_rows = (
db.query(BizResearchDonationSample.id)
.filter(
BizResearchDonationSample.tenant_no == tenant_no,
BizResearchDonationSample.del_flag == 0,
BizResearchDonationSample.sample_type_id == stid,
)
.all()
)
ids.extend([r[0] for r in donation_rows if r[0]])
return ids
def list_work_orders(
db: Session,
*,
@@ -1373,6 +1560,7 @@ def list_work_orders(
biz_type: Optional[str] = None,
reception_source: Optional[str] = None,
trigger_source: Optional[str] = None,
sample_type_id: Optional[str] = None,
create_time_start: Optional[str] = None,
create_time_end: Optional[str] = None,
infusion_time_start: Optional[str] = None,
@@ -1489,6 +1677,16 @@ def list_work_orders(
BizQcWorkOrder.create_time
<= _normalize_date_bound(create_time_end, end_of_day=True)
)
stid = (sample_type_id or "").strip()
if stid and tenant_no:
ps_ids = _protocol_sample_ids_for_sample_type(db, tenant_no, stid, rs or None)
if not ps_ids:
q0 = q0.filter(BizQcWorkOrder.id.in_([]))
else:
q0 = q0.filter(
BizQcWorkOrder.work_order_type == "inbound",
BizQcWorkOrder.protocol_sample_id.in_(ps_ids),
)
if user_info:
from app.core.data_scope import apply_data_scope
q0 = apply_data_scope(q0, BizQcWorkOrder, user_info, db, tenant_no)
+14 -47
View File
@@ -30,6 +30,7 @@ from app.models.research_donation import (
BizResearchDonationSample,
BizResearchDonationSampleTransport,
)
from app.core.protocol_status_display import INACTIVE_PROTOCOL_STATUSES
from app.services.web_auth_roles import get_user_role_names
SAMPLE_RECEPTION_EDIT_ROLE = "质量主管"
@@ -37,9 +38,6 @@ SAMPLE_RECEPTION_EDIT_ROLE = "质量主管"
# 科研捐赠表默认 general_ci,样本接收等为 unicode_ci,跨表比较需统一
_UNICODE_CI = "utf8mb4_unicode_ci"
# 协议/捐赠单已作废或属地废弃时不需样本接收
_INACTIVE_PROTOCOL_STATUSES = ("yzf", "sdfq")
def _donation_sample_id_col(col):
"""捐赠样本 ID 与 biz_sample_reception.donation_sample_id 比较时统一排序规则。"""
@@ -173,7 +171,7 @@ def _donation_sample_pending_query(db: Session, tenant_no: str, keyword: Optiona
BizResearchDonationSample.del_flag == 0,
BizResearchDonationSample.tenant_no == tenant_no,
BizResearchDonation.tenant_no == tenant_no,
BizResearchDonation.donation_status.notin_(_INACTIVE_PROTOCOL_STATUSES),
BizResearchDonation.donation_status.notin_(INACTIVE_PROTOCOL_STATUSES),
~received_exists,
)
if keyword and keyword.strip():
@@ -326,7 +324,7 @@ def _sample_pending_query(db: Session, tenant_no: str, keyword: Optional[str] =
BizProtocolSample.del_flag == 0,
BizProtocolSample.tenant_no == tenant_no,
BizCollectionProtocol.tenant_no == tenant_no,
BizCollectionProtocol.protocol_status.notin_(_INACTIVE_PROTOCOL_STATUSES),
BizCollectionProtocol.protocol_status.notin_(INACTIVE_PROTOCOL_STATUSES),
~received_exists,
)
if keyword and keyword.strip():
@@ -860,13 +858,10 @@ def create_sample_reception(
resolved_lab_code: Optional[str] = None
if conclusion == "js":
code_raw = (lab_storage_code or "").strip()
parsed_code, biz_date, seq = lab_code_svc.validate_and_parse_lab_storage_code(
code_raw, reception_time
)
resolved_lab_code = lab_code_svc.validate_lab_storage_code(code_raw)
lab_code_svc.assert_lab_storage_code_available(
db, tenant_no=tenant_no, code=parsed_code
db, tenant_no=tenant_no, code=resolved_lab_code
)
resolved_lab_code = parsed_code
elif (lab_storage_code or "").strip():
raise ValueError("拒收样本无需填写实验室入库编码")
@@ -1001,18 +996,6 @@ def create_sample_reception(
user_id=user_id,
create_dept_id=create_dept_id or "",
)
if resolved_lab_code:
_, biz_date, seq = lab_code_svc.validate_and_parse_lab_storage_code(
resolved_lab_code, reception_time
)
if biz_date is not None and seq is not None:
lab_code_svc.sync_lab_storage_seq_after_use(
db,
tenant_no=tenant_no,
biz_date=biz_date,
seq=seq,
user_id=user_id,
)
db.commit()
db.refresh(obj)
return obj
@@ -1073,34 +1056,18 @@ def update_sample_reception(
from app.crud import sample_reception_lab_code as lab_code_svc
existing_code = (rec.lab_storage_code or "").strip()
if conclusion == "bj":
rec.lab_storage_code = None
elif conclusion == "js":
if existing_code:
incoming = (lab_storage_code or "").strip()
if incoming and incoming != existing_code:
raise ValueError("实验室入库编码保存后不可修改")
else:
code_raw = (lab_storage_code or "").strip()
parsed_code, biz_date, seq = lab_code_svc.validate_and_parse_lab_storage_code(
code_raw, reception_time
)
lab_code_svc.assert_lab_storage_code_available(
db,
tenant_no=tenant_no,
code=parsed_code,
exclude_reception_id=reception_id,
)
rec.lab_storage_code = parsed_code
if biz_date is not None and seq is not None:
lab_code_svc.sync_lab_storage_seq_after_use(
db,
tenant_no=tenant_no,
biz_date=biz_date,
seq=seq,
user_id=user_id,
)
code_raw = (lab_storage_code or "").strip()
parsed_code = lab_code_svc.validate_lab_storage_code(code_raw)
lab_code_svc.assert_lab_storage_code_available(
db,
tenant_no=tenant_no,
code=parsed_code,
exclude_reception_id=reception_id,
)
rec.lab_storage_code = parsed_code
handler_display = (handler_name or "").strip()
if handler_user_id and not handler_display:
+11 -14
View File
@@ -1,4 +1,4 @@
"""实验室入库编码:RK + 接收日期 YYYYMMDD + 3 位序号"""
"""实验室入库编码校验与(遗留)RK 自动占号分配。"""
import re
from datetime import datetime
from typing import List, Optional, Tuple
@@ -25,10 +25,6 @@ def parse_reception_date(reception_date: str) -> str:
return f"{y}{m}{d}"
def reception_time_date_str(reception_time: datetime) -> str:
return reception_time.strftime("%Y%m%d")
def format_lab_storage_code(biz_date: str, seq: int) -> str:
return f"{PREFIX}{biz_date}{seq:0{SEQ_DIGITS}d}"
@@ -165,24 +161,25 @@ def allocate_lab_storage_codes(
return codes
def validate_and_parse_lab_storage_code(
code: str,
reception_time: Optional[datetime] = None,
) -> Tuple[str, Optional[str], Optional[int]]:
"""校验入库编码非空;若为 RK+日期+序号 格式则解析 biz_date/seq 供序号同步,否则仅返回编码本身。"""
def validate_lab_storage_code(code: str) -> str:
"""校验入库编码:非空、长度不超过 32;不限制具体格式。"""
c = (code or "").strip()
if not c:
raise ValueError("实验室入库编码不能为空")
if len(c) > 32:
raise ValueError("实验室入库编码长度不能超过 32 个字符")
return c
def validate_and_parse_lab_storage_code(
code: str,
) -> Tuple[str, Optional[str], Optional[int]]:
"""兼容旧调用:校验编码;若为 RK+日期+序号 则额外解析供占号逻辑使用。"""
c = validate_lab_storage_code(code)
m = LAB_STORAGE_CODE_RE.match(c)
if not m:
return c, None, None
biz_date, seq_str = m.group(1), m.group(2)
if reception_time is not None:
expected_date = reception_time_date_str(reception_time)
if biz_date != expected_date:
raise ValueError("实验室入库编码日期须与样本接收时间日期一致")
return c, biz_date, int(seq_str)
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_core_protocol_status_display_py", "label": "protocol_status_display.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L1"}, {"id": "core_protocol_status_display_resolve_void_type_label", "label": "resolve_void_type_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L38"}, {"id": "core_protocol_status_display_format_protocol_status_label", "label": "format_protocol_status_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L62"}, {"id": "core_protocol_status_display_build_void_type_label_map", "label": "build_void_type_label_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L81"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_core_protocol_status_display_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_protocol_status_display_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_protocol_status_display_py", "target": "app_models_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_protocol_status_display_py", "target": "core_protocol_status_display_resolve_void_type_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L38", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_protocol_status_display_py", "target": "core_protocol_status_display_format_protocol_status_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L62", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_protocol_status_display_py", "target": "core_protocol_status_display_build_void_type_label_map", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L81", "weight": 1.0}, {"source": "core_protocol_status_display_format_protocol_status_label", "target": "core_protocol_status_display_resolve_void_type_label", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L75", "weight": 1.0}], "raw_calls": [{"caller_nid": "core_protocol_status_display_resolve_void_type_label", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L43"}, {"caller_nid": "core_protocol_status_display_resolve_void_type_label", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L48"}, {"caller_nid": "core_protocol_status_display_resolve_void_type_label", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L48"}, {"caller_nid": "core_protocol_status_display_resolve_void_type_label", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L48"}, {"caller_nid": "core_protocol_status_display_resolve_void_type_label", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L57"}, {"caller_nid": "core_protocol_status_display_resolve_void_type_label", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L58"}, {"caller_nid": "core_protocol_status_display_resolve_void_type_label", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py", "source_location": "L59"}, {"caller_nid": "core_protocol_status_display_format_protocol_status_label", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_displLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_work_order_py", "label": "production_work_order.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L1"}, {"id": "crud_production_work_order_apply_exclude_inactive_protocol_filter", "label": "apply_exclude_inactive_protocol_filter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L52"}, {"id": "crud_production_work_order_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L87"}, {"id": "crud_production_work_order_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L94"}, {"id": "crud_production_work_order_soft_delete_sub", "label": "_soft_delete_sub()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L98"}, {"id": "crud_production_work_order_generate_work_order_no", "label": "_generate_work_order_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L110"}, {"id": "crud_production_work_order_wo_to_dict", "label": "_wo_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L129"}, {"id": "crud_production_work_order_enrich_wo_items", "label": "_enrich_wo_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L162"}, {"id": "crud_production_work_order_dec_price", "label": "_dec_price()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L175"}, {"id": "crud_production_work_order_enrich_outbound_items", "label": "_enrich_outbound_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L184"}, {"id": "crud_production_work_order_outbound_work_order_ids_by_keyword", "label": "_outbound_work_order_ids_by_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L319"}, {"id": "crud_production_work_order_reception_source_label", "label": "_reception_source_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L373"}, {"id": "crud_production_work_order_accept_conclusion_label", "label": "_accept_conclusion_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L378"}, {"id": "crud_production_work_order_attach_reception_detail", "label": "_attach_reception_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L383"}, {"id": "crud_production_work_order_attach_outbound_detail", "label": "_attach_outbound_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L414"}, {"id": "crud_production_work_order_wo_to_response_dict", "label": "_wo_to_response_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L467"}, {"id": "crud_production_work_order_create_production_work_order_from_reception", "label": "create_production_work_order_from_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L480"}, {"id": "crud_production_work_order_list_production_work_orders", "label": "list_production_work_orders()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L591"}, {"id": "crud_production_work_order_sync_production_work_order_status_from_tasks", "label": "sync_production_work_order_status_from_tasks()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L715"}, {"id": "crud_production_work_order_get_production_work_order", "label": "get_production_work_order()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L758"}, {"id": "crud_production_work_order_update_production_work_order", "label": "update_production_work_order()", "file_type": "code", "sourcLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "label": "production_task.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1"}, {"id": "crud_production_task_require_requisition_for_catalog_material", "label": "_require_requisition_for_catalog_material()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L53"}, {"id": "crud_production_task_production_conclusion_label", "label": "_production_conclusion_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L105"}, {"id": "crud_production_task_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L112"}, {"id": "crud_production_task_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L116"}, {"id": "crud_production_task_enrich_outbound_task_items", "label": "_enrich_outbound_task_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L123"}, {"id": "crud_production_task_generate_task_no", "label": "_generate_task_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L257"}, {"id": "crud_production_task_task_to_dict", "label": "_task_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L271"}, {"id": "crud_production_task_step_to_dict", "label": "_step_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L300"}, {"id": "crud_production_task_step_reagent_to_dict", "label": "_step_reagent_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L325"}, {"id": "crud_production_task_step_configured_reagent_to_dict", "label": "_step_configured_reagent_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L342"}, {"id": "crud_production_task_step_consumable_to_dict", "label": "_step_consumable_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L358"}, {"id": "crud_production_task_step_output_to_dict", "label": "_step_output_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L375"}, {"id": "crud_production_task_step_data_collection_to_dict", "label": "_step_data_collection_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L387"}, {"id": "crud_production_task_task_input_to_dict", "label": "_task_input_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L399"}, {"id": "crud_production_task_task_output_to_dict", "label": "_task_output_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L421"}, {"id": "crud_production_task_soft_delete_sub", "label": "_soft_delete_sub()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L446"}, {"id": "crud_production_task_resolve_sub_table_order_num", "label": "_resolve_sub_table_order_num()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L459"}, {"id": "crud_production_task_empty_step_sub_tables", "label": "_empty_step_sub_tables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L468"}, {"id": "crud_production_task_batch_load_step_sub_tables", "label": "_batch_load_step_sub_tables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L478"}, {"id": "crud_production_task_step_sub_tables_to_dict", "label": "_step_sub_tables_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L578"}, {"id": "crud_production_task_clone_step_reagents", "label": "_clone_step_reagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_locatiLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_py", "label": "sample_reception.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1"}, {"id": "crud_sample_reception_donation_sample_id_col", "label": "_donation_sample_id_col()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L42"}, {"id": "crud_sample_reception_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L47"}, {"id": "crud_sample_reception_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L51"}, {"id": "crud_sample_reception_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L58"}, {"id": "crud_sample_reception_reception_to_dict", "label": "_reception_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L64"}, {"id": "crud_sample_reception_sample_detail_rows_query", "label": "_sample_detail_rows_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L87"}, {"id": "crud_sample_reception_donation_sample_detail_rows_query", "label": "_donation_sample_detail_rows_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L121"}, {"id": "crud_sample_reception_donation_sample_pending_query", "label": "_donation_sample_pending_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L155"}, {"id": "crud_sample_reception_donation_rows_to_sample_list_items", "label": "_donation_rows_to_sample_list_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L193"}, {"id": "crud_sample_reception_sample_pending_query", "label": "_sample_pending_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L308"}, {"id": "crud_sample_reception_rows_to_sample_list_items", "label": "_rows_to_sample_list_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L346"}, {"id": "crud_sample_reception_list_pending_protocol_samples", "label": "list_pending_protocol_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L471"}, {"id": "crud_sample_reception_list_received_protocol_samples", "label": "list_received_protocol_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L544"}, {"id": "crud_sample_reception_finalize_reception_detail", "label": "_finalize_reception_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L683"}, {"id": "crud_sample_reception_get_reception_by_id", "label": "get_reception_by_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L689"}, {"id": "crud_sample_reception_create_sample_reception", "label": "create_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L757"}, {"id": "crud_sample_reception_can_edit_sample_reception", "label": "_can_edit_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1004"}, {"id": "crud_sample_reception_update_sample_reception", "label": "update_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1019"}, {"id": "crud_sample_reception_attach_production_reception", "label": "_attach_production_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1119"}, {"id": "crud_sample_reception_reception_detail_item", "label": "_reception_detail_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1137"}, {"id": "crud_sample_reception_reception_detail_item_with_production", "label": "_reception_detail_item_with_production(Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_py", "label": "sample_reception.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1"}, {"id": "crud_sample_reception_donation_sample_id_col", "label": "_donation_sample_id_col()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L42"}, {"id": "crud_sample_reception_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L47"}, {"id": "crud_sample_reception_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L51"}, {"id": "crud_sample_reception_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L58"}, {"id": "crud_sample_reception_reception_to_dict", "label": "_reception_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L64"}, {"id": "crud_sample_reception_sample_detail_rows_query", "label": "_sample_detail_rows_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L87"}, {"id": "crud_sample_reception_donation_sample_detail_rows_query", "label": "_donation_sample_detail_rows_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L121"}, {"id": "crud_sample_reception_donation_sample_pending_query", "label": "_donation_sample_pending_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L155"}, {"id": "crud_sample_reception_donation_rows_to_sample_list_items", "label": "_donation_rows_to_sample_list_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L193"}, {"id": "crud_sample_reception_sample_pending_query", "label": "_sample_pending_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L308"}, {"id": "crud_sample_reception_rows_to_sample_list_items", "label": "_rows_to_sample_list_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L346"}, {"id": "crud_sample_reception_list_pending_protocol_samples", "label": "list_pending_protocol_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L471"}, {"id": "crud_sample_reception_list_received_protocol_samples", "label": "list_received_protocol_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L544"}, {"id": "crud_sample_reception_finalize_reception_detail", "label": "_finalize_reception_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L683"}, {"id": "crud_sample_reception_get_reception_by_id", "label": "get_reception_by_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L689"}, {"id": "crud_sample_reception_create_sample_reception", "label": "create_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L757"}, {"id": "crud_sample_reception_can_edit_sample_reception", "label": "_can_edit_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1019"}, {"id": "crud_sample_reception_update_sample_reception", "label": "update_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1034"}, {"id": "crud_sample_reception_attach_production_reception", "label": "_attach_production_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1150"}, {"id": "crud_sample_reception_reception_detail_item", "label": "_reception_detail_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1168"}, {"id": "crud_sample_reception_reception_detail_item_with_production", "label": "_reception_detail_item_with_production(Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "label": "production_task.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1"}, {"id": "crud_production_task_require_requisition_for_catalog_material", "label": "_require_requisition_for_catalog_material()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L53"}, {"id": "crud_production_task_production_conclusion_label", "label": "_production_conclusion_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L105"}, {"id": "crud_production_task_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L112"}, {"id": "crud_production_task_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L116"}, {"id": "crud_production_task_enrich_outbound_task_items", "label": "_enrich_outbound_task_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L123"}, {"id": "crud_production_task_generate_task_no", "label": "_generate_task_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L257"}, {"id": "crud_production_task_task_to_dict", "label": "_task_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L271"}, {"id": "crud_production_task_step_to_dict", "label": "_step_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L300"}, {"id": "crud_production_task_step_reagent_to_dict", "label": "_step_reagent_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L325"}, {"id": "crud_production_task_step_configured_reagent_to_dict", "label": "_step_configured_reagent_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L342"}, {"id": "crud_production_task_step_consumable_to_dict", "label": "_step_consumable_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L358"}, {"id": "crud_production_task_step_output_to_dict", "label": "_step_output_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L375"}, {"id": "crud_production_task_step_data_collection_to_dict", "label": "_step_data_collection_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L387"}, {"id": "crud_production_task_task_input_to_dict", "label": "_task_input_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L399"}, {"id": "crud_production_task_task_output_to_dict", "label": "_task_output_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L421"}, {"id": "crud_production_task_soft_delete_sub", "label": "_soft_delete_sub()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L446"}, {"id": "crud_production_task_resolve_sub_table_order_num", "label": "_resolve_sub_table_order_num()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L459"}, {"id": "crud_production_task_empty_step_sub_tables", "label": "_empty_step_sub_tables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L468"}, {"id": "crud_production_task_batch_load_step_sub_tables", "label": "_batch_load_step_sub_tables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L478"}, {"id": "crud_production_task_step_sub_tables_to_dict", "label": "_step_sub_tables_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L578"}, {"id": "crud_production_task_clone_step_reagents", "label": "_clone_step_reagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_locatiLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_qc_work_order_py", "label": "qc_work_order.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L1"}, {"id": "crud_qc_work_order_resolve_outbound_biz_type_for_schedule", "label": "resolve_outbound_biz_type_for_schedule()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L96"}, {"id": "crud_qc_work_order_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L137"}, {"id": "crud_qc_work_order_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L143"}, {"id": "crud_qc_work_order_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L147"}, {"id": "crud_qc_work_order_reception_source_label", "label": "_reception_source_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L154"}, {"id": "crud_qc_work_order_qc_biz_type_label", "label": "_qc_biz_type_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L159"}, {"id": "crud_qc_work_order_work_order_qc_biz_type", "label": "_work_order_qc_biz_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L164"}, {"id": "crud_qc_work_order_validate_cell_product_id", "label": "_validate_cell_product_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L171"}, {"id": "crud_qc_work_order_enrich_work_order_cell_products", "label": "_enrich_work_order_cell_products()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L183"}, {"id": "crud_qc_work_order_enrich_work_order_step_outputs", "label": "_enrich_work_order_step_outputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L212"}, {"id": "crud_qc_work_order_enrich_work_order_qc_targets", "label": "_enrich_work_order_qc_targets()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L251"}, {"id": "crud_qc_work_order_enrich_outbound_work_orders", "label": "_enrich_outbound_work_orders()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L258"}, {"id": "crud_qc_work_order_outbound_qc_work_order_ids_by_keyword", "label": "_outbound_qc_work_order_ids_by_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L379"}, {"id": "crud_qc_work_order_inbound_qc_work_order_ids_by_mother_name", "label": "_inbound_qc_work_order_ids_by_mother_name()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L426"}, {"id": "crud_qc_work_order_accept_conclusion_label", "label": "_accept_conclusion_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L492"}, {"id": "crud_qc_work_order_load_sample_type_name_map", "label": "_load_sample_type_name_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L497"}, {"id": "crud_qc_work_order_effective_reception_source", "label": "_effective_reception_source()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L509"}, {"id": "crud_qc_work_order_effective_donation_sample_id", "label": "_effective_donation_sample_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L518"}, {"id": "crud_qc_work_order_effective_protocol_sample_id", "label": "_effective_protocol_sample_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L527"}, {"id": "crud_qc_work_order_sample_type_name_for_item", "label": "_sample_type_name_for_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py", "source_location": "L535"}, {"id": "crud_qc_work_order_sample_type_name_for_reception", "label": "_sample_type_name_for_reception()", "file_type": "code", "source_file": "/Users/wuzLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_work_order_py", "label": "production_work_order.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L1"}, {"id": "crud_production_work_order_apply_exclude_inactive_protocol_filter", "label": "apply_exclude_inactive_protocol_filter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L52"}, {"id": "crud_production_work_order_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L81"}, {"id": "crud_production_work_order_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L88"}, {"id": "crud_production_work_order_soft_delete_sub", "label": "_soft_delete_sub()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L92"}, {"id": "crud_production_work_order_generate_work_order_no", "label": "_generate_work_order_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L104"}, {"id": "crud_production_work_order_wo_to_dict", "label": "_wo_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L123"}, {"id": "crud_production_work_order_enrich_wo_items", "label": "_enrich_wo_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L156"}, {"id": "crud_production_work_order_dec_price", "label": "_dec_price()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L169"}, {"id": "crud_production_work_order_enrich_outbound_items", "label": "_enrich_outbound_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L178"}, {"id": "crud_production_work_order_outbound_work_order_ids_by_keyword", "label": "_outbound_work_order_ids_by_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L313"}, {"id": "crud_production_work_order_reception_source_label", "label": "_reception_source_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L367"}, {"id": "crud_production_work_order_accept_conclusion_label", "label": "_accept_conclusion_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L372"}, {"id": "crud_production_work_order_attach_reception_detail", "label": "_attach_reception_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L377"}, {"id": "crud_production_work_order_attach_outbound_detail", "label": "_attach_outbound_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L408"}, {"id": "crud_production_work_order_wo_to_response_dict", "label": "_wo_to_response_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L461"}, {"id": "crud_production_work_order_create_production_work_order_from_reception", "label": "create_production_work_order_from_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L474"}, {"id": "crud_production_work_order_list_production_work_orders", "label": "list_production_work_orders()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L585"}, {"id": "crud_production_work_order_sync_production_work_order_status_from_tasks", "label": "sync_production_work_order_status_from_tasks()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L709"}, {"id": "crud_production_work_order_get_production_work_order", "label": "get_production_work_order()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L752"}, {"id": "crud_production_work_order_update_production_work_order", "label": "update_production_work_order()", "file_type": "code", "sourcLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "label": "production.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1"}, {"id": "api_production_legacy_material_write_gone", "label": "_legacy_material_write_gone()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L75"}, {"id": "api_production_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L79"}, {"id": "api_production_get_current_user_id", "label": "_get_current_user_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L87"}, {"id": "api_production_consumablecreatebody", "label": "ConsumableCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L96"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_production_consumableupdatebody", "label": "ConsumableUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L110"}, {"id": "api_production_list_consumables", "label": "list_consumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L125"}, {"id": "api_production_list_all_consumables", "label": "list_all_consumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L139"}, {"id": "api_production_create_consumable", "label": "create_consumable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L149"}, {"id": "api_production_update_consumable", "label": "update_consumable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L158"}, {"id": "api_production_delete_consumable", "label": "delete_consumable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L168"}, {"id": "api_production_stockinbody", "label": "StockInBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L176"}, {"id": "api_production_stockoutbody", "label": "StockOutBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L182"}, {"id": "api_production_batchstockinitem", "label": "BatchStockInItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L190"}, {"id": "api_production_batchstockinbody", "label": "BatchStockInBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L197"}, {"id": "api_production_batchstockoutitem", "label": "BatchStockOutItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L203"}, {"id": "api_production_batchstockoutbody", "label": "BatchStockOutBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L209"}, {"id": "api_production_consumable_stock_in", "label": "consumable_stock_in()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L218"}, {"id": "api_production_consumable_stock_out", "label": "consumable_stock_out()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L240"}, {"id": "api_production_consumable_batch_stock_in", "label": "consumable_batch_stock_in()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L264"}, {"id": "api_production_consumable_batch_stock_out", "label": "consumable_batch_stock_out()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L282"}, {"id": "api_production_list_consumable_stock_logs", "label": "list_consumable_stock_logs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L301"}, {"id": "api_production_list_all_consumable_stock_logs", "label": "list_all_consumable_stock_logs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L320"}, {"id": "api_production_reagentcreatebody", "label": "ReagentCreateBody"Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "label": "production_work_order.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L1"}, {"id": "schemas_production_work_order_productionworkorderbase", "label": "ProductionWorkOrderBase", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L6"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "schemas_production_work_order_productionworkorderlistquery", "label": "ProductionWorkOrderListQuery", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L10"}, {"id": "schemas_production_work_order_productionworkordercomplete", "label": "ProductionWorkOrderComplete", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L30"}, {"id": "schemas_production_work_order_productionworkorderupdate", "label": "ProductionWorkOrderUpdate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L34"}, {"id": "schemas_production_work_order_productionworkordercreate", "label": "ProductionWorkOrderCreate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L40"}, {"id": "schemas_production_work_order_productionworkorderconfigurebody", "label": "ProductionWorkOrderConfigureBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L50"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "schemas_production_work_order_productionworkorderbase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L6", "weight": 1.0}, {"source": "schemas_production_work_order_productionworkorderbase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "schemas_production_work_order_productionworkorderlistquery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L10", "weight": 1.0}, {"source": "schemas_production_work_order_productionworkorderlistquery", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "schemas_production_work_order_productionworkordercomplete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L30", "weight": 1.0}, {"source": "schemas_production_work_order_productionworkordercomplete", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L30", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "schemas_production_work_order_productionworkorderupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/productLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "label": "production_task.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L1"}, {"id": "schemas_production_task_productiontaskcreate", "label": "ProductionTaskCreate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L6"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "schemas_production_task_productiontaskforwardbody", "label": "ProductionTaskForwardBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L17"}, {"id": "schemas_production_task_productiontaskassigneeupdate", "label": "ProductionTaskAssigneeUpdate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L23"}, {"id": "schemas_production_task_productiontasklistquery", "label": "ProductionTaskListQuery", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L29"}, {"id": "schemas_production_task_productiontasklistbyworkordersbody", "label": "ProductionTaskListByWorkOrdersBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L38"}, {"id": "schemas_production_task_productiontaskupdate", "label": "ProductionTaskUpdate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L48"}, {"id": "schemas_production_task_productiontaskstatusupdate", "label": "ProductionTaskStatusUpdate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L57"}, {"id": "schemas_production_task_taskstepadd", "label": "TaskStepAdd", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L64"}, {"id": "schemas_production_task_taskstepupdate", "label": "TaskStepUpdate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L75"}, {"id": "schemas_production_task_taskstepmaterialitem", "label": "TaskStepMaterialItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L85"}, {"id": "schemas_production_task_taskstepoutputitem", "label": "TaskStepOutputItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L100"}, {"id": "schemas_production_task_taskstepdatacollectionitem", "label": "TaskStepDataCollectionItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L107"}, {"id": "schemas_production_task_taskinputitem", "label": "TaskInputItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L114"}, {"id": "schemas_production_task_taskoutputitem", "label": "TaskOutputItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L123"}, {"id": "schemas_production_task_taskstepreorderbody", "label": "TaskStepReorderBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L152"}, {"id": "schemas_production_task_productiontaskstepdispatchitem", "label": "ProductionTaskStepDispatchItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L158"}, {"id": "schemas_production_task_productiontaskstepdispatchbody", "label": "ProductionTaskStepDispatchBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L165"}, {"id": "schemas_production_task_rationale_39", "label": "\u6309\u591a\u4e2a\u5de5\u5355 ID \u6279\u91cf\u67e5\u8be2\u751f\u4ea7\u4efb\u52a1\uff08POST body\uff0c\u907f\u514d GET URL \u8fc7\u957f\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L39"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_productionLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "label": "production_task.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1"}, {"id": "crud_production_task_require_requisition_for_catalog_material", "label": "_require_requisition_for_catalog_material()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L53"}, {"id": "crud_production_task_production_conclusion_label", "label": "_production_conclusion_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L105"}, {"id": "crud_production_task_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L112"}, {"id": "crud_production_task_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L116"}, {"id": "crud_production_task_enrich_outbound_task_items", "label": "_enrich_outbound_task_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L123"}, {"id": "crud_production_task_generate_task_no", "label": "_generate_task_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L257"}, {"id": "crud_production_task_task_to_dict", "label": "_task_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L271"}, {"id": "crud_production_task_step_to_dict", "label": "_step_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L300"}, {"id": "crud_production_task_step_reagent_to_dict", "label": "_step_reagent_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L325"}, {"id": "crud_production_task_step_configured_reagent_to_dict", "label": "_step_configured_reagent_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L342"}, {"id": "crud_production_task_step_consumable_to_dict", "label": "_step_consumable_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L358"}, {"id": "crud_production_task_step_output_to_dict", "label": "_step_output_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L375"}, {"id": "crud_production_task_step_data_collection_to_dict", "label": "_step_data_collection_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L387"}, {"id": "crud_production_task_task_input_to_dict", "label": "_task_input_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L399"}, {"id": "crud_production_task_task_output_to_dict", "label": "_task_output_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L421"}, {"id": "crud_production_task_soft_delete_sub", "label": "_soft_delete_sub()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L446"}, {"id": "crud_production_task_resolve_sub_table_order_num", "label": "_resolve_sub_table_order_num()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L459"}, {"id": "crud_production_task_empty_step_sub_tables", "label": "_empty_step_sub_tables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L468"}, {"id": "crud_production_task_batch_load_step_sub_tables", "label": "_batch_load_step_sub_tables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L478"}, {"id": "crud_production_task_step_sub_tables_to_dict", "label": "_step_sub_tables_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L578"}, {"id": "crud_production_task_clone_step_reagents", "label": "_clone_step_reagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_locatiLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "label": "sample_reception_lab_code.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L1"}, {"id": "crud_sample_reception_lab_code_parse_reception_date", "label": "parse_reception_date()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L18"}, {"id": "crud_sample_reception_lab_code_format_lab_storage_code", "label": "format_lab_storage_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L28"}, {"id": "crud_sample_reception_lab_code_max_existing_seq", "label": "_max_existing_seq()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L32"}, {"id": "crud_sample_reception_lab_code_sync_sequence_from_existing", "label": "_sync_sequence_from_existing()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L56"}, {"id": "crud_sample_reception_lab_code_allocate_one_seq", "label": "_allocate_one_seq()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L97"}, {"id": "crud_sample_reception_lab_code_allocate_lab_storage_codes", "label": "allocate_lab_storage_codes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L141"}, {"id": "crud_sample_reception_lab_code_validate_lab_storage_code", "label": "validate_lab_storage_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L164"}, {"id": "crud_sample_reception_lab_code_validate_and_parse_lab_storage_code", "label": "validate_and_parse_lab_storage_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L174"}, {"id": "crud_sample_reception_lab_code_assert_lab_storage_code_available", "label": "assert_lab_storage_code_available()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L186"}, {"id": "crud_sample_reception_lab_code_sync_lab_storage_seq_after_use", "label": "sync_lab_storage_seq_after_use()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L204"}, {"id": "crud_sample_reception_lab_code_rationale_1", "label": "\u5b9e\u9a8c\u5ba4\u5165\u5e93\u7f16\u7801\u6821\u9a8c\u4e0e\uff08\u9057\u7559\uff09RK \u81ea\u52a8\u5360\u53f7\u5206\u914d\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L1"}, {"id": "crud_sample_reception_lab_code_rationale_165", "label": "\u6821\u9a8c\u5165\u5e93\u7f16\u7801\uff1a\u975e\u7a7a\u3001\u957f\u5ea6\u4e0d\u8d85\u8fc7 32\uff1b\u4e0d\u9650\u5236\u5177\u4f53\u683c\u5f0f\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L165"}, {"id": "crud_sample_reception_lab_code_rationale_177", "label": "\u517c\u5bb9\u65e7\u8c03\u7528\uff1a\u6821\u9a8c\u7f16\u7801\uff1b\u82e5\u4e3a RK+\u65e5\u671f+\u5e8f\u53f7 \u5219\u989d\u5916\u89e3\u6790\u4f9b\u5360\u53f7\u903b\u8f91\u4f7f\u7528\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L177"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "target": "re", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "target": "sqlalchemy", "relation": "imports_from", "confidLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_py", "label": "sample_reception.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1"}, {"id": "crud_sample_reception_donation_sample_id_col", "label": "_donation_sample_id_col()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L42"}, {"id": "crud_sample_reception_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L47"}, {"id": "crud_sample_reception_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L51"}, {"id": "crud_sample_reception_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L58"}, {"id": "crud_sample_reception_reception_to_dict", "label": "_reception_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L64"}, {"id": "crud_sample_reception_sample_detail_rows_query", "label": "_sample_detail_rows_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L87"}, {"id": "crud_sample_reception_donation_sample_detail_rows_query", "label": "_donation_sample_detail_rows_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L121"}, {"id": "crud_sample_reception_donation_sample_pending_query", "label": "_donation_sample_pending_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L155"}, {"id": "crud_sample_reception_donation_rows_to_sample_list_items", "label": "_donation_rows_to_sample_list_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L193"}, {"id": "crud_sample_reception_sample_pending_query", "label": "_sample_pending_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L308"}, {"id": "crud_sample_reception_rows_to_sample_list_items", "label": "_rows_to_sample_list_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L346"}, {"id": "crud_sample_reception_list_pending_protocol_samples", "label": "list_pending_protocol_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L471"}, {"id": "crud_sample_reception_list_received_protocol_samples", "label": "list_received_protocol_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L544"}, {"id": "crud_sample_reception_finalize_reception_detail", "label": "_finalize_reception_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L683"}, {"id": "crud_sample_reception_get_reception_by_id", "label": "get_reception_by_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L689"}, {"id": "crud_sample_reception_create_sample_reception", "label": "create_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L757"}, {"id": "crud_sample_reception_can_edit_sample_reception", "label": "_can_edit_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1019"}, {"id": "crud_sample_reception_update_sample_reception", "label": "update_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1034"}, {"id": "crud_sample_reception_attach_production_reception", "label": "_attach_production_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1144"}, {"id": "crud_sample_reception_reception_detail_item", "label": "_reception_detail_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1162"}, {"id": "crud_sample_reception_reception_detail_item_with_production", "label": "_reception_detail_item_with_production(Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "label": "production.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1"}, {"id": "api_production_legacy_material_write_gone", "label": "_legacy_material_write_gone()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L75"}, {"id": "api_production_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L79"}, {"id": "api_production_get_current_user_id", "label": "_get_current_user_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L87"}, {"id": "api_production_consumablecreatebody", "label": "ConsumableCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L96"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_production_consumableupdatebody", "label": "ConsumableUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L110"}, {"id": "api_production_list_consumables", "label": "list_consumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L125"}, {"id": "api_production_list_all_consumables", "label": "list_all_consumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L139"}, {"id": "api_production_create_consumable", "label": "create_consumable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L149"}, {"id": "api_production_update_consumable", "label": "update_consumable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L158"}, {"id": "api_production_delete_consumable", "label": "delete_consumable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L168"}, {"id": "api_production_stockinbody", "label": "StockInBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L176"}, {"id": "api_production_stockoutbody", "label": "StockOutBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L182"}, {"id": "api_production_batchstockinitem", "label": "BatchStockInItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L190"}, {"id": "api_production_batchstockinbody", "label": "BatchStockInBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L197"}, {"id": "api_production_batchstockoutitem", "label": "BatchStockOutItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L203"}, {"id": "api_production_batchstockoutbody", "label": "BatchStockOutBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L209"}, {"id": "api_production_consumable_stock_in", "label": "consumable_stock_in()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L218"}, {"id": "api_production_consumable_stock_out", "label": "consumable_stock_out()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L240"}, {"id": "api_production_consumable_batch_stock_in", "label": "consumable_batch_stock_in()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L264"}, {"id": "api_production_consumable_batch_stock_out", "label": "consumable_batch_stock_out()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L282"}, {"id": "api_production_list_consumable_stock_logs", "label": "list_consumable_stock_logs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L301"}, {"id": "api_production_list_all_consumable_stock_logs", "label": "list_all_consumable_stock_logs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L320"}, {"id": "api_production_reagentcreatebody", "label": "ReagentCreateBody"Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_qc_task_py", "label": "qc_task.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L1"}, {"id": "crud_qc_task_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L38"}, {"id": "crud_qc_task_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L44"}, {"id": "crud_qc_task_gen_task_no", "label": "_gen_task_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L48"}, {"id": "crud_qc_task_conclusion_label", "label": "_conclusion_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L61"}, {"id": "crud_qc_task_task_to_dict", "label": "_task_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L66"}, {"id": "crud_qc_task_task_work_order_context", "label": "_task_work_order_context()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L100"}, {"id": "crud_qc_task_merge_work_order_summary_into_task", "label": "_merge_work_order_summary_into_task()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L177"}, {"id": "crud_qc_task_enrich_mine_tasks_with_work_order_summaries", "label": "_enrich_mine_tasks_with_work_order_summaries()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L201"}, {"id": "crud_qc_task_enrich_tasks_reception_fields", "label": "_enrich_tasks_reception_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L221"}, {"id": "crud_qc_task_task_row_to_dict", "label": "_task_row_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L368"}, {"id": "crud_qc_task_create_task_for_line", "label": "create_task_for_line()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L379"}, {"id": "crud_qc_task_list_tasks", "label": "list_tasks()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L426"}, {"id": "crud_qc_task_list_mine_tasks", "label": "list_mine_tasks()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L507"}, {"id": "crud_qc_task_assert_task_assignee", "label": "assert_task_assignee()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L599"}, {"id": "crud_qc_task_list_tasks_by_work_order", "label": "list_tasks_by_work_order()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L606"}, {"id": "crud_qc_task_list_tasks_by_work_order_ids", "label": "list_tasks_by_work_order_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L613"}, {"id": "crud_qc_task_get_task", "label": "get_task()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L643"}, {"id": "crud_qc_task_get_task_detail", "label": "get_task_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L652"}, {"id": "crud_qc_task_start_task", "label": "start_task()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L685"}, {"id": "crud_qc_task_set_task_remark", "label": "_set_task_remark()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L702"}, {"id": "crud_qc_task_complete_task", "label": "complete_task()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L706"}, {"id": "crud_qc_task_apply_task_result", "label": "apply_task_result()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L747"}, {"id": "crud_qc_task_update_task_attachments", "label": "update_task_attachments()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py", "source_location": "L799"}, {"id": "crud_qc_task_create_qc_task_manual", "label": "create_qc_task_manual()", "file_type": "code"Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_py", "label": "sample_reception.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1"}, {"id": "crud_sample_reception_donation_sample_id_col", "label": "_donation_sample_id_col()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L42"}, {"id": "crud_sample_reception_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L47"}, {"id": "crud_sample_reception_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L51"}, {"id": "crud_sample_reception_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L58"}, {"id": "crud_sample_reception_reception_to_dict", "label": "_reception_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L64"}, {"id": "crud_sample_reception_sample_detail_rows_query", "label": "_sample_detail_rows_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L87"}, {"id": "crud_sample_reception_donation_sample_detail_rows_query", "label": "_donation_sample_detail_rows_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L121"}, {"id": "crud_sample_reception_donation_sample_pending_query", "label": "_donation_sample_pending_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L155"}, {"id": "crud_sample_reception_donation_rows_to_sample_list_items", "label": "_donation_rows_to_sample_list_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L193"}, {"id": "crud_sample_reception_sample_pending_query", "label": "_sample_pending_query()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L308"}, {"id": "crud_sample_reception_rows_to_sample_list_items", "label": "_rows_to_sample_list_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L346"}, {"id": "crud_sample_reception_list_pending_protocol_samples", "label": "list_pending_protocol_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L471"}, {"id": "crud_sample_reception_list_received_protocol_samples", "label": "list_received_protocol_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L544"}, {"id": "crud_sample_reception_finalize_reception_detail", "label": "_finalize_reception_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L683"}, {"id": "crud_sample_reception_get_reception_by_id", "label": "get_reception_by_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L689"}, {"id": "crud_sample_reception_create_sample_reception", "label": "create_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L757"}, {"id": "crud_sample_reception_can_edit_sample_reception", "label": "_can_edit_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1015"}, {"id": "crud_sample_reception_update_sample_reception", "label": "update_sample_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1030"}, {"id": "crud_sample_reception_attach_production_reception", "label": "_attach_production_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1138"}, {"id": "crud_sample_reception_reception_detail_item", "label": "_reception_detail_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py", "source_location": "L1156"}, {"id": "crud_sample_reception_reception_detail_item_with_production", "label": "_reception_detail_item_with_production(Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_qc_py", "label": "qc.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L1"}, {"id": "api_qc_thirdpartycompanybody", "label": "ThirdPartyCompanyBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L63"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_qc_thirdpartycompanyupdatebody", "label": "ThirdPartyCompanyUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L81"}, {"id": "api_qc_list_qc_third_party_companies", "label": "list_qc_third_party_companies()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L100"}, {"id": "api_qc_list_qc_third_party_company_options", "label": "list_qc_third_party_company_options()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L122"}, {"id": "api_qc_create_qc_third_party_company", "label": "create_qc_third_party_company()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L136"}, {"id": "api_qc_update_qc_third_party_company", "label": "update_qc_third_party_company()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L171"}, {"id": "api_qc_delete_qc_third_party_company", "label": "delete_qc_third_party_company()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L208"}, {"id": "api_qc_thirdpartyitembody", "label": "ThirdPartyItemBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L228"}, {"id": "api_qc_thirdpartyitemupdatebody", "label": "ThirdPartyItemUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L240"}, {"id": "api_qc_list_qc_third_party_items", "label": "list_qc_third_party_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L253"}, {"id": "api_qc_list_qc_third_party_items_active", "label": "list_qc_third_party_items_active()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L282"}, {"id": "api_qc_create_qc_third_party_item", "label": "create_qc_third_party_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L297"}, {"id": "api_qc_update_qc_third_party_item", "label": "update_qc_third_party_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L326"}, {"id": "api_qc_delete_qc_third_party_item", "label": "delete_qc_third_party_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L357"}, {"id": "api_qc_labtestitembody", "label": "LabTestItemBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L377"}, {"id": "api_qc_labtestitemupdatebody", "label": "LabTestItemUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L388"}, {"id": "api_qc_itemparambody", "label": "ItemParamBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L402"}, {"id": "api_qc_taskresultbody", "label": "TaskResultBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L407"}, {"id": "api_qc_taskcompletewithresultbody", "label": "TaskCompleteWithResultBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L412"}, {"id": "api_qc_list_qc_lab_test_items", "label": "list_qc_lab_test_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L422"}, {"id": "api_qc_list_qc_lab_test_items_active", "label": "list_qc_lab_test_items_active()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L444"}, {"id": "api_qc_create_qc_lab_test_item", "label": "create_qc_lab_test_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L458"}, {"id": "api_qc_update_qc_lab_test_item", "label": "update_qc_lab_test_item()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py", "source_location": "L486"}, {"id": "apiLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_work_order_py", "label": "production_work_order.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L1"}, {"id": "crud_production_work_order_apply_exclude_inactive_protocol_filter", "label": "apply_exclude_inactive_protocol_filter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L53"}, {"id": "crud_production_work_order_apply_planned_start_time_step_filter", "label": "apply_planned_start_time_step_filter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L88"}, {"id": "crud_production_work_order_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L145"}, {"id": "crud_production_work_order_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L152"}, {"id": "crud_production_work_order_soft_delete_sub", "label": "_soft_delete_sub()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L156"}, {"id": "crud_production_work_order_generate_work_order_no", "label": "_generate_work_order_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L168"}, {"id": "crud_production_work_order_wo_to_dict", "label": "_wo_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L187"}, {"id": "crud_production_work_order_enrich_wo_items", "label": "_enrich_wo_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L220"}, {"id": "crud_production_work_order_dec_price", "label": "_dec_price()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L233"}, {"id": "crud_production_work_order_enrich_outbound_items", "label": "_enrich_outbound_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L242"}, {"id": "crud_production_work_order_outbound_work_order_ids_by_keyword", "label": "_outbound_work_order_ids_by_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L377"}, {"id": "crud_production_work_order_reception_source_label", "label": "_reception_source_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L431"}, {"id": "crud_production_work_order_accept_conclusion_label", "label": "_accept_conclusion_label()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L436"}, {"id": "crud_production_work_order_attach_reception_detail", "label": "_attach_reception_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L441"}, {"id": "crud_production_work_order_attach_outbound_detail", "label": "_attach_outbound_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L472"}, {"id": "crud_production_work_order_wo_to_response_dict", "label": "_wo_to_response_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L525"}, {"id": "crud_production_work_order_create_production_work_order_from_reception", "label": "create_production_work_order_from_reception()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L538"}, {"id": "crud_production_work_order_list_production_work_orders", "label": "list_production_work_orders()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L649"}, {"id": "crud_production_work_order_sync_production_work_order_status_from_tasks", "label": "sync_production_work_order_status_from_tasks()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py", "source_location": "L786"}, {"id": "crud_production_work_order_get_production_work_order", "label": "get_production_work_order()", "file_typLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "label": "production_work_order.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L1"}, {"id": "schemas_production_work_order_productionworkorderbase", "label": "ProductionWorkOrderBase", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L6"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "schemas_production_work_order_productionworkorderlistquery", "label": "ProductionWorkOrderListQuery", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L10"}, {"id": "schemas_production_work_order_productionworkordercomplete", "label": "ProductionWorkOrderComplete", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L28"}, {"id": "schemas_production_work_order_productionworkorderupdate", "label": "ProductionWorkOrderUpdate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L32"}, {"id": "schemas_production_work_order_productionworkordercreate", "label": "ProductionWorkOrderCreate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L38"}, {"id": "schemas_production_work_order_productionworkorderconfigurebody", "label": "ProductionWorkOrderConfigureBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L48"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "schemas_production_work_order_productionworkorderbase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L6", "weight": 1.0}, {"source": "schemas_production_work_order_productionworkorderbase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "schemas_production_work_order_productionworkorderlistquery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L10", "weight": 1.0}, {"source": "schemas_production_work_order_productionworkorderlistquery", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "schemas_production_work_order_productionworkordercomplete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L28", "weight": 1.0}, {"source": "schemas_production_work_order_productionworkordercomplete", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py", "source_location": "L28", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_work_order_py", "target": "schemas_production_work_order_productionworkorderupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/productLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "label": "sample_reception_lab_code.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L1"}, {"id": "crud_sample_reception_lab_code_parse_reception_date", "label": "parse_reception_date()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L18"}, {"id": "crud_sample_reception_lab_code_format_lab_storage_code", "label": "format_lab_storage_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L28"}, {"id": "crud_sample_reception_lab_code_max_existing_seq", "label": "_max_existing_seq()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L32"}, {"id": "crud_sample_reception_lab_code_sync_sequence_from_existing", "label": "_sync_sequence_from_existing()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L56"}, {"id": "crud_sample_reception_lab_code_allocate_one_seq", "label": "_allocate_one_seq()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L97"}, {"id": "crud_sample_reception_lab_code_allocate_lab_storage_codes", "label": "allocate_lab_storage_codes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L141"}, {"id": "crud_sample_reception_lab_code_validate_and_parse_lab_storage_code", "label": "validate_and_parse_lab_storage_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L164"}, {"id": "crud_sample_reception_lab_code_assert_lab_storage_code_available", "label": "assert_lab_storage_code_available()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L180"}, {"id": "crud_sample_reception_lab_code_sync_lab_storage_seq_after_use", "label": "sync_lab_storage_seq_after_use()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L198"}, {"id": "crud_sample_reception_lab_code_rationale_1", "label": "\u5b9e\u9a8c\u5ba4\u5165\u5e93\u7f16\u7801\uff1aRK + \u63a5\u6536\u65e5\u671f YYYYMMDD + 3 \u4f4d\u5e8f\u53f7", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L1"}, {"id": "crud_sample_reception_lab_code_rationale_167", "label": "\u6821\u9a8c\u5165\u5e93\u7f16\u7801\u975e\u7a7a\uff1b\u82e5\u4e3a RK+\u65e5\u671f+\u5e8f\u53f7 \u683c\u5f0f\u5219\u89e3\u6790 biz_date/seq \u4f9b\u5e8f\u53f7\u540c\u6b65\uff0c\u5426\u5219\u4ec5\u8fd4\u56de\u7f16\u7801\u672c\u8eab\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L167"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "target": "re", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_lab_code.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_sample_reception_lab_code_py", "target": "app_core_utils"Line truncated
+1 -1
View File
@@ -158,7 +158,7 @@ class TaskStepReorderBody(BaseModel):
class ProductionTaskStepDispatchItem(BaseModel):
model_config = ConfigDict(populate_by_name=True)
step_id: str = Field(..., alias="stepId")
assignee_user_ids: List[str] = Field(..., alias="assigneeUserIds", min_length=1)
assignee_user_ids: List[str] = Field(default_factory=list, alias="assigneeUserIds")
planned_start_time: Optional[str] = Field(None, alias="plannedStartTime")
@@ -22,6 +22,9 @@ class ProductionWorkOrderListQuery(BaseModel):
create_time_end: Optional[str] = None
infusion_time_start: Optional[str] = None
infusion_time_end: Optional[str] = None
planned_start_time_start: Optional[str] = None
planned_start_time_end: Optional[str] = None
exclude_void_protocol: Optional[bool] = Field(True, description="是否排除关联协议无效态的入库工单")
class ProductionWorkOrderComplete(BaseModel):
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+102 -107
View File
@@ -1,11 +1,11 @@
# Graph Report - app (2026-07-02)
# Graph Report - app (2026-07-06)
## Corpus Check
- Large corpus: 217 files · ~262,672 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
- Large corpus: 217 files · ~263,565 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
## Summary
- 4482 nodes · 24094 edges · 47 communities detected
- Extraction: 32% EXTRACTED · 68% INFERRED · 0% AMBIGUOUS · INFERRED: 16404 edges (avg confidence: 0.59)
- 4491 nodes · 24195 edges · 46 communities detected
- Extraction: 32% EXTRACTED · 68% INFERRED · 0% AMBIGUOUS · INFERRED: 16492 edges (avg confidence: 0.59)
- Token cost: 0 input · 0 output
## Community Hubs (Navigation)
@@ -49,19 +49,18 @@
- [[_COMMUNITY_Community 37|Community 37]]
- [[_COMMUNITY_Community 38|Community 38]]
- [[_COMMUNITY_Community 39|Community 39]]
- [[_COMMUNITY_Community 40|Community 40]]
- [[_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]]
## God Nodes (most connected - your core abstractions)
1. `success_response()` - 670 edges
2. `error_response()` - 554 edges
3. `SysUser` - 500 edges
4. `BizQcTaskResult` - 314 edges
3. `SysUser` - 501 edges
4. `BizQcTaskResult` - 315 edges
5. `BizProductionMaterial` - 311 edges
6. `BizProductionMaterialUsage` - 306 edges
7. `BizQcMaterialUsage` - 303 edges
@@ -74,243 +73,239 @@
core/api_request_log_middleware.py → models/models.py
- `get_menu_list()` --calls--> `success_response()` [INFERRED]
api/menu.py → core/response.py
- `sync_lab_storage_seq_after_use()` --calls--> `generate_uuid()` [INFERRED]
crud/sample_reception_lab_code.py → core/utils.py
- `保留匹配节点及其全部上级,供关键词检索后仍能正确组树。` --uses--> `SysDept` [INFERRED]
crud/dept.py → models/models.py
- `物品单位 CRUD(biz_item_unit)` --uses--> `BizItemUnit` [INFERRED]
crud/item_unit.py → models/models.py
- `快递公司 CRUD(biz_express_company)` --uses--> `BizExpressCompany` [INFERRED]
crud/express_company.py → models/models.py
## Communities
### Community 0 - "Community 0"
Cohesion: 0.01
Nodes (847): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+839 more)
Nodes (843): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+835 more)
### Community 1 - "Community 1"
Cohesion: 0.01
Nodes (570): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+562 more)
Nodes (621): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+613 more)
### Community 2 - "Community 2"
Cohesion: 0.06
Nodes (534): CellSampleTypeCreateBody, CellSampleTypeUpdateBody, CollectionRegionCreateBody, CollectionRegionUpdateBody, CustomerCreateBody, CustomerUpdateBody, HospitalCreateBody, HospitalUpdateBody (+526 more)
Nodes (531): BatchRefundFinanceSubmitBody, 细胞存储 — 采集协议单 / 审核 / 财务确认 / 分期预警 API, 与列表接口一致:按租户 + 角色数据权限判断是否可访问该协议单。, If mother info exists but no customerId, create a customer record and link it., RefundFinanceSubmitBody, Base, 细胞产品 CRUD(biz_cell_product), 解析任务样本投入物,返回祖先链单段(样本终止节点)。 (+523 more)
### Community 3 - "Community 3"
Cohesion: 0.01
Nodes (287): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时统一排序规则,避免 Illegal mix of collations。, 跨表字符串等值比较(JOIN / WHERE)时统一为 utf8mb4_unicode_ci。, 将列显式设为 utf8mb4_unicode_ci。, unicode_ci(), build_void_type_label_map(), format_protocol_status_label() (+279 more)
Nodes (330): _normalize_date_bound(), list_ethnics_for_select(), list_clean_rooms(), batch_delete_research_donations(), change_donation_status(), convert_from_storage(), convert_to_storage(), create_research_donation() (+322 more)
### Community 4 - "Community 4"
Cohesion: 0.02
Nodes (245): _normalize_date_bound(), _persist_protocol_sub_resources(), format_date(), generate_id(), optional_date(), parse_date(), 将字符串 / date / datetime 转为 date 或 None, camel_to_snake() (+237 more)
Cohesion: 0.01
Nodes (274): generate_uuid(), create_collection_region(), create_hospital(), get_collection_region(), get_hospital(), _hospital_to_dict(), list_hospitals(), 按医院名称模糊检索,返回医院及所属采集地区信息。 (+266 more)
### Community 5 - "Community 5"
Cohesion: 0.03
Nodes (251): generate_uuid(), batch_stock_in(), batch_stock_out(), consumable_code_exists(), create_consumable(), _dec(), get_consumable(), _is_enabled_status() (+243 more)
Cohesion: 0.02
Nodes (197): _code_exists(), create_material(), _dec(), _fmt_dt(), get_material(), get_material_entity(), get_my_usages(), _is_enabled_status() (+189 more)
### Community 6 - "Community 6"
Cohesion: 0.02
Nodes (122): get_designer_data(), _error_json(), lifespan(), 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, sqlalchemy_exception_handler(), unhandled_exception_handler(), BaseHTTPMiddleware (+114 more)
Nodes (194): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时统一排序规则,避免 Illegal mix of collations。, 跨表字符串等值比较(JOIN / WHERE)时统一为 utf8mb4_unicode_ci。, 将列显式设为 utf8mb4_unicode_ci。, unicode_ci(), build_void_type_label_map(), format_protocol_status_label() (+186 more)
### Community 7 - "Community 7"
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)
Cohesion: 0.02
Nodes (177): api_save_application(), get_protocol_nos_used_in_protocols(), create_dict_type(), dict_type_code_exists(), get_dict_type(), list_dict_types(), 字典类型 CRUD(sys_dict_type), _row_to_dict() (+169 more)
### Community 8 - "Community 8"
Cohesion: 0.02
Nodes (158): map_payments_by_schedule_ids(), 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() (+150 more)
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)
### Community 9 - "Community 9"
Cohesion: 0.03
Nodes (134): list_ethnics_for_select(), apply_data_scope(), _get_child_dept_ids(), get_user_dept_id(), _resolve_user_role_scopes(), _build_tree(), _cascade_soft_delete(), _collect_with_ancestors() (+126 more)
Nodes (147): _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(), create_cell_product() (+139 more)
### Community 10 - "Community 10"
Cohesion: 0.03
Nodes (137): 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() (+129 more)
Cohesion: 0.04
Nodes (147): AccessLogCreateBody, AccessLogUpdateBody, batch_create_storage_slots(), CleanRoomCreateBody, CleanRoomUpdateBody, create_access_log(), create_storage_slot(), create_uv_disinfect_log() (+139 more)
### Community 11 - "Community 11"
Cohesion: 0.04
Nodes (125): AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody, list_storage_slot_stats(), OccupancyCreateBody (+117 more)
Cohesion: 0.03
Nodes (139): _format_attachment_file_size(), urls_to_attachment_list(), _accept_conclusion_label(), apply_planned_start_time_step_filter(), _attach_outbound_detail(), _attach_reception_detail(), complete_production_work_order(), configure_temp_production_work_order() (+131 more)
### Community 12 - "Community 12"
Cohesion: 0.04
Nodes (103): _body_to_payload(), _get_current_user_id(), get_production_reception_by_sample_code(), get_production_reception_detail(), _get_tenant_no(), post_production_reception(), put_production_reception(), _resolve_reception_id() (+95 more)
### Community 13 - "Community 13"
Cohesion: 0.34
Nodes (73): BatchStockInBody, BatchStockInItem, BatchStockOutBody, BatchStockOutItem, ConsumableCreateBody, ConsumablePackCreateBody, ConsumablePackUpdateBody, ConsumableUpdateBody (+65 more)
### Community 14 - "Community 14"
### Community 13 - "Community 13"
Cohesion: 0.06
Nodes (54): _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)。 (+46 more)
Nodes (56): _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)。 (+48 more)
### Community 14 - "Community 14"
Cohesion: 0.11
Nodes (39): _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() (+31 more)
### Community 15 - "Community 15"
Cohesion: 0.11
Nodes (35): batch_create_sterilize_logs(), batch_create_wash_logs(), batch_discard_garments(), batch_soft_delete_garments(), _count_map(), create_garment(), create_sterilize_log(), create_wash_log() (+27 more)
Nodes (36): batch_create_sterilize_logs(), batch_create_wash_logs(), batch_discard_garments(), batch_soft_delete_garments(), _count_map(), create_garment(), create_sterilize_log(), create_wash_log() (+28 more)
### Community 16 - "Community 16"
Cohesion: 0.12
Nodes (11): get_wechat_pay_client(), get_wechat_pay_v2(), 微信支付工具模块 支持微信支付 V3 API 文档参考: https://pay.weixin.qq.com/docs/v3/apis/index.ht, 统一下单接口 (V3) Args: out_trade_no: 商户订单号 total, 申请退款 Args: out_trade_no: 商户订单号 total_amount, 小程序调起支付的二次签名参数(与公众号 JSAPI 规则一致), 统一下单 (V2 API) Args: out_trade_no: 商户订单号 tot, 生成签名 V3 (SHA256 with RSA) (+3 more)
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 17 - "Community 17"
Cohesion: 0.21
Nodes (19): _consumable_row_to_dict(), create_process(), _create_sub_consumable(), _create_sub_data_collection(), _create_sub_output(), _create_sub_reagent(), _data_collection_row_to_dict(), get_process() (+11 more)
### Community 18 - "Community 18"
Cohesion: 0.2
Nodes (19): _code_exists(), create_material(), _dec(), _fmt_dt(), get_material(), get_material_entity(), get_my_usages(), _is_enabled_status() (+11 more)
### Community 19 - "Community 19"
Cohesion: 0.16
Nodes (15): 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() (+7 more)
### Community 20 - "Community 20"
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 21 - "Community 21"
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 22 - "Community 22"
Cohesion: 0.22
Nodes (13): create_collection_region(), create_hospital(), get_collection_region(), get_hospital(), _hospital_names_by_region_ids(), _hospital_to_dict(), list_collection_regions(), list_hospitals() (+5 more)
### Community 23 - "Community 23"
Cohesion: 0.27
Nodes (12): create_equipment(), _dec(), equipment_code_exists(), equipment_is_referenced(), get_equipment(), list_equipments(), _norm_status(), _parse_date() (+4 more)
### Community 24 - "Community 24"
### Community 18 - "Community 18"
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)
### Community 19 - "Community 19"
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 25 - "Community 25"
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 26 - "Community 26"
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 27 - "Community 27"
### Community 20 - "Community 20"
Cohesion: 0.32
Nodes (11): create_env_detect_record(), _generate_record_no(), get_env_detect_record(), _join_csv(), list_env_detect_records(), _resolve_inspector_snapshots(), _resolve_item_snapshot(), _row_to_dict() (+3 more)
### Community 28 - "Community 28"
### Community 21 - "Community 21"
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 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)
### Community 29 - "Community 29"
### Community 23 - "Community 23"
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 24 - "Community 24"
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 25 - "Community 25"
Cohesion: 0.31
Nodes (8): create_express_company(), express_code_exists(), get_express_company(), list_express_companies(), 快递公司 CRUD(biz_express_company), _row_to_dict(), soft_delete_express_company(), update_express_company()
### Community 30 - "Community 30"
### Community 26 - "Community 26"
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 31 - "Community 31"
### Community 27 - "Community 27"
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 32 - "Community 32"
### Community 28 - "Community 28"
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 29 - "Community 29"
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 30 - "Community 30"
Cohesion: 0.31
Nodes (8): 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()
### Community 33 - "Community 33"
### Community 31 - "Community 31"
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 34 - "Community 34"
### Community 32 - "Community 32"
Cohesion: 0.36
Nodes (7): create_site(), get_site(), list_sites(), _row_to_dict(), site_code_exists(), soft_delete_site(), update_site()
### Community 33 - "Community 33"
Cohesion: 0.29
Nodes (2): BaseModel, SoftDeleteModel
### Community 35 - "Community 35"
### Community 34 - "Community 34"
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"
### Community 35 - "Community 35"
Cohesion: 0.5
Nodes (3): BaseSettings, Config, Settings
### Community 37 - "Community 37"
### Community 36 - "Community 36"
Cohesion: 0.5
Nodes (2): _auto_fill_create_dept_id(), ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID
### Community 38 - "Community 38"
### Community 37 - "Community 37"
Cohesion: 0.67
Nodes (2): get_menu_list(), 运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)
### Community 39 - "Community 39"
### Community 38 - "Community 38"
Cohesion: 1.0
Nodes (1): 请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传
### Community 40 - "Community 40"
### Community 39 - "Community 39"
Cohesion: 1.0
Nodes (1): API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)
### Community 43 - "Community 43"
### Community 42 - "Community 42"
Cohesion: 1.0
Nodes (1): 发送订单状态通知 Args: openid: 用户openid ord
### Community 44 - "Community 44"
### Community 43 - "Community 43"
Cohesion: 1.0
Nodes (1): 发送支付成功通知 Args: openid: 用户openid ord
### Community 45 - "Community 45"
### Community 44 - "Community 44"
Cohesion: 1.0
Nodes (1): 发送配送通知 Args: openid: 配送员openid task
### Community 46 - "Community 46"
### Community 45 - "Community 45"
Cohesion: 1.0
Nodes (1): 发送配送时效预警 Args: openid: 配送员openid ta
### Community 47 - "Community 47"
### Community 46 - "Community 46"
Cohesion: 1.0
Nodes (1): 发送退款结果通知 Args: openid: 用户openid ord
### Community 48 - "Community 48"
### Community 47 - "Community 47"
Cohesion: 1.0
Nodes (1): 发送催单通知给配送员 Args: deliver_openid: 配送员openid
## Knowledge Gaps
- **130 isolated node(s):** `刷新会话 TTL(refreshToken 续期;已登录用户每次 API 校验通过后滑动续期)`, `写入 refreshToken(用于 one-time 使用/吊销)`, `根据 token 获取当前用户(包含 Redis 会话校验;会话滑动续期)`, `登录凭据 RSA 解密(与前端 JSEncrypt PKCS#1 v1.5 兼容)。`, `加载 RSA 密钥对:优先环境变量,否则使用内置固定默认密钥。` (+125 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 33`** (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 37`** (4 nodes): `_auto_fill_create_dept_id()`, `get_db()`, `database.py`, `ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID`
- **Thin community `Community 36`** (4 nodes): `_auto_fill_create_dept_id()`, `get_db()`, `database.py`, `ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 38`** (3 nodes): `get_menu_list()`, `menu.py`, `运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)`
- **Thin community `Community 37`** (3 nodes): `get_menu_list()`, `menu.py`, `运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 39`** (2 nodes): `context.py`, `请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传`
- **Thin community `Community 38`** (2 nodes): `context.py`, `请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 40`** (2 nodes): `__init__.py`, `API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)`
- **Thin community `Community 39`** (2 nodes): `__init__.py`, `API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 43`** (1 nodes): `发送订单状态通知 Args: openid: 用户openid ord`
- **Thin community `Community 42`** (1 nodes): `发送订单状态通知 Args: openid: 用户openid ord`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 44`** (1 nodes): `发送支付成功通知 Args: openid: 用户openid ord`
- **Thin community `Community 43`** (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 task`
- **Thin community `Community 44`** (1 nodes): `发送配送通知 Args: openid: 配送员openid task`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 46`** (1 nodes): `发送配送时效预警 Args: openid: 配送员openid ta`
- **Thin community `Community 45`** (1 nodes): `发送配送时效预警 Args: openid: 配送员openid ta`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 47`** (1 nodes): `发送退款结果通知 Args: openid: 用户openid ord`
- **Thin community `Community 46`** (1 nodes): `发送退款结果通知 Args: openid: 用户openid ord`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 48`** (1 nodes): `发送催单通知给配送员 Args: deliver_openid: 配送员openid`
- **Thin community `Community 47`** (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 5`, `Community 7`, `Community 8`, `Community 9`, `Community 11`, `Community 13`, `Community 14`, `Community 20`, `Community 21`, `Community 26`, `Community 28`?**
_High betweenness centrality (0.102) - this node is a cross-community bridge._
- **Why does `generate_uuid()` connect `Community 5` to `Community 0`, `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 17`, `Community 18`, `Community 19`, `Community 20`, `Community 21`, `Community 22`, `Community 23`, `Community 25`, `Community 26`, `Community 27`, `Community 28`, `Community 29`, `Community 30`, `Community 31`, `Community 32`, `Community 33`?**
_High betweenness centrality (0.061) - this node is a cross-community bridge._
- **Why does `success_response()` connect `Community 0` to `Community 1`, `Community 38`, `Community 6`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 14`?**
_High betweenness centrality (0.044) - 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 10`, `Community 12`, `Community 13`, `Community 14`, `Community 18`, `Community 21`, `Community 22`?**
_High betweenness centrality (0.104) - this node is a cross-community bridge._
- **Why does `generate_uuid()` connect `Community 4` to `Community 0`, `Community 1`, `Community 2`, `Community 3`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 13`, `Community 14`, `Community 15`, `Community 17`, `Community 18`, `Community 20`, `Community 21`, `Community 22`, `Community 23`, `Community 24`, `Community 25`, `Community 26`, `Community 27`, `Community 28`, `Community 29`, `Community 30`, `Community 31`, `Community 32`?**
_High betweenness centrality (0.074) - this node is a cross-community bridge._
- **Why does `success_response()` connect `Community 0` to `Community 1`, `Community 3`, `Community 37`, `Community 7`, `Community 8`, `Community 10`, `Community 13`?**
_High betweenness centrality (0.062) - this node is a cross-community bridge._
- **Are the 737 inferred relationships involving `str` (e.g. with `unhandled_exception_handler()` and `get_current_user_by_token()`) actually correct?**
_`str` has 737 INFERRED edges - model-reasoned connections that need verification._
- **Are the 669 inferred relationships involving `success_response()` (e.g. with `list_storage_release_reviews()` and `get_storage_release_review_detail()`) actually correct?**
_`success_response()` has 669 INFERRED edges - model-reasoned connections that need verification._
- **Are the 553 inferred relationships involving `error_response()` (e.g. with `_json_error_response()` and `list_storage_release_reviews()`) actually correct?**
_`error_response()` has 553 INFERRED edges - model-reasoned connections that need verification._
- **Are the 498 inferred relationships involving `SysUser` (e.g. with `数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3` and `从 SysUser 读取用户的 dept_id。`) actually correct?**
_`SysUser` has 498 INFERRED edges - model-reasoned connections that need verification._
- **Are the 499 inferred relationships involving `SysUser` (e.g. with `数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3` and `从 SysUser 读取用户的 dept_id。`) actually correct?**
_`SysUser` has 499 INFERRED edges - model-reasoned connections that need verification._
+4 -4
View File
@@ -57,12 +57,12 @@
</div>
<div id="legend"></div>
</div>
<div id="stats">4482 nodes &middot; 24094 edges &middot; 53 communities</div>
<div id="stats">4491 nodes &middot; 24195 edges &middot; 52 communities</div>
</div>
<script>
const RAW_NODES = [{"id": "init_py", "label": "__init__.py", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 41, "community_name": "Community 41", "source_file": "__init__.py", "file_type": "code", "degree": 0}, {"id": "main_py", "label": "main.py", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "main.py", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 7}, {"id": "app_main_lifespan", "label": "lifespan()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "lifespan()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_error_json", "label": "_error_json()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "_error_json()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 3}, {"id": "app_main_sqlalchemy_exception_handler", "label": "sqlalchemy_exception_handler()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "sqlalchemy_exception_handler()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_unhandled_exception_handler", "label": "unhandled_exception_handler()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "unhandled_exception_handler()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 5}, {"id": "app_main_mask_secret", "label": "_mask_secret()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "_mask_secret()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_root", "label": "root()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "root()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_health_check", "label": "health_check()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "health_check()", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_rationale_81", "label": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "app_main_rationale_92", "label": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "community": 6, "community_name": "Community 6", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "tasks_init_py", "label": "__init__.py", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 6, "community_name": "Community 6", "source_file": "tasks/__init__.py", "file_type": "code", "degLine truncated
const RAW_EDGES = [{"from": "main_py", "to": "app_main_lifespan", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_error_json", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_sqlalchemy_exception_handler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_unhandled_exception_handler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_mask_secret", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_root", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_py", "to": "app_main_health_check", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_lifespan", "to": "core_login_crypto_ensure_initialized", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_lifespan", "to": "tasks_init_init_scheduled_tasks", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_lifespan", "to": "tasks_init_shutdown_scheduler", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_error_json", "to": "app_main_sqlalchemy_exception_handler", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_error_json", "to": "app_main_unhandled_exception_handler", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_sqlalchemy_exception_handler", "to": "app_main_rationale_81", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_sqlalchemy_exception_handler", "to": "exception", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_unhandled_exception_handler", "to": "app_main_rationale_92", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_main_unhandled_exception_handler", "to": "exception", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_unhandled_exception_handler", "to": "str", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_81", "to": "core_api_request_log_middleware_apirequestlogmiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_81", "to": "core_api_crypto_middleware_apicryptomiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_92", "to": "core_api_request_log_middleware_apirequestlogmiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "app_main_rationale_92", "to": "core_api_crypto_middleware_apicryptomiddleware", "label": "uses", "title": "uses [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "tasks_init_py", "to": "tasks_init_init_scheduled_tasks", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "tasks_init_py", "to": "tasks_init_shutdown_scheduler", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_py", "to": "core_auth_redis_session_enabled", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_py", "to": "core_auth_get_redis_client", "labeLine truncated
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 880}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 609}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 540}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 316}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 281}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 269}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 193}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 191}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 174}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 148}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 145}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 130}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 116}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 82}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 63}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 38}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 31}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 21}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 20}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 19}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 17}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 16}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 15}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 14}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 13}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 13}, {"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": 12}, {"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": 10}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 10}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 8}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 7}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 4}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 4}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 3}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 2}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 2}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 1}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 1}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 1}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 1}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 1}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 1}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 1}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 1}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 1}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 1}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 1}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 1}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 0}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 0}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 0}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 0}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 0}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 0}];
const RAW_NODES = [{"id": "init_py", "label": "__init__.py", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 40, "community_name": "Community 40", "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": 879}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 662}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 537}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 378}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 304}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 210}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 208}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 195}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 180}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 156}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 153}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 152}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 82}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 66}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 40}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 39}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 29}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 14}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 14}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 13}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 12}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 12}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 12}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 12}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 11}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 10}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 10}, {"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": 8}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 7}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 4}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 4}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 3}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 2}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 2}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 1}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 1}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 1}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 1}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 1}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 1}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 1}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 1}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 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": 0}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 0}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 0}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 0}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 0}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 0}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 0}];
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
function esc(s) {
+10850 -9557
View File
File diff suppressed because it is too large. Load diff
+11 -11
View File
@@ -18,7 +18,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/core/db_collation.py": 1779890253.2250955,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/context.py": 1779242263.6923044,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/utils.py": 1780305790.0009735,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py": 1782893588.4525878,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/protocol_status_display.py": 1783303208.7618413,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/storage.py": 1782437555.6682527,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/order_status_compat.py": 1778578258.0426462,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/exceptions.py": 1778578258.0413945,
@@ -45,14 +45,14 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/outbound_release_review.py": 1779968230.0408957,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/price_list.py": 1778578258.096609,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/user.py": 1778578258.099944,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py": 1781583181.398287,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_work_order.py": 1783305541.0077753,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/material.py": 1781502974.2628305,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/storage_occupancy.py": 1779418054.7652438,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/quotation.py": 1778578258.0991468,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/product_parameter_value.py": 1778578258.0980055,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/product_review_media.py": 1778578258.0986822,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/product_parameter.py": 1778578258.0977957,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py": 1782717312.10853,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py": 1783306300.9945476,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/product_detail_media.py": 1778578258.0973988,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/product_banner.py": 1778578258.097102,
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/region.py": 1778578258.099429,
@@ -76,7 +76,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/schemas/leave.py": 1778666088.7680702,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_release_review.py": 1782894735.4362206,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/equipment.py": 1782717312.9816003,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py": 1782961153.677056,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task.py": 1783327846.172845,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/process_route.py": 1782717483.0699635,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_code.py": 1782709076.5173395,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_task_result.py": 1782379630.9640372,
@@ -87,7 +87,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_check_result.py": 1779255909.8554008,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_material_stock_batch.py": 1782404955.550011,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/user.py": 1780539127.1805215,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py": 1782719112.3810234,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py": 1783305553.0221446,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/material.py": 1781522283.6438622,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/dict_type.py": 1779265621.5212462,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_occupancy.py": 1782711147.4996655,
@@ -99,7 +99,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/material_usage.py": 1782894693.7808309,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_material_usage.py": 1781513732.7796721,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/sop_document.py": 1779265721.9928973,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py": 1782894736.1688397,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py": 1783307214.537781,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/inbound_sample_special.py": 1782890475.769446,
"/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": 1782722028.9202535,
@@ -142,7 +142,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/env_detect_item.py": 1781145689.9525824,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/process_category.py": 1779265700.0606413,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/item_unit.py": 1779265653.7504313,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py": 1782894735.0364947,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_work_order.py": 1783327846.1726813,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/outbound_handover_inventory.py": 1781598316.476379,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/env_detect_record.py": 1782376492.2365673,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/outbound_release_material.py": 1781612877.0137436,
@@ -151,7 +151,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/customer.py": 1779686149.7508218,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/workflow.py": 1779265993.677624,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_sms_notification.py": 1781063495.0317714,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py": 1782891223.4996026,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception.py": 1783308348.4658842,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/consumable_pack.py": 1779265715.416005,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_inspection_batch.py": 1782984951.4695187,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_material_prep.py": 1781514953.3551314,
@@ -159,7 +159,7 @@
"/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": 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/sample_reception_lab_code.py": 1783308340.5854337,
"/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,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/consumable_stock_log.py": 1779515477.284446,
@@ -177,7 +177,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py": 1782122639.96012,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/material.py": 1782894693.6582327,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/production_material.py": 1782404982.2474263,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py": 1782889888.587752,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py": 1783322915.4871485,
"/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": 1782982337.6828277,
@@ -204,7 +204,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/api/sample_sms_notification.py": 1780325524.907156,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/sample_reception.py": 1782719108.3741593,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/insurance_company.py": 1781410837.9443986,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py": 1782882295.827764,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py": 1783305567.650697,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/protocol_sample_collection.py": 1780457788.2093296,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/leave.py": 1779266168.8693042,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/clinical_payment.py": 1781750841.074568,
@@ -0,0 +1,65 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01 · 现网基线 · 样本类型过滤 Demo</title>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="_shared.css" />
</head>
<body>
<header class="demo-banner">
<div>
<h1><span class="demo-badge">01 现网基线</span> 质检工单 · 样本类型过滤 Demo</h1>
<p>筛选栅格内下拉框 · 与关键词、工单状态并列 · 需点击「搜索」或 debounce 触发</p>
</div>
<div class="demo-banner__actions">
<a href="index.html">← 选型索引</a>
<a href="compare-all.html">并排对比</a>
<a href="02-chip-strip.html">02 Chip 条 →</a>
</div>
</header>
<div class="page-wrap">
<section class="panel" id="panel-root">
<div id="page-shell"></div>
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出附件</button>
<button type="button" class="btn">批量操作</button>
</div>
<div class="list-body" id="card-list"></div>
</section>
<p class="style-note">
<strong>现网对照:</strong>样本类型作为 filter-grid 第四列,选项来自
<code>fetchCellSampleTypeList</code>,切换 Tab 时清空。
<div class="pros-cons">
<div class="pro">✓ 与现有筛选表单一致,开发改动最小</div>
<div class="con">✗ 类型选项藏在下拉里,无法一眼看到可选范围与数量</div>
<div class="con">✗ 占用筛选栅格一列,与其他条件竞争横向空间</div>
</div>
</p>
</div>
<script src="_demo-shell.js"></script>
<script>
document.getElementById('page-shell').innerHTML =
buildMainTabsHtml() + buildFilterHtml({ includeSampleTypeDropdown: true })
document.getElementById('card-list').innerHTML = buildCardListHtml().replace(
/^<div class="list-body">|<\/div>$/g,
''
)
const selectEl = document.querySelector('#filter-sample-type-select')
const listEl = document.getElementById('card-list')
function applyFilter(typeId) {
listEl.innerHTML = buildCardListHtml(typeId || '').replace(/^<div class="list-body">|<\/div>$/g, '')
}
selectEl.addEventListener('change', () => applyFilter(selectEl.value))
applyFilter('')
</script>
</body>
</html>
@@ -0,0 +1,62 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>02 · Chip 条 · 样本类型过滤 Demo</title>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="_shared.css" />
</head>
<body>
<header class="demo-banner">
<div>
<h1><span class="demo-badge">02 Chip 条</span> 质检工单 · 样本类型过滤 Demo</h1>
<p>筛选区下方独立一行 · 胶囊 Chip + 数量 · 点击即筛 · 筛选栅格不再占「样本类型」列</p>
</div>
<div class="demo-banner__actions">
<a href="index.html">← 选型索引</a>
<a href="01-baseline-dropdown.html">← 01</a>
<a href="03-segmented-track.html">03 →</a>
</div>
</header>
<div class="page-wrap">
<section class="panel" id="panel-root">
<div id="page-shell"></div>
<div class="sample-type-zone sample-type-zone--bordered">
<div class="sample-type-zone__label">样本类型</div>
<div class="type-chips" id="type-chips"></div>
<p class="sample-type-zone__hint" id="filter-hint"></p>
</div>
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出附件</button>
<button type="button" class="btn">批量操作</button>
</div>
<div class="list-body" id="card-list"></div>
</section>
<p class="style-note">
<strong>推荐:</strong>把样本类型从「表单字段」提升为「快捷筛选条」,所有选项平铺可见;数量角标帮助判断工作量分布。
<div class="pros-cons">
<div class="pro">✓ 选项与数量一目了然,单击即筛,符合高频切换场景</div>
<div class="pro">✓ 释放 filter-grid 一列,关键词/状态/时间布局更宽松</div>
<div class="con">✗ 类型超过 6~8 个时需换行或横向滚动</div>
</div>
</p>
</div>
<script src="_demo-shell.js"></script>
<script>
document.getElementById('page-shell').innerHTML =
buildMainTabsHtml() + buildFilterHtml({ includeSampleTypeDropdown: false })
document.getElementById('type-chips').innerHTML = buildTypeChipsHtml()
initSampleTypeFilter('#panel-root', { listContainerSelector: '#card-list' })
</script>
</body>
</html>
@@ -0,0 +1,65 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>03 · Segmented · 样本类型过滤 Demo</title>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="_shared.css" />
</head>
<body>
<header class="demo-banner">
<div>
<h1><span class="demo-badge">03 Segmented</span> 质检工单 · 样本类型过滤 Demo</h1>
<p>主 Tab 与筛选区之间 · 灰底轨道 + 白底激活块 · 与 panel-pill-tabs 视觉语言一致</p>
</div>
<div class="demo-banner__actions">
<a href="index.html">← 选型索引</a>
<a href="02-chip-strip.html">← 02</a>
<a href="04-sub-tab-bar.html">04 →</a>
</div>
</header>
<div class="page-wrap">
<section class="panel" id="panel-root">
<div id="page-shell"></div>
<div class="sample-type-zone" style="padding-top: 12px; padding-bottom: 4px">
<div class="sample-type-zone__label">按样本类型</div>
<div class="type-segmented" id="type-segmented"></div>
<p class="sample-type-zone__hint" id="filter-hint"></p>
</div>
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出附件</button>
<button type="button" class="btn">批量操作</button>
</div>
<div class="list-body" id="card-list"></div>
</section>
<p class="style-note">
<strong>推荐:</strong>与质检主 Tab 的 <code>panel-pill-tabs</code> 形成「双层分段」——上层业务类型、下层样本类型,层级清晰。
<div class="pros-cons">
<div class="pro">✓ 视觉与现网 Tab 栏统一,用户学习成本低</div>
<div class="pro">✓ 位置在筛选区之上,表达「先定类型、再细筛」的信息架构</div>
<div class="con">✗ 选项名较长时轨道需横向滚动</div>
</div>
</p>
</div>
<script src="_demo-shell.js"></script>
<script>
document.getElementById('page-shell').innerHTML =
buildMainTabsHtml() + buildFilterHtml({ includeSampleTypeDropdown: false })
document.getElementById('type-segmented').innerHTML = buildTypeSegmentedHtml()
initSampleTypeFilter('#panel-root', {
btnSelector: '.type-segmented__btn',
listContainerSelector: '#card-list'
})
</script>
</body>
</html>
@@ -0,0 +1,68 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>04 · 二级 Tab · 样本类型过滤 Demo</title>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="_shared.css" />
</head>
<body>
<header class="demo-banner">
<div>
<h1><span class="demo-badge">04 二级 Tab</span> 质检工单 · 样本类型过滤 Demo</h1>
<p>主 Tab 下方全宽下划线 Tab · 带数量 · 语义上等同「子 Tab」而非表单字段</p>
</div>
<div class="demo-banner__actions">
<a href="index.html">← 选型索引</a>
<a href="03-segmented-track.html">← 03</a>
<a href="05-toolbar-chips.html">05 →</a>
</div>
</header>
<div class="page-wrap">
<section class="panel" id="panel-root">
<div id="page-shell"></div>
<div class="sample-type-zone" style="padding-top: 8px; padding-bottom: 0">
<nav class="type-sub-tabs" role="tablist" aria-label="样本类型" id="type-sub-tabs"></nav>
</div>
<div id="filter-after-tabs"></div>
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出附件</button>
<button type="button" class="btn">批量操作</button>
</div>
<div class="list-body" id="card-list"></div>
</section>
<p class="style-note">
<strong>适用:</strong>样本类型在业务上接近「子视图」而非「附加条件」时;与 Element Plus 下划线 Tab 一致。
<div class="pros-cons">
<div class="pro">✓ 层级语义最强:质检类型 → 样本类型 → 列表</div>
<div class="pro">✓ 切换时可直接 debounce 拉数,不必点搜索</div>
<div class="con">✗ 与主 Tab 形态相似,两层 Tab 可能略拥挤</div>
</div>
</p>
</div>
<script src="_demo-shell.js"></script>
<script>
document.getElementById('page-shell').innerHTML = buildMainTabsHtml()
document.getElementById('filter-after-tabs').innerHTML = buildFilterHtml({
includeSampleTypeDropdown: false
})
document.getElementById('type-sub-tabs').innerHTML = buildTypeSubTabsHtml()
initSampleTypeFilter('#panel-root', {
btnSelector: '.type-sub-tabs__btn',
listContainerSelector: '#card-list',
hintSelector: null
})
</script>
</body>
</html>
@@ -0,0 +1,53 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>05 · 工具栏 Chip · 样本类型过滤 Demo</title>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="_shared.css" />
</head>
<body>
<header class="demo-banner">
<div>
<h1><span class="demo-badge">05 工具栏 Chip</span> 质检工单 · 样本类型过滤 Demo</h1>
<p>列表工具栏内联 · 与批量操作同排 · 最省纵向空间</p>
</div>
<div class="demo-banner__actions">
<a href="index.html">← 选型索引</a>
<a href="04-sub-tab-bar.html">← 04</a>
<a href="06-left-rail.html">06 →</a>
</div>
</header>
<div class="page-wrap">
<section class="panel" id="panel-root">
<div id="page-shell"></div>
<div id="toolbar-slot"></div>
<div class="list-body" id="card-list"></div>
</section>
<p class="style-note">
<strong>适用:</strong>样本类型数量少(≤4)、且用户更关注列表操作时;把过滤做成「列表上下文快捷项」。
<div class="pros-cons">
<div class="pro">✓ 零额外纵向区块,页面最紧凑</div>
<div class="con">✗ 工具栏已含「已选 / 导出 / 批量」,再加 Chip 易拥挤</div>
<div class="con">✗ 过滤与操作混排,语义弱于独立筛选条</div>
</div>
</p>
</div>
<script src="_demo-shell.js"></script>
<script>
document.getElementById('page-shell').innerHTML =
buildMainTabsHtml() + buildFilterHtml({ includeSampleTypeDropdown: false })
document.getElementById('toolbar-slot').innerHTML = buildToolbarHtml({
includeTypeChips: true
})
initSampleTypeFilter('#panel-root', { listContainerSelector: '#card-list' })
</script>
</body>
</html>
@@ -0,0 +1,68 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>06 · 左栏导航 · 样本类型过滤 Demo</title>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="_shared.css" />
</head>
<body>
<header class="demo-banner">
<div>
<h1><span class="demo-badge">06 左栏导航</span> 质检工单 · 样本类型过滤 Demo</h1>
<p>列表区左侧固定类型导航 · 右侧协议卡片 · 适合类型较多、需纵向扫视</p>
</div>
<div class="demo-banner__actions">
<a href="index.html">← 选型索引</a>
<a href="05-toolbar-chips.html">← 05</a>
<a href="07-icon-cards.html">07 →</a>
</div>
</header>
<div class="page-wrap">
<section class="panel" id="panel-root">
<div id="page-shell"></div>
<div class="panel-with-rail">
<aside class="type-rail">
<div class="type-rail__title">样本类型</div>
<div id="type-rail"></div>
</aside>
<div class="panel-rail-main">
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出附件</button>
<button type="button" class="btn">批量操作</button>
</div>
<div class="list-body" id="card-list"></div>
</div>
</div>
</section>
<p class="style-note">
<strong>适用:</strong>未来样本类型继续增加(>6)时;左栏可扩展滚动,右侧列表宽度仍充足(1280 容器下约 200px 侧栏)。
<div class="pros-cons">
<div class="pro">✓ 类型再多也不挤占主内容区头部</div>
<div class="pro">✓ 与邮件/文档类「文件夹导航」心智一致</div>
<div class="con">✗ 改动布局较大,窄屏需折叠为 Chip(CSS 已做响应式)</div>
</div>
</p>
</div>
<script src="_demo-shell.js"></script>
<script>
document.getElementById('page-shell').innerHTML =
buildMainTabsHtml() + buildFilterHtml({ includeSampleTypeDropdown: false })
document.getElementById('type-rail').innerHTML = buildTypeRailHtml()
initSampleTypeFilter('#panel-root', {
btnSelector: '.type-rail__btn',
listContainerSelector: '#card-list'
})
</script>
</body>
</html>
@@ -0,0 +1,65 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>07 · 图标卡片 · 样本类型过滤 Demo</title>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="_shared.css" />
</head>
<body>
<header class="demo-banner">
<div>
<h1><span class="demo-badge">07 图标卡片</span> 质检工单 · 样本类型过滤 Demo</h1>
<p>利用样本类型 Logo / 首字做卡片宫格 · 视觉识别强 · 可对接 <code>type_logo</code> 字段</p>
</div>
<div class="demo-banner__actions">
<a href="index.html">← 选型索引</a>
<a href="06-left-rail.html">← 06</a>
<a href="compare-all.html">并排对比</a>
</div>
</header>
<div class="page-wrap">
<section class="panel" id="panel-root">
<div id="page-shell"></div>
<div class="sample-type-zone sample-type-zone--bordered">
<div class="sample-type-zone__label">选择样本类型</div>
<div class="type-icon-grid" id="type-icon-grid"></div>
<p class="sample-type-zone__hint" id="filter-hint"></p>
</div>
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出附件</button>
<button type="button" class="btn">批量操作</button>
</div>
<div class="list-body" id="card-list"></div>
</section>
<p class="style-note">
<strong>适用:</strong>样本类型有明确品牌 Logo(<code>biz_cell_sample_type.type_logo</code>),且业务人员按图标记忆类型。
<div class="pros-cons">
<div class="pro">✓ 识别度最高,「全部」与具体类型权重对等</div>
<div class="pro">✓ 后续可展示存储年限、单价等摘要(卡片扩展位)</div>
<div class="con">✗ 纵向占用约 120px+,列表首屏可见卡片变少</div>
</div>
</p>
</div>
<script src="_demo-shell.js"></script>
<script>
document.getElementById('page-shell').innerHTML =
buildMainTabsHtml() + buildFilterHtml({ includeSampleTypeDropdown: false })
document.getElementById('type-icon-grid').innerHTML = buildTypeIconGridHtml()
initSampleTypeFilter('#panel-root', {
btnSelector: '.type-icon-card',
listContainerSelector: '#card-list'
})
</script>
</body>
</html>
@@ -0,0 +1,314 @@
/** 质检工单 · 样本类型过滤 Demo 通用数据与交互 */
const SAMPLE_TYPES = [
{ id: '', name: '全部', short: '全', count: 18, icon: '∑' },
{
id: '562040C071C44473AD3BCD7C84A70354',
name: '围产期造血干细胞',
short: '造',
count: 7,
icon: '造'
},
{
id: '7BA21E5B7B0D4E5F9FE8076C8FC76959',
name: '脐带间充质干细胞',
short: '脐',
count: 6,
icon: '脐'
},
{
id: '2B3E7EC8EFFC4D9A904BBC34D55668DA',
name: '胎盘亚全能干细胞',
short: '胎',
count: 5,
icon: '胎'
}
]
const MOCK_PROTOCOLS = [
{
id: 'p1',
code: 'ZKZX-20260701-001',
typeId: '562040C071C44473AD3BCD7C84A70354',
typeName: '围产期造血干细胞',
mother: '张女士',
status: '进行中',
statusType: 'warning',
woNo: 'QC-IN-20260701-003',
sub: '2 个样本 · 1/2 已配置'
},
{
id: 'p2',
code: 'ZKQD-20260702-008',
typeId: '7BA21E5B7B0D4E5F9FE8076C8FC76959',
typeName: '脐带间充质干细胞',
mother: '李女士',
status: '待配置',
statusType: 'success',
woNo: 'QC-IN-20260702-001',
sub: '1 个样本 · 0/1 已配置'
},
{
id: 'p3',
code: 'ZKTP-20260628-012',
typeId: '2B3E7EC8EFFC4D9A904BBC34D55668DA',
typeName: '胎盘亚全能干细胞',
mother: '王女士',
status: '已完成',
statusType: 'success',
woNo: 'QC-IN-20260628-009',
sub: '1 个样本 · 全部完成'
},
{
id: 'p4',
code: 'ZKZX-20260703-015',
typeId: '562040C071C44473AD3BCD7C84A70354',
typeName: '围产期造血干细胞',
mother: '赵女士',
status: '进行中',
statusType: 'warning',
woNo: 'QC-IN-20260703-002',
sub: '3 个样本 · 2/3 已配置'
}
]
function buildMainTabsHtml() {
const tabs = [
{ label: '细胞存储质检', active: true, count: 12 },
{ label: '科研捐赠质检', active: false, count: 3 },
{ label: '中试服务质检', active: false, count: 5 },
{ label: '基础实验质检', active: false, count: 2 },
{ label: '临时质检', active: false, count: 1 }
]
return `
<div class="qc-main-tabs">
<div class="qc-main-tabs__track" role="tablist">
${tabs
.map(
(t) => `
<button type="button" class="qc-main-tabs__btn${t.active ? ' is-active' : ''}" role="tab">
${t.label}
<span class="qc-main-tabs__badge${t.count === 0 ? ' qc-main-tabs__badge--zero' : ''}">${t.count}</span>
</button>`
)
.join('')}
</div>
</div>`
}
function buildFilterHtml(options = {}) {
const { includeSampleTypeDropdown = false, selectedTypeName = '全部' } = options
const sampleTypeField = includeSampleTypeDropdown
? `
<div class="filter-item">
<label>样本类型</label>
<select id="filter-sample-type-select">
${SAMPLE_TYPES.map(
(t) =>
`<option value="${t.id}"${t.name === selectedTypeName ? ' selected' : ''}>${t.name === '全部' ? '全部' : t.name}</option>`
).join('')}
</select>
</div>`
: ''
return `
<div class="filter-block">
<div class="filter-grid">
<div class="filter-item">
<label>关键词</label>
<div class="fake-input is-placeholder">协议号 / 样本编号 / 工单号</div>
</div>
<div class="filter-item">
<label>工单状态</label>
<div class="fake-input is-placeholder">全部</div>
</div>
${sampleTypeField}
<div class="filter-item">
<label>工单来源</label>
<div class="fake-input is-placeholder">全部</div>
</div>
<div class="filter-item">
<label>创建时间</label>
<div class="fake-input is-placeholder">开始日期 — 结束日期</div>
</div>
</div>
<div class="filter-actions-row">
<button type="button" class="btn">重置</button>
<button type="button" class="btn btn-primary">搜索</button>
</div>
</div>`
}
function buildToolbarHtml(options = {}) {
const { includeTypeChips = false, activeTypeId = '' } = options
const chips = includeTypeChips
? `
<span class="toolbar-type-divider" aria-hidden="true"></span>
${SAMPLE_TYPES.map(
(t) => `
<button type="button" class="type-chip sample-type-btn" data-type-id="${t.id}">
${t.name}
<span class="type-chip__count">${t.count}</span>
</button>`
).join('')}`
: ''
return `
<div class="list-toolbar">
<div class="list-toolbar__left">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出附件</button>
<button type="button" class="btn">批量操作</button>
${chips}
</div>
<div class="list-toolbar__right">
<button type="button" class="btn">刷新</button>
</div>
</div>`
}
function buildCardListHtml(activeTypeId = '') {
const visible = MOCK_PROTOCOLS.filter(
(p) => !activeTypeId || p.typeId === activeTypeId
)
if (!visible.length) {
return `<div class="list-body"><div class="empty-hint">当前样本类型下暂无工单</div></div>`
}
return `
<div class="list-body">
${visible
.map(
(p) => `
<article class="qc-protocol-row" data-type-id="${p.typeId}">
<div class="qc-protocol-row__ctx">
<span class="qc-protocol-row__code">${p.code}</span>
<span class="qc-protocol-row__type">${p.typeName}</span>
<span class="qc-protocol-row__sub">母亲 ${p.mother}</span>
<span class="tag tag--${p.statusType}">${p.status}</span>
<span class="qc-protocol-row__sub">${p.sub}</span>
</div>
<div class="qc-card-placeholder">
<div class="qc-card-placeholder__no">${p.woNo}</div>
<div class="qc-card-placeholder__meta">样本接收质检 · 点击查看详情与任务</div>
</div>
</article>`
)
.join('')}
</div>`
}
function buildTypeChipsHtml(className = 'type-chip sample-type-btn') {
return SAMPLE_TYPES.map(
(t) => `
<button type="button" class="${className}" data-type-id="${t.id}">
${t.name}
<span class="type-chip__count">${t.count}</span>
</button>`
).join('')
}
function buildTypeSegmentedHtml() {
return SAMPLE_TYPES.map(
(t) => `
<button type="button" class="type-segmented__btn sample-type-btn" data-type-id="${t.id}">
${t.name}${t.id ? ` (${t.count})` : ''}
</button>`
).join('')
}
function buildTypeSubTabsHtml() {
return SAMPLE_TYPES.map(
(t) => `
<button type="button" class="type-sub-tabs__btn sample-type-btn" data-type-id="${t.id}">
${t.name}
<span class="type-sub-tabs__count">${t.count}</span>
</button>`
).join('')
}
function buildTypeRailHtml() {
return SAMPLE_TYPES.map(
(t) => `
<button type="button" class="type-rail__btn sample-type-btn" data-type-id="${t.id}">
<span>${t.name}</span>
<span class="type-rail__count">${t.count}</span>
</button>`
).join('')
}
function buildTypeIconGridHtml() {
return SAMPLE_TYPES.map(
(t) => `
<button type="button" class="type-icon-card sample-type-btn" data-type-id="${t.id}">
<span class="type-icon-card__avatar">${t.icon}</span>
<span class="type-icon-card__name">${t.name}</span>
<span class="type-icon-card__count">${t.count} 条工单</span>
</button>`
).join('')
}
function initSampleTypeFilter(root, options = {}) {
const {
btnSelector = '.sample-type-btn',
listContainerSelector = '#card-list',
hintSelector = '#filter-hint',
onChange
} = options
const rootEl = typeof root === 'string' ? document.querySelector(root) : root
if (!rootEl) return
const listEl = rootEl.querySelector(listContainerSelector)
const hintEl = rootEl.querySelector(hintSelector)
const selectEl = rootEl.querySelector('#filter-sample-type-select')
let activeTypeId = ''
function setActive(typeId) {
activeTypeId = typeId || ''
rootEl.querySelectorAll(btnSelector).forEach((btn) => {
btn.classList.toggle('is-active', btn.dataset.typeId === activeTypeId)
})
if (selectEl) {
selectEl.value = activeTypeId
}
if (listEl) {
listEl.innerHTML = buildCardListHtml(activeTypeId).replace(
/^<div class="list-body">|<\/div>$/g,
''
)
if (!listEl.querySelector('.qc-protocol-row') && !listEl.querySelector('.empty-hint')) {
listEl.innerHTML = '<div class="empty-hint">当前样本类型下暂无工单</div>'
}
}
const label =
SAMPLE_TYPES.find((t) => t.id === activeTypeId)?.name || '全部'
if (hintEl) {
hintEl.innerHTML = `当前筛选:<strong>${label}</strong> · 共 ${
activeTypeId
? MOCK_PROTOCOLS.filter((p) => p.typeId === activeTypeId).length
: MOCK_PROTOCOLS.length
} 条协议组`
}
if (typeof onChange === 'function') onChange(activeTypeId, label)
}
rootEl.querySelectorAll(btnSelector).forEach((btn) => {
btn.addEventListener('click', () => setActive(btn.dataset.typeId || ''))
})
if (selectEl) {
selectEl.addEventListener('change', () => setActive(selectEl.value))
}
setActive('')
return { setActive }
}
function mockPageShell(contentHtml) {
return `
${buildMainTabsHtml()}
${contentHtml}
`
}
@@ -0,0 +1,918 @@
/* 质检工单 · 样本类型过滤选型 Demo(Fresh Mint Token) */
:root {
--primary: #10b981;
--primary-dark: #059669;
--primary-bg: #ecfdf5;
--text: #1e293b;
--text-muted: #64748b;
--border: #e2e8f0;
--border-soft: #d9e8e2;
--bg-page: #f8fafc;
--surface: #fff;
--radius: 10px;
--radius-sm: 8px;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
min-height: 100vh;
font-family: Inter, -apple-system, BlinkMacSystemFont, sans-serif;
font-size: 14px;
line-height: 1.5;
color: var(--text);
background: var(--bg-page);
}
.demo-banner {
position: sticky;
top: 0;
z-index: 200;
padding: 12px 24px;
background: var(--surface);
border-bottom: 1px solid var(--border);
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
box-shadow: 0 1px 3px rgba(15, 23, 42, 0.04);
}
.demo-banner h1 {
margin: 0;
font-size: 15px;
font-weight: 600;
}
.demo-banner p {
margin: 4px 0 0;
font-size: 12px;
color: var(--text-muted);
max-width: 760px;
line-height: 1.55;
}
.demo-banner__actions {
display: flex;
gap: 8px;
flex-wrap: wrap;
flex-shrink: 0;
}
.demo-banner a,
.demo-link {
display: inline-flex;
align-items: center;
height: 32px;
padding: 0 12px;
border-radius: var(--radius-sm);
border: 1px solid var(--border);
background: var(--surface);
font-size: 12px;
font-weight: 500;
color: var(--text-muted);
text-decoration: none;
transition: border-color 0.15s, background 0.15s, color 0.15s;
}
.demo-banner a:hover,
.demo-link:hover {
border-color: #a7f3d0;
background: var(--primary-bg);
color: var(--primary-dark);
}
.demo-banner a.is-current {
background: var(--primary-bg);
border-color: var(--primary);
color: var(--primary-dark);
}
.demo-badge {
display: inline-block;
padding: 2px 8px;
border-radius: 6px;
font-size: 11px;
font-weight: 600;
background: var(--primary-bg);
color: var(--primary-dark);
margin-right: 6px;
}
.page-wrap {
padding: 24px;
max-width: 1280px;
margin: 0 auto;
}
.panel {
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
}
/* ── 主 Tab(质检类型) ── */
.qc-main-tabs {
padding: 16px 24px 0;
}
.qc-main-tabs__track {
display: flex;
flex-wrap: wrap;
gap: 8px;
padding: 4px;
background: #f1f5f9;
border-radius: 12px;
}
.qc-main-tabs__btn {
display: inline-flex;
align-items: center;
gap: 8px;
height: 40px;
padding: 0 16px;
border: none;
border-radius: 10px;
background: transparent;
font-family: inherit;
font-size: 14px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
transition: background 0.15s, color 0.15s, box-shadow 0.15s;
}
.qc-main-tabs__btn:hover {
color: var(--primary-dark);
}
.qc-main-tabs__btn.is-active {
background: var(--surface);
color: var(--primary-dark);
font-weight: 600;
box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
}
.qc-main-tabs__badge {
min-width: 22px;
height: 20px;
padding: 0 6px;
border-radius: 999px;
background: #fee2e2;
color: #b91c1c;
font-size: 11px;
font-weight: 700;
display: inline-flex;
align-items: center;
justify-content: center;
}
.qc-main-tabs__badge--zero {
background: #e2e8f0;
color: #94a3b8;
}
/* ── 筛选区 ── */
.filter-block {
padding: 16px 24px;
border-top: 1px solid var(--border);
}
.filter-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px 16px;
}
.filter-item label {
display: block;
font-size: 11px;
font-weight: 500;
color: var(--text-muted);
margin-bottom: 6px;
}
.filter-item .fake-input,
.filter-item select {
width: 100%;
height: 36px;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
padding: 0 12px;
background: var(--surface);
color: var(--text);
font-size: 13px;
font-family: inherit;
}
.filter-item .fake-input.is-placeholder {
color: var(--text-muted);
}
.filter-actions-row {
display: flex;
justify-content: flex-end;
gap: 8px;
margin-top: 12px;
}
.btn {
height: 36px;
padding: 0 14px;
border-radius: var(--radius-sm);
font-size: 13px;
font-weight: 500;
border: 1px solid var(--border);
background: var(--surface);
color: var(--text);
cursor: pointer;
font-family: inherit;
display: inline-flex;
align-items: center;
gap: 6px;
}
.btn-primary {
background: var(--primary);
border-color: var(--primary);
color: #fff;
}
.btn-primary:hover {
background: var(--primary-dark);
}
/* ── 样本类型过滤区通用 ── */
.sample-type-zone {
padding: 0 24px;
}
.sample-type-zone--bordered {
border-top: 1px solid var(--border);
padding-top: 14px;
padding-bottom: 14px;
}
.sample-type-zone__label {
font-size: 11px;
font-weight: 500;
color: var(--text-muted);
margin-bottom: 8px;
}
.sample-type-zone__hint {
margin-top: 8px;
font-size: 12px;
color: var(--text-muted);
}
.sample-type-zone__hint strong {
color: var(--primary-dark);
}
/* 02 · 横向 Chip 条 */
.type-chips {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.type-chip {
display: inline-flex;
align-items: center;
gap: 6px;
height: 32px;
padding: 0 12px;
border-radius: 999px;
border: 1px solid var(--border);
background: var(--surface);
font-family: inherit;
font-size: 13px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
transition: border-color 0.15s, background 0.15s, color 0.15s;
}
.type-chip:hover {
border-color: #a7f3d0;
color: var(--primary-dark);
}
.type-chip.is-active {
background: var(--primary-bg);
border-color: #a7f3d0;
color: var(--primary-dark);
font-weight: 600;
}
.type-chip__count {
min-width: 18px;
height: 18px;
padding: 0 5px;
border-radius: 999px;
background: #e2e8f0;
font-size: 11px;
font-weight: 700;
color: #64748b;
display: inline-flex;
align-items: center;
justify-content: center;
}
.type-chip.is-active .type-chip__count {
background: var(--primary);
color: #fff;
}
/* 03 · Segmented 轨道 */
.type-segmented {
display: inline-flex;
max-width: 100%;
padding: 4px;
background: #f1f5f9;
border-radius: 12px;
overflow-x: auto;
scrollbar-width: thin;
}
.type-segmented__btn {
flex-shrink: 0;
height: 36px;
padding: 0 14px;
border: none;
border-radius: 10px;
background: transparent;
font-family: inherit;
font-size: 13px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
white-space: nowrap;
transition: background 0.15s, color 0.15s, box-shadow 0.15s;
}
.type-segmented__btn:hover {
color: var(--primary-dark);
}
.type-segmented__btn.is-active {
background: var(--surface);
color: var(--primary-dark);
font-weight: 600;
box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
}
/* 04 · 二级 Tab 条 */
.type-sub-tabs {
display: flex;
flex-wrap: wrap;
gap: 0;
border-bottom: 1px solid var(--border);
margin: 0 -24px;
padding: 0 24px;
}
.type-sub-tabs__btn {
position: relative;
display: inline-flex;
align-items: center;
gap: 8px;
height: 44px;
padding: 0 18px;
border: none;
background: transparent;
font-family: inherit;
font-size: 14px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
margin-bottom: -1px;
border-bottom: 2px solid transparent;
transition: color 0.15s, border-color 0.15s;
}
.type-sub-tabs__btn:hover {
color: var(--primary-dark);
}
.type-sub-tabs__btn.is-active {
color: var(--primary-dark);
font-weight: 600;
border-bottom-color: var(--primary);
}
.type-sub-tabs__count {
font-size: 12px;
font-weight: 600;
color: #94a3b8;
}
.type-sub-tabs__btn.is-active .type-sub-tabs__count {
color: var(--primary);
}
/* 05 · 工具栏 Chip */
.list-toolbar {
padding: 12px 24px;
border-top: 1px solid var(--border);
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
}
.list-toolbar__left {
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
flex: 1;
min-width: 0;
}
.list-toolbar__right {
display: flex;
gap: 8px;
flex-shrink: 0;
}
.sel-hint {
font-size: 13px;
color: var(--text-muted);
margin-right: 4px;
}
.sel-hint strong {
color: var(--primary-dark);
}
.toolbar-type-divider {
width: 1px;
height: 24px;
background: var(--border);
margin: 0 4px;
}
/* 06 · 左栏过滤 */
.panel-with-rail {
display: grid;
grid-template-columns: 200px minmax(0, 1fr);
}
.type-rail {
border-right: 1px solid var(--border);
padding: 16px 0;
background: #fafafa;
}
.type-rail__title {
padding: 0 16px 10px;
font-size: 11px;
font-weight: 600;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.04em;
}
.type-rail__btn {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
min-height: 40px;
padding: 8px 16px;
border: none;
background: transparent;
font-family: inherit;
font-size: 13px;
font-weight: 500;
color: var(--text);
text-align: left;
cursor: pointer;
transition: background 0.15s, color 0.15s;
}
.type-rail__btn:hover {
background: var(--primary-bg);
color: var(--primary-dark);
}
.type-rail__btn.is-active {
background: var(--primary-bg);
color: var(--primary-dark);
font-weight: 600;
box-shadow: inset 3px 0 0 var(--primary);
}
.type-rail__count {
font-size: 12px;
color: #94a3b8;
}
.type-rail__btn.is-active .type-rail__count {
color: var(--primary);
}
/* 07 · 图标卡片 */
.type-icon-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
gap: 10px;
}
.type-icon-card {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
padding: 14px 10px;
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--surface);
font-family: inherit;
cursor: pointer;
transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;
}
.type-icon-card:hover {
border-color: #a7f3d0;
box-shadow: 0 2px 8px rgba(16, 185, 129, 0.08);
}
.type-icon-card.is-active {
border-color: var(--primary);
background: var(--primary-bg);
box-shadow: 0 0 0 1px var(--primary);
}
.type-icon-card__avatar {
width: 44px;
height: 44px;
border-radius: 12px;
background: linear-gradient(135deg, #d1fae5, #ecfdf5);
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
font-weight: 700;
color: var(--primary-dark);
}
.type-icon-card__name {
font-size: 12px;
font-weight: 600;
color: var(--text);
text-align: center;
line-height: 1.35;
}
.type-icon-card__count {
font-size: 11px;
color: var(--text-muted);
}
.type-icon-card.is-active .type-icon-card__count {
color: var(--primary-dark);
font-weight: 600;
}
/* ── 列表卡片骨架 ── */
.list-body {
padding: 0 24px 24px;
}
.qc-protocol-row {
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
margin-bottom: 12px;
transition: opacity 0.2s;
}
.qc-protocol-row.is-hidden {
display: none;
}
.qc-protocol-row__ctx {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px 12px;
padding: 12px 16px;
background: linear-gradient(180deg, var(--primary-bg) 0%, #fff 100%);
border-bottom: 1px solid #d1fae5;
}
.qc-protocol-row__code {
font-size: 14px;
font-weight: 600;
font-family: ui-monospace, Menlo, monospace;
}
.qc-protocol-row__type {
font-size: 11px;
font-weight: 600;
padding: 2px 10px;
border-radius: 999px;
background: var(--primary-bg);
color: #047857;
border: 1px solid #d1fae5;
}
.qc-protocol-row__sub {
flex: 1;
min-width: 0;
font-size: 12px;
color: var(--text-muted);
}
.tag {
display: inline-flex;
align-items: center;
height: 22px;
padding: 0 8px;
border-radius: 6px;
font-size: 11px;
font-weight: 600;
}
.tag--success {
background: var(--primary-bg);
color: #047857;
}
.tag--warning {
background: #fffbeb;
color: #b45309;
}
.qc-card-placeholder {
padding: 14px 16px;
background: #fafafa;
}
.qc-card-placeholder__no {
font-size: 14px;
font-weight: 600;
font-family: ui-monospace, Menlo, monospace;
margin-bottom: 6px;
}
.qc-card-placeholder__meta {
font-size: 12px;
color: var(--text-muted);
}
.empty-hint {
padding: 32px 24px;
text-align: center;
color: var(--text-muted);
font-size: 13px;
}
/* ── 说明区 ── */
.style-note {
margin-top: 16px;
padding: 14px 16px;
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius);
font-size: 13px;
color: var(--text-muted);
line-height: 1.6;
}
.style-note strong {
color: var(--text);
}
.pros-cons {
margin-top: 8px;
display: flex;
flex-direction: column;
gap: 4px;
font-size: 12px;
}
.pro {
color: #047857;
}
.con {
color: #94a3b8;
}
/* ── 对比页 ── */
.index-hero {
max-width: 960px;
margin: 0 auto;
padding: 32px 24px 12px;
}
.index-hero h1 {
margin: 0 0 8px;
font-size: 22px;
}
.index-hero p {
margin: 0;
color: var(--text-muted);
max-width: 720px;
line-height: 1.6;
}
.context-box {
max-width: 960px;
margin: 0 auto 8px;
padding: 0 24px;
}
.context-box-inner {
padding: 14px 16px;
background: #fffbeb;
border: 1px solid #fcd34d;
border-radius: 10px;
font-size: 13px;
color: #92400e;
line-height: 1.55;
}
.index-cta {
max-width: 960px;
margin: 0 auto;
padding: 8px 24px 12px;
display: flex;
flex-wrap: wrap;
gap: 12px;
}
.index-cta a.primary {
background: var(--primary);
color: #fff;
box-shadow: 0 2px 8px rgba(16, 185, 129, 0.25);
height: 44px;
padding: 0 20px;
border-radius: 10px;
font-size: 14px;
font-weight: 600;
border: none;
}
.index-cta a.primary:hover {
background: var(--primary-dark);
}
.index-grid {
max-width: 960px;
margin: 0 auto;
padding: 16px 24px 48px;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 16px;
}
.index-card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 12px;
padding: 18px;
text-decoration: none;
color: inherit;
transition: border-color 0.2s, box-shadow 0.2s;
}
.index-card:hover {
border-color: #a7f3d0;
box-shadow: 0 4px 12px rgba(16, 185, 129, 0.08);
}
.index-card h2 {
margin: 0 0 6px;
font-size: 15px;
font-weight: 600;
color: var(--primary-dark);
}
.index-card p {
margin: 0;
font-size: 13px;
color: var(--text-muted);
line-height: 1.5;
}
.index-card .tag {
margin-top: 12px;
}
.index-card .tag--rec {
background: var(--primary-bg);
color: var(--primary-dark);
border: 1px solid #a7f3d0;
}
.compare-stack {
display: flex;
flex-direction: column;
gap: 28px;
padding: 0 24px 48px;
max-width: 1280px;
margin: 0 auto;
}
.compare-block {
background: var(--surface);
border: 1px solid var(--border-soft);
border-radius: var(--radius);
overflow: hidden;
}
.compare-block__label {
padding: 14px 18px;
background: #fafafa;
border-bottom: 1px solid var(--border);
}
.compare-block__label h2 {
margin: 0;
font-size: 14px;
font-weight: 600;
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.compare-block__label p {
margin: 6px 0 0;
font-size: 12px;
color: var(--text-muted);
line-height: 1.55;
}
.variant-tag {
display: inline-flex;
align-items: center;
height: 22px;
padding: 0 8px;
border-radius: 6px;
font-size: 11px;
font-weight: 700;
}
.variant-tag--baseline {
background: #f1f5f9;
color: #475569;
}
.variant-tag--rec {
background: var(--primary-bg);
color: var(--primary-dark);
border: 1px solid #a7f3d0;
}
.compare-block__body {
padding: 16px;
background: #f1f5f9;
}
.compare-block__body .panel {
max-width: 100%;
}
@media (max-width: 900px) {
.filter-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.panel-with-rail {
grid-template-columns: 1fr;
}
.type-rail {
border-right: none;
border-bottom: 1px solid var(--border);
display: flex;
flex-wrap: wrap;
padding: 12px;
gap: 4px;
}
.type-rail__title {
width: 100%;
}
.type-rail__btn {
width: auto;
border-radius: 999px;
border: 1px solid var(--border);
padding: 6px 12px;
min-height: 32px;
box-shadow: none !important;
}
}
@@ -0,0 +1,280 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>质检工单 · 样本类型过滤 · 并排对比</title>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="_shared.css" />
<style>
.compare-all-banner {
padding: 20px 24px;
background: var(--surface);
border-bottom: 1px solid var(--border);
}
.compare-all-banner h1 {
margin: 0 0 6px;
font-size: 18px;
}
.compare-all-banner p {
margin: 0;
font-size: 13px;
color: var(--text-muted);
}
.compare-all-banner a {
display: inline-flex;
margin-top: 12px;
}
.compare-block__body .panel-with-rail {
min-height: 280px;
}
.compare-block__body .filter-block {
padding: 12px 16px;
}
.compare-block__body .filter-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.compare-block__body .qc-main-tabs {
padding: 12px 16px 0;
}
.compare-block__body .sample-type-zone {
padding-left: 16px;
padding-right: 16px;
}
.compare-block__body .list-toolbar,
.compare-block__body .list-body {
padding-left: 16px;
padding-right: 16px;
}
.compare-block__body .type-sub-tabs {
margin: 0 -16px;
padding: 0 16px;
}
</style>
</head>
<body>
<div class="compare-all-banner">
<h1>质检工单 · 样本类型过滤 · 并排对比</h1>
<p>点击各方案内的样本类型控件可筛选下方模拟卡片。推荐优先看 02 Chip 条 与 03 Segmented。</p>
<a class="demo-link" href="index.html">← 返回选型索引</a>
</div>
<div class="compare-stack">
<!-- 01 -->
<section class="compare-block">
<div class="compare-block__label">
<h2>
<span class="variant-tag variant-tag--baseline">01 基线</span>
筛选栅格内下拉框(现网)
</h2>
<p>样本类型与关键词、状态并列;选项隐藏在下拉内。</p>
</div>
<div class="compare-block__body">
<div class="panel" id="cmp-01">
<div class="cmp-shell"></div>
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出</button>
</div>
<div class="list-body cmp-list"></div>
</div>
</div>
</section>
<!-- 02 -->
<section class="compare-block">
<div class="compare-block__label">
<h2>
<span class="variant-tag variant-tag--rec">02 推荐</span>
筛选下方 Chip 条
</h2>
<p>平铺可见 + 数量角标;单击即筛;释放 filter-grid 一列。</p>
</div>
<div class="compare-block__body">
<div class="panel" id="cmp-02">
<div class="cmp-shell"></div>
<div class="sample-type-zone sample-type-zone--bordered">
<div class="sample-type-zone__label">样本类型</div>
<div class="type-chips cmp-chips"></div>
</div>
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出</button>
</div>
<div class="list-body cmp-list"></div>
</div>
</div>
</section>
<!-- 03 -->
<section class="compare-block">
<div class="compare-block__label">
<h2>
<span class="variant-tag variant-tag--rec">03 推荐</span>
Segmented 分段控件
</h2>
<p>主 Tab 与筛选之间;与 panel-pill-tabs 视觉统一。</p>
</div>
<div class="compare-block__body">
<div class="panel" id="cmp-03">
<div class="cmp-shell"></div>
<div class="sample-type-zone" style="padding-top: 10px">
<div class="type-segmented cmp-segmented"></div>
</div>
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出</button>
</div>
<div class="list-body cmp-list"></div>
</div>
</div>
</section>
<!-- 04 -->
<section class="compare-block">
<div class="compare-block__label">
<h2><span class="variant-tag">04</span> 二级 Tab 条</h2>
<p>样本类型作为子 Tab,带下划线与数量。</p>
</div>
<div class="compare-block__body">
<div class="panel" id="cmp-04">
<div class="cmp-shell-main"></div>
<div class="sample-type-zone" style="padding-bottom: 0">
<nav class="type-sub-tabs cmp-sub-tabs"></nav>
</div>
<div class="cmp-shell-filter"></div>
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出</button>
</div>
<div class="list-body cmp-list"></div>
</div>
</div>
</section>
<!-- 05 -->
<section class="compare-block">
<div class="compare-block__label">
<h2><span class="variant-tag">05</span> 工具栏内联 Chip</h2>
<p>最紧凑;与批量操作同排。</p>
</div>
<div class="compare-block__body">
<div class="panel" id="cmp-05">
<div class="cmp-shell"></div>
<div class="cmp-toolbar"></div>
<div class="list-body cmp-list"></div>
</div>
</div>
</section>
<!-- 06 -->
<section class="compare-block">
<div class="compare-block__label">
<h2><span class="variant-tag">06</span> 左侧类型导航</h2>
<p>左栏固定类型列表,右侧卡片流。</p>
</div>
<div class="compare-block__body">
<div class="panel" id="cmp-06">
<div class="cmp-shell"></div>
<div class="panel-with-rail">
<aside class="type-rail">
<div class="type-rail__title">样本类型</div>
<div class="cmp-rail"></div>
</aside>
<div>
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出</button>
</div>
<div class="list-body cmp-list"></div>
</div>
</div>
</div>
</div>
</section>
<!-- 07 -->
<section class="compare-block">
<div class="compare-block__label">
<h2><span class="variant-tag">07</span> 图标卡片宫格</h2>
<p>对接 type_logo;视觉识别最强。</p>
</div>
<div class="compare-block__body">
<div class="panel" id="cmp-07">
<div class="cmp-shell"></div>
<div class="sample-type-zone sample-type-zone--bordered">
<div class="type-icon-grid cmp-icon-grid"></div>
</div>
<div class="list-toolbar">
<span class="sel-hint">已选 <strong>0</strong> 项</span>
<button type="button" class="btn btn-primary">导出</button>
</div>
<div class="list-body cmp-list"></div>
</div>
</div>
</section>
</div>
<script src="_demo-shell.js"></script>
<script>
function setupCompare(id, options) {
const root = document.getElementById(id)
const shell = root.querySelector('.cmp-shell')
const shellMain = root.querySelector('.cmp-shell-main')
const shellFilter = root.querySelector('.cmp-shell-filter')
if (shell) {
shell.innerHTML =
buildMainTabsHtml() +
buildFilterHtml({ includeSampleTypeDropdown: id === 'cmp-01' })
}
if (shellMain) shellMain.innerHTML = buildMainTabsHtml()
if (shellFilter) shellFilter.innerHTML = buildFilterHtml({ includeSampleTypeDropdown: false })
const chips = root.querySelector('.cmp-chips')
if (chips) chips.innerHTML = buildTypeChipsHtml()
const seg = root.querySelector('.cmp-segmented')
if (seg) seg.innerHTML = buildTypeSegmentedHtml()
const sub = root.querySelector('.cmp-sub-tabs')
if (sub) sub.innerHTML = buildTypeSubTabsHtml()
const toolbar = root.querySelector('.cmp-toolbar')
if (toolbar) toolbar.innerHTML = buildToolbarHtml({ includeTypeChips: true })
const rail = root.querySelector('.cmp-rail')
if (rail) rail.innerHTML = buildTypeRailHtml()
const icons = root.querySelector('.cmp-icon-grid')
if (icons) icons.innerHTML = buildTypeIconGridHtml()
initSampleTypeFilter(root, {
btnSelector: options.btnSelector || '.sample-type-btn',
listContainerSelector: '.cmp-list'
})
}
setupCompare('cmp-01', {})
setupCompare('cmp-02', {})
setupCompare('cmp-03', { btnSelector: '.type-segmented__btn' })
setupCompare('cmp-04', { btnSelector: '.type-sub-tabs__btn' })
setupCompare('cmp-05', {})
setupCompare('cmp-06', { btnSelector: '.type-rail__btn' })
setupCompare('cmp-07', { btnSelector: '.type-icon-card' })
</script>
</body>
</html>
@@ -0,0 +1,76 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>质检工单 · 样本类型过滤选型 · 索引</title>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="_shared.css" />
</head>
<body>
<div class="index-hero">
<h1>质检工单 · 样本类型过滤选型</h1>
<p>
针对「细胞存储质检 / 科研捐赠质检」Tab 下的<strong>样本类型</strong>过滤条件。现网为筛选区
<code>el-select</code> 下拉框;本目录提供 6 种替代方案 HTML 原型,均可点击交互。
</p>
</div>
<div class="context-box">
<div class="context-box-inner">
<strong>现状:</strong
><code>QcWorkOrderTabPanel.vue</code> 在 <code>isInboundSampleTab</code> 时于 filter-grid
增加「样本类型」下拉,与关键词、工单状态等并列。<br />
<strong>目标:</strong>探索更直观、少占筛选栅格、或便于「一眼扫类型」的交互方式。
</div>
</div>
<div class="index-cta">
<a class="primary demo-link" href="compare-all.html">并排对比全部方案 →</a>
<a class="demo-link" href="01-baseline-dropdown.html">01 现网基线</a>
</div>
<div class="index-grid">
<a class="index-card" href="01-baseline-dropdown.html">
<h2>01 · 现网基线(下拉框)</h2>
<p>筛选栅格内 el-select,需展开下拉选择。作为对照组。</p>
<span class="tag">对照</span>
</a>
<a class="index-card" href="02-chip-strip.html">
<h2>02 · 筛选下方 Chip 条</h2>
<p>从 filter-grid 移出,横向胶囊 + 数量角标;点击即筛,无需搜索按钮。</p>
<span class="tag tag--rec">推荐</span>
</a>
<a class="index-card" href="03-segmented-track.html">
<h2>03 · Segmented 分段控件</h2>
<p>主 Tab 下方、筛选区上方;灰底轨道 + 白底激活块,B 端 Segmented 风格。</p>
<span class="tag tag--rec">推荐</span>
</a>
<a class="index-card" href="04-sub-tab-bar.html">
<h2>04 · 二级 Tab 条</h2>
<p>样本类型作为次级 Tab,带下划线与数量;与主 Tab 层级关系清晰。</p>
</a>
<a class="index-card" href="05-toolbar-chips.html">
<h2>05 · 工具栏内联 Chip</h2>
<p>与「已选 N 项 / 导出」同排,节省纵向空间;适合类型较少场景。</p>
</a>
<a class="index-card" href="06-left-rail.html">
<h2>06 · 左侧类型导航</h2>
<p>列表区左栏固定样本类型,右侧卡片流;类型多时可扫视全量。</p>
</a>
<a class="index-card" href="07-icon-cards.html">
<h2>07 · 图标卡片宫格</h2>
<p>利用样本类型 Logo/首字做卡片选择,视觉识别强;占用略多纵向空间。</p>
</a>
</div>
</body>
</html>
@@ -0,0 +1,55 @@
# 生產工單計劃開始時間篩選 Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 將【生產工單】【我的生產任務】檢索區時間條件統一為工藝步驟計劃開始時間區間篩選。
**Architecture:** 後端新增共用 `apply_planned_start_time_step_filter`(EXISTS 子查詢);生產工單列表與我的任務 API 支援 `plannedStartTimeStart/End`;前端固定 label「計劃開始時間」並停止傳遞舊時間參數。
**Tech Stack:** FastAPI + SQLAlchemy(backend)、Vue 3 + TypeScript(web-admin)
---
### Task 1: 後端 Schema + 共用過濾函數
**Files:**
- Modify: `backend/app/schemas/production_work_order.py`
- Modify: `backend/app/crud/production_work_order.py`
- [ ] Schema 新增 `planned_start_time_start` / `planned_start_time_end`
- [ ] 實現 `apply_planned_start_time_step_filter(query, tenant_no, start, end, mine_user_id=None)`
- [ ] `list_production_work_orders` 在新參數有值時調用過濾函數
### Task 2: 我的任務 API 後端過濾
**Files:**
- Modify: `backend/app/crud/production_task.py`
- Modify: `backend/app/api/production.py`
- [ ] `list_production_tasks` / `list_mine_production_tasks` 支援計劃開始時間參數
- [ ] mine 場景傳入 `mine_user_id` 僅統計本人相關步驟
### Task 3: 前端 API 類型與頁面邏輯
**Files:**
- Modify: `web-admin/src/api/production-work-order.ts`
- Modify: `web-admin/src/api/production-task.ts`
- Modify: `web-admin/src/utils/production-mine-task-groups.ts`
- Modify: `web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts`
- Modify: `web-admin/src/views/production/production-work-order/tabs/ProductionWorkOrderTabPanel.vue`
- [ ] 傳遞 `plannedStartTimeStart/End`;重命名 `plannedStartTimeRange`
- [ ] 移除工單級 createTime/infusionTime 前端過濾
### Task 4: 清理廢棄工具函數
**Files:**
- Modify: `web-admin/src/utils/production-work-order-tabs.ts`
- [ ] 刪除 `tabUsesInfusionTimeFilter`、`filterTimeLabelForTab`(僅生產模組引用)
### Task 5: 驗證
- [ ] `python -m py_compile` 後端改動檔案
- [ ] `pnpm exec vue-tsc --noEmit` 或 lint 檢查前端
- [ ] `./scripts/update-graph.sh web-admin`(若 import 有變)
@@ -0,0 +1,37 @@
# 生产工单隐藏无效协议关联工单
## 背景
【生产工单】【我的生产任务】中,细胞存储 / 科研捐赠类入库生产工单在关联采集协议或捐赠协议进入无效态后,默认不应干扰日常列表;用户可通过检索区勾选框查看历史单据。
## 无效协议状态
与样本接收模块一致:`yzf`(已作废)、`sdfq`(属地废弃)。
常量:`INACTIVE_PROTOCOL_STATUSES = ("yzf", "sdfq")`,置于 `app/core/protocol_status_display.py`。
## 过滤规则
| 条件 | 默认勾选(隐藏) | 取消勾选 |
|------|------------------|----------|
| 入库 + 细胞存储 + 协议状态 ∈ 无效集 | 不展示 | 展示 |
| 入库 + 科研捐赠 + 协议状态 ∈ 无效集 | 不展示 | 展示 |
| 出库 / 临时 / 其他状态 | 始终展示 | 始终展示 |
| 协议缺失或状态为空 | 展示 | 展示 |
## 影响范围
- Tab:细胞存储生产、科研捐赠生产、「所有」(仅过滤列表中入库两类条目)
- 页面:生产工单(manage)、我的生产任务(mine)
- Tab 角标 / 侧栏待办:始终按默认(隐藏无效协议关联工单)统计
## 实现
- 后端 `excludeVoidProtocol` 查询参数,默认 `true`
- `list_production_work_orders`、`list_production_tasks`、`_base_active_step_count_query` 共用 SQL 过滤
- 前端检索区 `el-checkbox`,文案「不展示协议已作废或属地废弃的工单」,默认勾选
## 非目标
- 不改变工单自身 `workOrderStatus=yzf` 的筛选逻辑
- 不隐藏 `zky` / `zckc` / `ygq` 等状态
@@ -0,0 +1,180 @@
# 生產工單 / 我的生產任務:統一按工藝步驟計劃開始時間篩選
## 背景
【生產工單】與【我的生產任務】檢索區目前依 Tab 展示不同時間條件:
| Tab 類型 | 現有篩選欄位 | 資料來源 |
|----------|-------------|----------|
| 所有 / 入庫 / 臨時 | 創建時間 | `biz_production_work_order.create_time` |
| 出庫(中試服務、臨床應用) | 輸注時間 | `biz_pilot_infusion_schedule.infusion_time` |
| 出庫(基礎實驗) | 交付時間 | 同上(`infusion_time`) |
用戶希望**移除上述時間篩選**,兩個頁面、所有 Tab **統一**改為按「生產任務 → 工藝步驟 → 計劃開始時間」區間過濾。
## 目標
1. 檢索區僅保留一個日期區間控件,標籤固定為 **計劃開始時間**。
2. 列表仍按**工單卡片**展示;篩選語義為「工單下存在符合日期區間的工藝步驟」。
3. 【我的生產任務】僅統計**本人相關**步驟(見下文「本人相關步驟」定義)。
4. 卡片上的創建時間、輸注時間、交付時間等**展示欄位不變**,僅改篩選維度。
## 非目標
- 不修改卡片 meta 展示欄位(`production-work-order-card-meta.ts`)。
- 不修改 Tab 角標 / 側欄待辦統計邏輯(`tab-step-counts`)。
- 不影響質檢工單等同構模組。
- 不移除列表 API 的舊時間參數(可保留但前端不再傳遞;後端可選擇標記廢棄,本次不強制刪除以避免外部調用方報錯)。
## 資料模型
- 表:`biz_production_task_step.planned_start_time`(`DateTime`,可空)
- 前端字段:`plannedStartTime`(日期字串 `YYYY-MM-DD`)
- 比較粒度:**日期**(與現有角標 `isStepOverdueIncomplete`、派工展示一致)
## 篩選語義
### 共同規則
當用戶**未填寫**日期區間時:不施加計劃開始時間過濾(與現有「時間為空則不過濾」行為一致)。
當用戶**填寫**日期區間 `[start, end]` 時,工單命中條件為:其下存在至少一個**符合條件的工藝步驟**,且該步驟滿足:
| 條件 | 說明 |
|------|------|
| `planned_start_time IS NOT NULL` | 未排計劃的步驟不參與匹配 |
| `planned_start_time` 落在 `[start 00:00:00, end 23:59:59]` | 含起止日 |
| 所屬任務 `task_status IN ('dpz', 'jxz')` | 活躍任務 |
| 所屬工單 `work_order_status IN ('dpz', 'jxz')` | 活躍工單 |
| 步驟 `step_status != 'ywc'` | 未完成步驟 |
| `del_flag = 0` | 未刪除 |
### 【生產工單】(manage)
- 範圍:工單下**所有**符合上述共同規則的步驟(不限負責人)。
- 分頁:後端過濾 + 後端分頁(`list_production_work_orders`)。
### 【我的生產任務】(mine)— 用戶確認方案 B
僅統計**本人相關**的步驟。步驟命中需同時滿足「共同規則」與下列任一:
1. 步驟負責人列表(`biz_production_task_step_assignee`)包含當前用戶;或
2. 所屬任務的 `current_assignee_user_id` 為當前用戶。
與現有 `isMineQualifyingTask` / `_base_active_step_count_query(mine_user_id=...)` 語義對齊。
工單展示:若工單下存在至少一個「本人相關且日期命中」的步驟,則展示該工單卡片(卡片內任務子列表仍展示該用戶相關任務,不因日期篩選隱藏單個任務行)。
## API 變更
### 新增查詢參數
| 參數 | 類型 | 說明 |
|------|------|------|
| `plannedStartTimeStart` | `string?` | 計劃開始日期下限 `YYYY-MM-DD` |
| `plannedStartTimeEnd` | `string?` | 計劃開始日期上限 `YYYY-MM-DD` |
### 涉及端點
| 端點 | 變更 |
|------|------|
| `GET /web/admin/production-work-orders` | 支援新參數;前端改傳新參數,不再傳 `createTimeStart/End`、`infusionTimeStart/End` |
| `GET /web/admin/production-tasks/mine` | 支援新參數;後端在任務列表查詢階段過濾(減少全量拉取) |
### Schema
- `ProductionWorkOrderListQuery` 新增 `planned_start_time_start` / `planned_start_time_end`。
- `list_production_tasks` / `list_mine_production_tasks` 新增同名參數。
## 後端實現
### 共用過濾函數
新增 `apply_planned_start_time_step_filter(query, *, start, end, mine_user_id=None)`:
- 輸入:已 join 或可 join `BizProductionWorkOrder` 的查詢。
- 實現:`EXISTS` 子查詢,關聯 `BizProductionTask` → `BizProductionTaskStep`(及 `mine` 時的 `BizProductionTaskStepAssignee`)。
- `mine_user_id` 非空時追加本人相關 OR 條件。
### 生產工單列表
在 `list_production_work_orders` 的 `_filtered()` 中:
- **移除**對 `create_time` / `infusion_time` 的篩選分支(當新參數存在時以新參數為準;舊參數前端不再傳遞)。
- 當 `planned_start_time_start` 或 `planned_start_time_end` 有值時,調用共用過濾函數。
### 我的任務列表
在 `list_production_tasks` / `list_mine_production_tasks` 的 `_filtered()` 中:
- 當新參數有值時,僅保留任務所屬工單下存在「本人相關且日期命中」步驟的任務。
- 保持 `include_step_summary=true` 行為不變。
## 前端實現
### UI
- `ProductionWorkOrderTabPanel.vue`:日期控件 label 固定為「計劃開始時間」;移除 `:label="filterTimeLabel"` 動態綁定。
- 內部狀態:`createTimeRange` 重命名為 `plannedStartTimeRange`(語義清晰)。
### 邏輯
- `useProductionWorkOrderTabPage.ts`:
- manage:組裝 `plannedStartTimeStart/End` 調用 `fetchProductionWorkOrderList`。
- mine:組裝同名參數傳入 `fetchAllMineProductionTasks` → `fetchMyProductionTasks`。
- `production-mine-task-groups.ts`:
- `MineWorkOrderSearchFilters` 移除 `createTimeStart/End`、`infusionTimeStart/End`。
- `filterMineEntriesByWorkOrderSearch` 移除工單級 createTime/infusionTime 過濾(改由 API 或統一 helper 按步驟過濾)。
- 若 API 已過濾,前端工單級二次過濾可簡化為 no-op(保留防禦性步驟級校驗可選)。
### 清理
- `production-work-order-tabs.ts`:刪除或廢棄 `filterTimeLabelForTab`、`tabUsesInfusionTimeFilter`(無引用後移除)。
- `production-work-order.ts` API 類型:新增 `plannedStartTimeStart/End`。
## 邊界情況
| 場景 | 行為 |
|------|------|
| 未填日期 | 不過濾,列表與現狀一致(除已移除的舊時間條件) |
| 步驟無計劃開始時間 | 設了日期區間時不命中 |
| 工單已完成(`ywc`) | 不參與計劃開始時間匹配(活躍工單條件排除) |
| 我的任務:本人無相關步驟 | 工單不展示 |
| 我的任務:本人有相關步驟但計劃時間不在區間 | 工單不展示 |
## 測試要點
### 生產工單
1. 各 Tab(所有、入庫、出庫、臨時)檢索區均顯示「計劃開始時間」,無創建/輸注/交付時間標籤。
2. 設日期區間後,僅展示存在活躍未完成步驟且 `planned_start_time` 落在區間內的工單。
3. 分頁 total 與列表一致(後端過濾)。
4. 重置清空日期並恢復全量(在其他條件不變前提下)。
### 我的生產任務
1. 僅當**本人負責**(步驟負責人或任務當前負責人)的步驟計劃開始時間命中時,工單才出現。
2. 他人負責步驟的計劃時間在區間內、本人步驟不在區間內 → 工單不出現。
3. 與任務狀態、工單狀態、關鍵詞等篩選可組合使用。
## 影響檔案清單
| 層級 | 檔案 |
|------|------|
| 文檔 | 本文件 |
| 後端 Schema | `backend/app/schemas/production_work_order.py` |
| 後端 CRUD | `backend/app/crud/production_work_order.py`、`backend/app/crud/production_task.py` |
| 後端 API | `backend/app/api/production.py` |
| 前端 API | `web-admin/src/api/production-work-order.ts`、`web-admin/src/api/production-task.ts` |
| 前端工具 | `web-admin/src/utils/production-work-order-tabs.ts`、`web-admin/src/utils/production-mine-task-groups.ts` |
| 前端頁面 | `web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts`、`web-admin/src/views/production/production-work-order/tabs/ProductionWorkOrderTabPanel.vue` |
## 決策記錄
| 議題 | 決策 |
|------|------|
| 我的任務篩選範圍 | **B**:僅本人相關步驟(步驟負責人或任務當前負責人) |
| 列表展示粒度 | 工單級卡片,不按步驟拆行 |
| 納入步驟範圍 | 活躍工單 + 活躍任務 + 未完成步驟 + 有計劃開始時間 |
| 實作路徑 | 後端統一過濾(生產工單必須;我的任務 API 同步支援) |
| 舊時間參數 | 前端停止傳遞;後端保留相容,本次不刪除 |
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+103 -101
View File
@@ -1,11 +1,11 @@
# Graph Report - src (2026-07-02)
# Graph Report - src (2026-07-06)
## Corpus Check
- Large corpus: 847 files · ~560,634 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
- Large corpus: 850 files · ~561,909 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
## Summary
- 2818 nodes · 3921 edges · 58 communities detected
- Extraction: 78% EXTRACTED · 22% INFERRED · 0% AMBIGUOUS · INFERRED: 868 edges (avg confidence: 0.8)
- 2845 nodes · 3968 edges · 58 communities detected
- Extraction: 78% EXTRACTED · 22% INFERRED · 0% AMBIGUOUS · INFERRED: 881 edges (avg confidence: 0.8)
- Token cost: 0 input · 0 output
## Community Hubs (Navigation)
@@ -47,13 +47,13 @@
- [[_COMMUNITY_Community 35|Community 35]]
- [[_COMMUNITY_Community 36|Community 36]]
- [[_COMMUNITY_Community 37|Community 37]]
- [[_COMMUNITY_Community 38|Community 38]]
- [[_COMMUNITY_Community 39|Community 39]]
- [[_COMMUNITY_Community 40|Community 40]]
- [[_COMMUNITY_Community 41|Community 41]]
- [[_COMMUNITY_Community 42|Community 42]]
- [[_COMMUNITY_Community 45|Community 45]]
- [[_COMMUNITY_Community 44|Community 44]]
- [[_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]]
@@ -69,11 +69,11 @@
- [[_COMMUNITY_Community 76|Community 76]]
## God Nodes (most connected - your core abstractions)
1. `get()` - 278 edges
2. `push()` - 75 edges
1. `get()` - 279 edges
2. `push()` - 77 edges
3. `WebSocketClient` - 26 edges
4. `emit()` - 21 edges
5. `set()` - 19 edges
4. `emit()` - 24 edges
5. `set()` - 20 edges
6. `handleDynamicRoutes()` - 18 edges
7. `parseProtocolStandardImportText()` - 17 edges
8. `MenuProcessor` - 16 edges
@@ -81,12 +81,12 @@
10. `TableCache` - 14 edges
## Surprising Connections (you probably didn't know these)
- `handleBatchDelete()` --calls--> `withFullscreenLoading()` [INFERRED]
views/basic-info/customer/index.vue → utils/fullscreen-loading.ts
- `buildInboundMetaFields()` --calls--> `push()` [INFERRED]
utils/production-work-order-card-meta.ts → views/operations/storage-facility/index.vue
- `dash()` --calls--> `formatDisplayOrDash()` [INFERRED]
components/business/infusion-schedule-outbound-chain-view/index.vue → utils/datetime-display.ts
- `dash()` --calls--> `formatDisplayOrDash()` [INFERRED]
components/business/clinical-schedule-payment-detail/index.vue → utils/datetime-display.ts
- `fmtMoney()` --calls--> `formatMoneyDisplay()` [INFERRED]
components/business/clinical-schedule-payment-detail/index.vue → utils/money-format.ts
- `subscribeTokenRefresh()` --calls--> `push()` [INFERRED]
@@ -96,192 +96,192 @@
### Community 0 - "Community 0"
Cohesion: 0.01
Nodes (202): fetchAccessLogList(), fetchActiveRegions(), fetchCategoryList(), fetchCategoryParameters(), fetchCellProductPriceList(), fetchCellProductTypeList(), fetchChannelAccount(), fetchChannelAgreementPrices() (+194 more)
Nodes (156): fetchAccessLogList(), fetchActiveRegions(), fetchCategoryList(), fetchCategoryParameters(), fetchCellProductPriceList(), fetchCellProductSpecList(), fetchCellProductTypeList(), fetchChannelAccount() (+148 more)
### Community 1 - "Community 1"
Cohesion: 0.01
Nodes (14): fetchCreateCheckupInstitution(), fetchCreateCheckupInstitutionInvoice(), fetchDeleteProjectSystemItem(), fetchDeptTree(), fetchGetRoleList(), fetchNotDeletedRegions(), fetchPostBoundUserIds(), fetchRegionList() (+6 more)
Cohesion: 0.03
Nodes (83): batchSavePilotCheckup(), deletePilotCheckupActualItem(), fetchCheckupInstitutionList(), fetchCheckupInstitutionPackageDetail(), fetchCheckupInstitutionPackages(), fetchPilotCheckupDetail(), fetchPilotCheckupList(), markPilotCheckupChecked() (+75 more)
### Community 2 - "Community 2"
Cohesion: 0.02
Nodes (100): fetchCellProductSpecList(), fetchUploadAttachment(), FireworkSystem, handleReportUpload(), handleReportUpload(), walk(), buildTemporaryViewSections(), async() (+92 more)
Cohesion: 0.03
Nodes (78): fetchUploadAttachment(), FireworkSystem, handleReportUpload(), handleReportUpload(), walk(), buildBaseFields(), buildFeeSection(), buildInboundBasicSection() (+70 more)
### Community 3 - "Community 3"
Cohesion: 0.03
Nodes (81): batchSavePilotCheckup(), deletePilotCheckupActualItem(), fetchCheckupInstitutionPackageDetail(), fetchCheckupInstitutionPackages(), fetchPilotCheckupActualItems(), fetchPilotCheckupDetail(), fetchPilotCheckupReserveItems(), markPilotCheckupChecked() (+73 more)
Nodes (62): fetchFullmoonTodoList(), fetchUpdateFullmoonTodoInsurance(), fetchCollectionProtocolAuditList(), fetchCollectionProtocolDetail(), fetchCollectionProtocolList(), fetchCreateProtocolInvoiceRequest(), fetchInvoiceEligiblePayments(), fetchPaymentDetailList() (+54 more)
### Community 4 - "Community 4"
Cohesion: 0.03
Nodes (34): fetchGetMenuList(), ComponentLoader, IframeRouteManager, MenuProcessor, RoutePermissionValidator, RouteRegistry, RouteTransformer, useAppMode() (+26 more)
Nodes (33): fetchGetMenuList(), ComponentLoader, IframeRouteManager, MenuProcessor, RouteRegistry, RouteTransformer, useAppMode(), useAuth() (+25 more)
### Community 5 - "Community 5"
Cohesion: 0.04
Nodes (45): buildBaseFields(), buildInboundBasicSection(), buildInboundCellStorageProductionViewSections(), buildInboundResearchDonationProductionViewSections(), buildOutboundBasicExperimentProductionViewSections(), buildOutboundClinicalProductionViewSections(), buildOutboundDetail(), buildOutboundPilotProductionViewSections() (+37 more)
Cohesion: 0.02
Nodes (28): fetchAllConsumablePacks(), fetchAllConsumables(), fetchAllConsumableStockLogs(), fetchAllEquipments(), fetchAllOutputTypes(), fetchAllProcessCategories(), fetchAllProcesses(), fetchAllReagents() (+20 more)
### Community 6 - "Community 6"
Cohesion: 0.04
Nodes (49): fetchMyProductionTasks(), fetchMyQcTaskList(), fetchQcTaskDetail(), fetchQcTaskList(), shouldApplyTriggerSourceFilter(), buildMineTableRows(), buildPresetTasksMap(), buildWorkOrderFromTasks() (+41 more)
Cohesion: 0.03
Nodes (42): handleBlur(), handleFocus(), handleInput(), fetchEthnicList(), formatNowDatetime(), formatAmount(), formatAmount(), formatProtocolAmount() (+34 more)
### Community 7 - "Community 7"
Cohesion: 0.04
Nodes (45): fetchCheckupInstitutionInvoices(), fetchCheckupInstitutionProjects(), fetchCreateCheckupInstitutionProject(), fetchUpdateCheckupInstitutionProject(), submitOutboundReleaseReview(), fetchStorageReleaseReviewDetail(), fetchStorageReleaseReviewList(), submitStorageReleaseReview() (+37 more)
Cohesion: 0.03
Nodes (48): buildTemporaryViewSections(), appendTaskResultSections(), batchTasksForPanelSlot(), buildConfiguredOnlySection(), for(), for(), set(), allTabInboundAnchorId() (+40 more)
### Community 8 - "Community 8"
Cohesion: 0.04
Nodes (36): fetchRoleOptions(), collectIds(), buildInboundBasicSection(), buildInboundCellStorageViewSections(), buildInboundResearchDonationViewSections(), buildReceptionSection(), buildTransportSection(), resolveInboundProtocolStatus() (+28 more)
Nodes (49): fetchCheckupInstitutionInvoices(), fetchCheckupInstitutionProjects(), fetchCreateCheckupInstitution(), fetchCreateCheckupInstitutionInvoice(), fetchCreateCheckupInstitutionProject(), fetchUpdateCheckupInstitution(), fetchUpdateCheckupInstitutionInvoice(), fetchUpdateCheckupInstitutionProject() (+41 more)
### Community 9 - "Community 9"
Cohesion: 0.04
Nodes (51): fetchFullmoonTodoList(), fetchInfusionScheduleMgmtDetail(), fetchUpdateFullmoonTodoInsurance(), fetchCollectionProtocolDetail(), fetchInvoiceEligiblePayments(), qcAttachmentFullUrl(), qcDownloadAttachment(), qcPreviewAttachment() (+43 more)
Cohesion: 0.03
Nodes (41): fetchCreateMenu(), fetchDeleteMenu(), fetchMenuTree(), fetchRoleOptions(), fetchUpdateMenu(), fetchDeleteMaterialBatch(), fetchMaterialBatchList(), fetchMaterialBatchOptions() (+33 more)
### Community 10 - "Community 10"
Cohesion: 0.04
Nodes (42): fetchStorageSlotSelectOptions(), useSettingsHandlers(), useSettingsPanel(), useSettingsState(), useCeremony(), useTheme(), if(), collectAllPostBindDeptIds() (+34 more)
Nodes (50): fetchMyProductionTasks(), fetchMyQcTaskList(), fetchQcTaskDetail(), fetchQcTaskList(), shouldApplyTriggerSourceFilter(), buildMineTableRows(), buildPresetTasksMap(), buildWorkOrderFromTasks() (+42 more)
### Community 11 - "Community 11"
Cohesion: 0.04
Nodes (14): fetchProductionWorkOrderQcInfo(), dash(), fmtMoney(), auditorDisplay(), dash(), ensureUnitsInOptions(), expressName(), formatYm() (+6 more)
Nodes (43): useSettingsHandlers(), useSettingsPanel(), useSettingsState(), RoutePermissionValidator, useCeremony(), useTheme(), if(), collectAllPostBindDeptIds() (+35 more)
### Community 12 - "Community 12"
Cohesion: 0.05
Nodes (29): fetchEthnicList(), formatNowDatetime(), applyDonationBundleToForm(), createEmptyTransport(), ensureEthnicOptionInList(), handleOpenForAdd(), if(), loadEthnicOptions() (+21 more)
Cohesion: 0.04
Nodes (45): fetchCreateCustomer(), fetchCustomerList(), fetchDeleteCustomer(), fetchUpdateCustomer(), updateInfusionScheduleStatus(), handleDialogClose(), handleAdd(), handleBatchDelete() (+37 more)
### Community 13 - "Community 13"
Cohesion: 0.05
Nodes (24): handleBlur(), handleFocus(), handleInput(), fetchClinicalReceiptConfirmed(), buildConfirmedParams(), buildPendingParams(), formatAmount(), handleConfirmedReset() (+16 more)
Cohesion: 0.04
Nodes (36): buildInboundBasicSection(), buildInboundCellStorageViewSections(), buildInboundResearchDonationViewSections(), buildReceptionSection(), buildTransportSection(), resolveInboundProtocolStatus(), protocolStatusDisplay(), maskIdCard() (+28 more)
### Community 14 - "Community 14"
Cohesion: 0.04
Nodes (31): dash(), fmtMoney(), auditorDisplay(), dash(), ensureUnitsInOptions(), expressName(), formatYm(), formatYmd() (+23 more)
### Community 15 - "Community 15"
Cohesion: 0.05
Nodes (34): fetchClinicalPaymentDetail(), fetchClinicalPayments(), fetchClinicalReceiptConfirmed(), fetchClinicalReceiptPending(), fetchClinicalRefundConfirmed(), fetchClinicalRefundPending(), fetchOrderAdjusts(), fetchOrderDetail() (+26 more)
### Community 16 - "Community 16"
Cohesion: 0.06
Nodes (37): fetchUserList(), fetchAddTaskStep(), fetchCopyTaskStep(), fetchDeleteTaskStep(), fetchDispatchProductionTaskSteps(), fetchForwardProductionTask(), fetchProductionTaskDetail(), fetchProductionTaskEditorInit() (+29 more)
### Community 15 - "Community 15"
Cohesion: 0.06
Nodes (38): completePilotApplication(), deletePilotApplication(), fetchPilotApplicationList(), startPilotApplication(), voidPilotApplication(), fetchClinicalRefundConfirmed(), buildConfirmedParams(), buildPendingParams() (+30 more)
### Community 16 - "Community 16"
### Community 17 - "Community 17"
Cohesion: 0.08
Nodes (37): formatDatetimeToMinute(), handleChineseDatetimePaste(), parseChineseDatetimeText(), parseBirthOrder(), parseChineseNumeral(), addSampleHint(), earliestCollectTime(), isMaternalBloodEmpty() (+29 more)
### Community 17 - "Community 17"
### Community 18 - "Community 18"
Cohesion: 0.1
Nodes (2): WebSocketClient, TableCache
### Community 18 - "Community 18"
### Community 19 - "Community 19"
Cohesion: 0.06
Nodes (20): fetchQcMaterialBatchList(), fetchQcMaterialBatchOptions(), fetchQcMaterialList(), fetchQcMaterialOptions(), fetchUpdateQcMaterialBatch(), fetchMarkQcMaterialUsageFullyUsed(), financeAttachmentsToUrlString(), ensureTabMounted() (+12 more)
### Community 19 - "Community 19"
Cohesion: 0.08
Nodes (33): fetchRefreshToken(), toLogin(), base64ToBytes(), bytesToBase64(), decryptJson(), deriveKey(), encryptJson(), fromBase64Url() (+25 more)
### Community 20 - "Community 20"
Cohesion: 0.09
Nodes (8): getDefaultLanguage(), checkStorageCompatibility(), StorageConfig, getSystemStorage(), getSysVersion(), StorageKeyManager, StorageCompatibilityManager, validateStorageData()
Cohesion: 0.08
Nodes (32): toLogin(), base64ToBytes(), bytesToBase64(), decryptJson(), deriveKey(), encryptJson(), fromBase64Url(), hexToBytes() (+24 more)
### Community 21 - "Community 21"
Cohesion: 0.07
Nodes (21): fetchDictDataOptions(), fetchDeleteMaterialBatch(), fetchMaterialBatchList(), fetchMaterialBatchOptions(), fetchMaterialList(), fetchMaterialOptions(), fetchUpdateMaterialBatch(), fetchMaterialUsageList() (+13 more)
Nodes (24): fetchMineProductionWorkOrderTabStepCounts(), fetchMineProductionWorkOrderTabStepCountsDeduped(), fetchProductionWorkOrderCellProductOptions(), fetchProductionWorkOrderDetail(), fetchProductionWorkOrderList(), fetchProductionWorkOrderQcDispatchOptions(), fetchProductionWorkOrderQcInfo(), fetchProductionWorkOrderTabStepCounts() (+16 more)
### Community 22 - "Community 22"
Cohesion: 0.09
Nodes (8): getDefaultLanguage(), checkStorageCompatibility(), StorageConfig, getSystemStorage(), getSysVersion(), StorageKeyManager, StorageCompatibilityManager, validateStorageData()
### Community 23 - "Community 23"
Cohesion: 0.08
Nodes (18): fetchProductionReceptionBySampleCode(), fetchProductionReceptionSubmit(), fetchProductionReceptionUpdate(), onUserSelectVisible(), remoteSearchUsers(), buildPayload(), ensureDefaultHandler(), initDialog() (+10 more)
### Community 23 - "Community 23"
Cohesion: 0.1
Nodes (27): fetchCreateCustomer(), fetchCustomerList(), fetchDeleteCustomer(), fetchUpdateCustomer(), updateInfusionScheduleStatus(), handleAdd(), handleDelete(), handleDropdownCommand() (+19 more)
### Community 24 - "Community 24"
Cohesion: 0.08
Nodes (18): createEmptySnapshots(), normalizeConfiguredReagents(), normalizeConsumables(), normalizeDataCollections(), normalizeReagents(), normalizeStepOutputs(), serializeAttachments(), serializeEquipmentIds() (+10 more)
Nodes (20): createEmptySnapshots(), normalizeConfiguredReagents(), normalizeConsumables(), normalizeDataCollections(), normalizeReagents(), normalizeStepOutputs(), serializeAttachments(), serializeEquipmentIds() (+12 more)
### Community 25 - "Community 25"
Cohesion: 0.09
Nodes (22): fetchMineProductionWorkOrderTabStepCounts(), fetchMineProductionWorkOrderTabStepCountsDeduped(), fetchProductionWorkOrderCellProductOptions(), fetchProductionWorkOrderDetail(), fetchProductionWorkOrderList(), fetchProductionWorkOrderQcDispatchOptions(), fetchProductionWorkOrderTabStepCounts(), fetchProductionWorkOrderTabStepCountsDeduped() (+14 more)
Nodes (28): completePilotApplication(), deletePilotApplication(), fetchPilotApplicationList(), startPilotApplication(), voidPilotApplication(), clearTableSelection(), handleBatchComplete(), handleBatchStart() (+20 more)
### Community 26 - "Community 26"
Cohesion: 0.12
Nodes (20): fetchGetMenuCodes(), fetchGetUserInfo(), fetchLogin(), fetchUpdateProfile(), fetchUploadProfileAvatar(), fetchUserInfo(), buildWebEncryptedLoginBody(), defaultAvatarPathByRole() (+12 more)
Cohesion: 0.11
Nodes (21): fetchGetMenuCodes(), fetchGetUserInfo(), fetchLogin(), fetchRefreshToken(), fetchUpdateProfile(), fetchUploadProfileAvatar(), fetchUserInfo(), buildWebEncryptedLoginBody() (+13 more)
### Community 27 - "Community 27"
Cohesion: 0.1
Nodes (12): fetchCheckupInstitutionList(), fetchPilotCheckupList(), canFillCheckupInfo(), canMarkChecked(), handleReset(), handleSearch(), hasPrimaryCheckupActions(), loadData() (+4 more)
### Community 28 - "Community 28"
Cohesion: 0.09
Nodes (11): fetchMineQcWorkOrderTabUnfinishedCounts(), fetchOutboundQcDetail(), fetchQcWorkOrderDetail(), fetchQcWorkOrderList(), fetchQcWorkOrderTabUnfinishedCounts(), reload(), reloadTabCounts(), handleMenuJump() (+3 more)
### Community 29 - "Community 29"
Cohesion: 0.13
Nodes (19): fetchCreateMenu(), fetchDeleteMenu(), fetchMenuTree(), fetchUpdateMenu(), postorder(), preorder(), applyTreeExpand(), handleAdd() (+11 more)
### Community 30 - "Community 30"
### Community 28 - "Community 28"
Cohesion: 0.12
Nodes (15): addCopyButton(), highlightCode(), insertLineNumbers(), isBlockProcessed(), markBlockAsProcessed(), processBlock(), setupHighlightDirective(), setupRippleDirective() (+7 more)
### Community 31 - "Community 31"
### Community 29 - "Community 29"
Cohesion: 0.11
Nodes (11): fetchOutboundReleaseMaterial(), fetchOutboundReleaseReviewDetail(), fetchOutboundReleaseReviewList(), fetchReleaseReviewList(), handleReset(), handleSearch(), handleToggleSelect(), loadData() (+3 more)
### Community 32 - "Community 32"
### Community 30 - "Community 30"
Cohesion: 0.13
Nodes (18): fetchCellSampleTypeList(), fetchCreateCellSampleType(), fetchDeleteCellSampleType(), fetchUpdateCellSampleType(), handleAdd(), handleDelete(), handleDropdownCommand(), handleEdit() (+10 more)
### Community 33 - "Community 33"
### Community 31 - "Community 31"
Cohesion: 0.19
Nodes (15): fetchAttachmentDownloadUrl(), attachmentFullUrl(), ensureUniqueZipEntryName(), fetchAttachmentBlob(), getAttachmentExtension(), resolveAttachmentFileName(), sanitizeZipPathSegment(), applyInboundLabStorageCodePrefix() (+7 more)
### Community 34 - "Community 34"
### Community 32 - "Community 32"
Cohesion: 0.12
Nodes (12): fetchApproveTask(), fetchBusinessAllTasks(), fetchCompletedTasks(), fetchDesignerData(), fetchInstanceDetail(), fetchMyInstances(), fetchPendingTasks(), fetchProcessDefList() (+4 more)
### Community 33 - "Community 33"
Cohesion: 0.16
Nodes (14): fetchCreateEnvDetectItem(), fetchDeleteEnvDetectItem(), fetchEnvDetectItemDetail(), fetchEnvDetectItemList(), fetchEnvDetectItemsActive(), fetchUpdateEnvDetectItem(), handleAdd(), handleBatchDelete() (+6 more)
### Community 35 - "Community 35"
### Community 34 - "Community 34"
Cohesion: 0.16
Nodes (10): useTable(), useTableImpl(), getColumnChecks(), useTableColumns(), createErrorHandler(), createSmartDebounce(), defaultResponseAdapter(), extractPagination() (+2 more)
### Community 36 - "Community 36"
### Community 35 - "Community 35"
Cohesion: 0.27
Nodes (14): useChart(), useChartComponent(), useChartOps(), colourBlend(), getCssVar(), getDarkColor(), getLightColor(), handleElementThemeColor() (+6 more)
### Community 37 - "Community 37"
### Community 36 - "Community 36"
Cohesion: 0.33
Nodes (13): buildProtocolPaymentFlowSteps(), dash(), financeReceiptTime(), formatAmount(), hasFinanceReceipt(), hasFinanceRefund(), hasReceiptSubmit(), hasRefundSubmit() (+5 more)
### Community 38 - "Community 38"
### Community 37 - "Community 37"
Cohesion: 0.19
Nodes (6): fetchServiceOrderTxnList(), handleReset(), handleSearch(), handleTabChange(), loadData(), switchTab()
### Community 40 - "Community 40"
### Community 39 - "Community 39"
Cohesion: 0.24
Nodes (8): fullFileUrl(), handlePreviewAttachment(), isVideoFile(), normalizeDisplayValue(), resolveReviewCellType(), resolveReviewQuantity(), resolveReviewSpecText(), uniqueJoined()
### Community 41 - "Community 41"
### Community 40 - "Community 40"
Cohesion: 0.24
Nodes (4): addMaterialRow(), nextMaterialRowKey(), onRequisitionSelect(), removeMaterialRow()
### Community 42 - "Community 42"
### Community 41 - "Community 41"
Cohesion: 0.25
Nodes (2): handleTouchEnd(), setTransition()
### Community 45 - "Community 45"
### Community 44 - "Community 44"
Cohesion: 0.28
Nodes (4): fetchMyProductionMaterialConsumptions(), handleReset(), handleSearch(), loadData()
### Community 47 - "Community 47"
### Community 46 - "Community 46"
Cohesion: 0.39
Nodes (6): isIgnorableScriptError(), normalizeErrorMessage(), registerPromiseErrorHandler(), registerResourceErrorHandler(), scriptErrorHandler(), setupErrorHandle()
### Community 48 - "Community 48"
### Community 47 - "Community 47"
Cohesion: 0.36
Nodes (1): TableHeightCalculator
### Community 50 - "Community 50"
### Community 49 - "Community 49"
Cohesion: 0.33
Nodes (2): logApiCryptoBootInfo(), maskSecret()
### Community 51 - "Community 51"
### Community 50 - "Community 50"
Cohesion: 0.38
Nodes (4): handleFocus(), handleInput(), parseDecimalToNumber(), sanitizeDecimalInput()
### Community 51 - "Community 51"
Cohesion: 0.29
Nodes (2): fetchLeaveDetail(), fetchLeaveList()
### Community 52 - "Community 52"
Cohesion: 0.4
Nodes (2): isUnfinishedQcWorkOrder(), resolveQcWorkOrderUnfinishedBadgeCount()
@@ -327,13 +327,15 @@ Cohesion: 1.0
Nodes (2): emptyTabCounts(), useQcWorkOrderTabUnfinishedCounts()
## Knowledge Gaps
- **Thin community `Community 17`** (42 nodes): `WebSocketClient`, `.calculateReconnectDelay()`, `.clearAllTimers()`, `.clearConnectionTimers()`, `.clearTimer()`, `.close()`, `.closeCurrentSocketForReconnect()`, `.connect()`, `.connectionStatusText()`, `.constructor()`, `.destroyInstance()`, `.flushMessageQueue()`, `.getInstance()`, `.getReadyStateText()`, `.handleClose()`, `.handleConnectionTimeout()`, `.handleError()`, `.handleMessage()`, `.handleOpen()`, `.init()`, `.isWebSocketConnected()`, `.reconnect()`, `.resetHeartbeat()`, `.send()`, `.startHeartbeat()`, `.startPing()`, `TableCache`, `.cleanupExpired()`, `.clear()`, `.clearByTags()`, `.clearCurrentSearch()`, `.clearPagination()`, `.constructor()`, `.evictLRU()`, `.generateKey()`, `.generateTags()`, `.get()`, `.getStats()`, `.log()`, `.set()`, `index.ts`, `tableCache.ts`
- **Thin community `Community 18`** (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 42`** (9 nodes): `cleanupEventListeners()`, `handleTouchEnd()`, `handleTouchMove()`, `handleTouchStart()`, `handleWheelScroll()`, `if()`, `setTransition()`, `setupEventListeners()`, `index.vue`
- **Thin community `Community 41`** (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 48`** (8 nodes): `TableHeightCalculator`, `.calculate()`, `.calculateOffset()`, `.calculatePaginationOffset()`, `.constructor()`, `.getHeaderHeight()`, `useTableHeight()`, `useTableHeight.ts`
- **Thin community `Community 47`** (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 50`** (7 nodes): `App.vue`, `main.ts`, `refreshButtonAutoIcons()`, `refreshPanelTitleIcons()`, `logApiCryptoBootInfo()`, `maskSecret()`, `console.ts`
- **Thin community `Community 49`** (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 51`** (7 nodes): `fetchCreateLeave()`, `fetchDeleteLeave()`, `fetchLeaveDetail()`, `fetchLeaveList()`, `fetchSubmitLeave()`, `fetchUpdateLeave()`, `leave.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 52`** (6 nodes): `formatQcWorkOrderUnfinishedBadgeCount()`, `isUnfinishedQcWorkOrder()`, `qcWorkOrderUnfinishedBadgeTitle()`, `resolveQcWorkOrderUnfinishedBadgeCount()`, `sumQcWorkOrderGroupUnfinishedBadgeCount()`, `qc-work-order-unfinished-badge.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
@@ -359,17 +361,17 @@ Nodes (2): emptyTabCounts(), useQcWorkOrderTabUnfinishedCounts()
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `get()` connect `Community 0` to `Community 1`, `Community 2`, `Community 3`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 14`, `Community 15`, `Community 18`, `Community 21`, `Community 22`, `Community 23`, `Community 25`, `Community 26`, `Community 27`, `Community 28`, `Community 29`, `Community 31`, `Community 32`, `Community 34`, `Community 38`, `Community 45`?**
_High betweenness centrality (0.278) - this node is a cross-community bridge._
- **Why does `push()` connect `Community 2` to `Community 33`, `Community 1`, `Community 3`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 41`, `Community 14`, `Community 16`, `Community 17`, `Community 19`, `Community 25`, `Community 28`?**
_High betweenness centrality (0.238) - this node is a cross-community bridge._
- **Why does `fetchNotDeletedRegions()` connect `Community 1` to `Community 2`?**
_High betweenness centrality (0.034) - this node is a cross-community bridge._
- **Are the 277 inferred relationships involving `get()` (e.g. with `buildNodeCodePathFromFlat()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
_`get()` has 277 INFERRED edges - model-reasoned connections that need verification._
- **Are the 74 inferred relationships involving `push()` (e.g. with `refreshQcMenuBadges()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
_`push()` has 74 INFERRED edges - model-reasoned connections that need verification._
- **Are the 20 inferred relationships involving `emit()` (e.g. with `handleSubmit()` and `handleDialogClose()`) actually correct?**
_`emit()` has 20 INFERRED edges - model-reasoned connections that need verification._
- **Are the 18 inferred relationships involving `set()` (e.g. with `buildNodeCodePathFromFlat()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
_`set()` has 18 INFERRED edges - model-reasoned connections that need verification._
- **Why does `get()` connect `Community 0` to `Community 1`, `Community 2`, `Community 3`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 15`, `Community 16`, `Community 19`, `Community 21`, `Community 23`, `Community 25`, `Community 26`, `Community 27`, `Community 29`, `Community 30`, `Community 32`, `Community 33`, `Community 37`, `Community 44`, `Community 51`?**
_High betweenness centrality (0.277) - this node is a cross-community bridge._
- **Why does `push()` connect `Community 2` to `Community 0`, `Community 1`, `Community 3`, `Community 6`, `Community 7`, `Community 8`, `Community 10`, `Community 11`, `Community 13`, `Community 14`, `Community 16`, `Community 17`, `Community 18`, `Community 20`, `Community 21`, `Community 24`, `Community 25`, `Community 27`, `Community 31`, `Community 40`?**
_High betweenness centrality (0.256) - this node is a cross-community bridge._
- **Why does `fetchNotDeletedRegions()` connect `Community 0` to `Community 2`?**
_High betweenness centrality (0.035) - this node is a cross-community bridge._
- **Are the 278 inferred relationships involving `get()` (e.g. with `buildNodeCodePathFromFlat()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
_`get()` has 278 INFERRED edges - model-reasoned connections that need verification._
- **Are the 76 inferred relationships involving `push()` (e.g. with `refreshQcMenuBadges()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
_`push()` has 76 INFERRED edges - model-reasoned connections that need verification._
- **Are the 23 inferred relationships involving `emit()` (e.g. with `handleSubmit()` and `handleDialogClose()`) actually correct?**
_`emit()` has 23 INFERRED edges - model-reasoned connections that need verification._
- **Are the 19 inferred relationships involving `set()` (e.g. with `buildNodeCodePathFromFlat()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
_`set()` has 19 INFERRED edges - model-reasoned connections that need verification._
+4 -4
View File
@@ -57,12 +57,12 @@
</div>
<div id="legend"></div>
</div>
<div id="stats">2818 nodes &middot; 3921 edges &middot; 334 communities</div>
<div id="stats">2845 nodes &middot; 3968 edges &middot; 336 communities</div>
</div>
<script>
const RAW_NODES = [{"id": "app_vue", "label": "App.vue", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "App.vue", "community": 50, "community_name": "Community 50", "source_file": "App.vue", "file_type": "code", "degree": 3}, {"id": "src_app_refreshbuttonautoicons", "label": "refreshButtonAutoIcons()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshButtonAutoIcons()", "community": 50, "community_name": "Community 50", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "src_app_refreshpaneltitleicons", "label": "refreshPanelTitleIcons()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshPanelTitleIcons()", "community": 50, "community_name": "Community 50", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "main_ts", "label": "main.ts", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "main.ts", "community": 50, "community_name": "Community 50", "source_file": "main.ts", "file_type": "code", "degree": 4}, {"id": "src_main_masksecret", "label": "maskSecret()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "maskSecret()", "community": 50, "community_name": "Community 50", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "src_main_logapicryptobootinfo", "label": "logApiCryptoBootInfo()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "logApiCryptoBootInfo()", "community": 50, "community_name": "Community 50", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "env_d_ts", "label": "env.d.ts", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "env.d.ts", "community": 111, "community_name": "Community 111", "source_file": "env.d.ts", "file_type": "code", "degree": 0}, {"id": "shims_loose_d_ts", "label": "shims-loose.d.ts", "color": {"background": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "shims-loose.d.ts", "community": 112, "community_name": "Community 112", "source_file": "shims-loose.d.ts", "file_type": "code", "degree": 0}, {"id": "directives_index_ts", "label": "index.ts", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "index.ts", "community": 30, "community_name": "Community 30", "source_file": "directives/index.ts", "file_type": "code", "degree": 1}, {"id": "directives_index_setupglobdirectives", "label": "setupGlobDirectives()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.5, "font": {"size": 0, "color": "#ffffff"}, "title": "setupGlobDirectives()", "community": 30, "community_name": "Community 30", "source_file": "directives/index.ts", "file_type": "code", "degree": 5}, {"id": "directives_core_roles_ts", "label": "roles.ts", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "roles.ts", "community": 30, "community_name": "Community 30", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 3}, {"id": "core_roles_checkrolepermission", "label": "checkRolePermission()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "checkRolePermission()", "community": 30, "community_name": "Community 30", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_removeelement", "label": "removeElement()", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "removeElement()", "community": 30, "community_name": "Community 30", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_setuprolesdirective",Line truncated
const RAW_EDGES = [{"from": "app_vue", "to": "src_app_refreshbuttonautoicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "src_app_refreshpaneltitleicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "main_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "utils_sys_console_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_masksecret", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_logapicryptobootinfo", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "src_main_masksecret", "to": "src_main_logapicryptobootinfo", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_ts", "to": "directives_index_setupglobdirectives", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_setupglobdirectives", "to": "core_auth_setupauthdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "core_roles_setuprolesdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_highlight_setuphighlightdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_ripple_setuprippledirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_core_roles_ts", "to": "core_roles_checkrolepermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_setuprolesdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_roles_checkrolepermission", "to": "core_roles_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_checkauthpermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_setupauthdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_checkauthpermission", "to": "core_auth_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_ripple_ts", "to": "business_ripple_setuprippledirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_highlightcode", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_insertlinenumbers", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_addcopybutton", "label": "contains", "title": "contains [EXTRACTED]", "dLine truncated
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 395}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 201}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 146}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 113}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 102}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 78}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 78}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 77}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 69}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 69}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 69}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 58}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 53}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 53}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 50}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 49}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 47}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 42}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 42}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 41}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 37}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 37}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 36}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 35}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 34}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 34}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 28}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 26}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 24}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 24}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 22}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 22}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 22}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 20}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 19}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 17}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 16}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 14}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 14}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 13}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 13}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 10}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 9}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 9}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 9}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 9}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 9}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 8}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 8}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 8}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 7}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 7}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 6}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 6}, {"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": 5}, {"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": 4}, {"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": "#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": "#E15759", "border": "#E15759", "highlight": {"background": "#ffffff", "border": "#E15759"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "env.d.ts", "community": 112, "community_name": "Community 112", "source_file": "env.d.ts", "file_type": "code", "degree": 0}, {"id": "shims_loose_d_ts", "label": "shims-loose.d.ts", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "shims-loose.d.ts", "community": 113, "community_name": "Community 113", "source_file": "shims-loose.d.ts", "file_type": "code", "degree": 0}, {"id": "directives_index_ts", "label": "index.ts", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "index.ts", "community": 28, "community_name": "Community 28", "source_file": "directives/index.ts", "file_type": "code", "degree": 1}, {"id": "directives_index_setupglobdirectives", "label": "setupGlobDirectives()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.5, "font": {"size": 0, "color": "#ffffff"}, "title": "setupGlobDirectives()", "community": 28, "community_name": "Community 28", "source_file": "directives/index.ts", "file_type": "code", "degree": 5}, {"id": "directives_core_roles_ts", "label": "roles.ts", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "roles.ts", "community": 28, "community_name": "Community 28", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 3}, {"id": "core_roles_checkrolepermission", "label": "checkRolePermission()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "checkRolePermission()", "community": 28, "community_name": "Community 28", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_removeelement", "label": "removeElement()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "removeElement()", "community": 28, "community_name": "Community 28", "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": 435}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 114}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 110}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 95}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 94}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 88}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 88}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 88}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 81}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 78}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 77}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 76}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 70}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 69}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 65}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 61}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 50}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 47}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 42}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 42}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 40}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 38}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 37}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 36}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 36}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 35}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 29}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 24}, {"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": 22}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 20}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 19}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 19}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 17}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 16}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 14}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 14}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 13}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 13}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 10}, {"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": 7}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 6}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 6}, {"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": 5}, {"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": 4}, {"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", "cLine truncated
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
function esc(s) {
File diff suppressed because it is too large. Load diff
+116 -113
View File
@@ -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": 1782982446.345936,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1782982439.1821134,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1783327276.2077293,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1783327119.615712,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/store/index.ts": 1781272556.364766,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/router/index.ts": 1782394569.8806834,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/composables/useAttachmentDropZone.ts": 1782873161.9839864,
@@ -43,24 +43,24 @@
"/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": 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/production-work-order-tabs.ts": 1783305589.2225218,
"/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,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/fullscreen-loading.ts": 1781272556.3849921,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/chinese-numeral-parse.ts": 1782960575.662593,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/sample-production-reception-fields.ts": 1782806741.4880455,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-material-ui.ts": 1781525352.6976836,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-tabs.ts": 1782802260.7327676,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-tabs.ts": 1783326303.9709864,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-unfinished-badge.ts": 1782878267.729195,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-card-meta.ts": 1782894738.569876,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-card-meta.ts": 1783323113.1249304,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-category.ts": 1782393809.3917818,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/router.ts": 1781272556.3875713,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-mine-task-groups.ts": 1782703027.2893605,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-mine-task-groups.ts": 1782888808.4986835,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-mine-task-groups.ts": 1783305913.622324,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-mine-task-groups.ts": 1783327864.4037368,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/expected-cell-count.ts": 1782705039.2515786,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/protocol-payment-labels.ts": 1782893910.9937537,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts": 1782894736.648977,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts": 1782894000.6502283,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts": 1783303672.6673675,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts": 1783306636.6246853,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/fetch-paged-list.ts": 1781272556.3903377,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/decimal-input-format.ts": 1782807247.117702,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/sort-order.ts": 1781272556.3913012,
@@ -74,16 +74,17 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/equipment-select.ts": 1781524048.96866,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-item-param-options.ts": 1782446792.147386,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/clinical-payment-flow-steps.ts": 1782806499.3105526,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-step-badge.ts": 1782881450.5731556,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-step-badge.ts": 1783307221.345424,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts": 1783327872.9643228,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts": 1782960400.9073825,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/copy-text.ts": 1781272556.4018052,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/tree-path.ts": 1781272556.402468,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/mask-sensitive.ts": 1781272556.4029639,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/sample-reception-view-sections.ts": 1782806513.145186,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts": 1782605793.6179895,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts": 1783306730.912153,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/inbound-sample-special-mark.ts": 1782889894.1376855,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-category.ts": 1782703985.4586673,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-menu-badge.ts": 1782703040.9438033,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-menu-badge.ts": 1783307225.4832592,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/attachment-zip.ts": 1782875325.855345,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/numeric-input-parse.ts": 1782179343.5953708,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/index.ts": 1781272556.410244,
@@ -93,6 +94,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/transfer-type-dict.ts": 1782713881.7742825,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/protocol-standard-import-parse.ts": 1782961760.3056056,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/cell-product-spec.ts": 1782709946.3419836,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-selection-expand.ts": 1783322120.2724662,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-labels.ts": 1781272556.4115942,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-step-assignee.ts": 1782472559.244021,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/process-material-ui.ts": 1781528129.339137,
@@ -274,7 +276,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts": 1782894235.5504115,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-material.ts": 1782404996.1897874,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/workflow.ts": 1781272556.6579714,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts": 1782886679.692672,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts": 1783307216.2495985,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-production-reception.ts": 1782719155.415783,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task-result.ts": 1782379634.2324347,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/protocol-sample-collection.ts": 1781272556.659353,
@@ -294,10 +296,10 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts": 1781272556.666838,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-stock-check.ts": 1781427280.4992144,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts": 1782893816.502791,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts": 1782886913.2524905,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts": 1783327864.9737554,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-item-param.ts": 1782446790.5508618,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/env-detect-item.ts": 1781272556.668322,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts": 1782602751.262628,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts": 1783305570.9180024,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-stock-check.ts": 1781424012.5471919,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material-usage.ts": 1781424013.8349903,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-material.ts": 1781690334.9639037,
@@ -306,11 +308,11 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material.ts": 1782894693.658258,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-reception.ts": 1782719389.581961,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/auth.ts": 1782122651.4628098,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts": 1782886679.6424742,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts": 1783327862.9771214,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/auth/login/index.vue": 1782893854.347133,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/refund-confirm/index.vue": 1782893854.3402505,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/my-material-usage/index.vue": 1782893854.311591,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/index.vue": 1782894711.5623844,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/index.vue": 1783326448.8937888,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolStatusChangeDialog.vue": 1782894806.0188534,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue": 1782894754.993778,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolAttachmentReadonly.vue": 1782893854.403395,
@@ -321,63 +323,63 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-info/index.vue": 1782893854.372695,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/storage-cert/index.vue": 1782893854.380672,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/index.vue": 1782893854.4304602,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/StorageEntryInfoTab.vue": 1782893888.546743,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/SampleCollectionInfoTab.vue": 1782893888.5469391,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/SampleQcInfoTab.vue": 1782893888.5471184,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/SampleReceptionInfoTab.vue": 1782893888.547302,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/StorageCertTab.vue": 1782893888.5475702,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue": 1782893888.5482585,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/ProtocolAuditTab.vue": 1782894728.486781,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/PaymentInfoTab.vue": 1782893920.0282564,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/material/index.vue": 1782896158.127473,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/material/MaterialUsageTab.vue": 1782895661.1992,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/material/MaterialStockCheckTab.vue": 1782893854.1554854,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/StorageEntryInfoTab.vue": 1783326448.897737,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/SampleCollectionInfoTab.vue": 1783326448.898472,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/SampleQcInfoTab.vue": 1783326448.8989031,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/SampleReceptionInfoTab.vue": 1783326448.899512,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/StorageCertTab.vue": 1783326448.8999357,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue": 1783326448.9010873,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/ProtocolAuditTab.vue": 1783326448.9027853,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/PaymentInfoTab.vue": 1783326448.9036555,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/material/index.vue": 1783326448.9051046,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/material/MaterialUsageTab.vue": 1783326448.9058185,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/material/MaterialStockCheckTab.vue": 1783326448.9063764,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue": 1782893854.0469422,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/storage-entry-info/index.vue": 1782893854.0034747,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/index.vue": 1782893920.7943869,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/RefundConfirmTab.vue": 1782893932.9908028,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/InvoiceRequestTab.vue": 1782893853.8783379,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/index.vue": 1783326448.907755,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/RefundConfirmTab.vue": 1783326448.9083776,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/InvoiceRequestTab.vue": 1783326448.9092562,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/material-stock-log/index.vue": 1782893853.8275082,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/outside/Iframe.vue": 1782893853.8888595,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/demo/index.vue": 1782893853.8571184,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/clean-room/index.vue": 1782893853.8198242,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/clean-room/index.vue": 1783326448.9116178,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/storage-facility/index.vue": 1782893853.715029,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/exhibition-appointment/index.vue": 1782893853.5207253,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/audit/index.vue": 1782894737.8470433,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/exhibition-appointment/index.vue": 1783326448.913004,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/audit/index.vue": 1783326448.9140418,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/sample-info/index.vue": 1782893854.018205,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/sample-info/DonationSampleCollectionInfoTab.vue": 1782893918.3749776,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/index.vue": 1782894737.435639,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/sample-info/DonationSampleCollectionInfoTab.vue": 1783326448.9150352,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/index.vue": 1783326448.9154768,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationAuditDialog.vue": 1782893853.885547,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue": 1782894737.847069,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue": 1782959415.9363396,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationStatusChangeDialog.vue": 1782894808.1240149,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/dashboard/console/index.vue": 1782893853.5152776,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/tenant/index.vue": 1782893853.6602998,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/order/index.vue": 1782894735.0365336,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/unit/index.vue": 1782893853.4396129,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/role/index.vue": 1782893854.095696,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue": 1782893854.0815024,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/category/index.vue": 1782893854.1658938,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/express/index.vue": 1782893854.1084614,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue": 1782893854.0087445,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/tenant/index.vue": 1783326448.9181187,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/order/index.vue": 1783326410.4687486,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/unit/index.vue": 1783326448.9195106,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/role/index.vue": 1783326448.9200218,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue": 1783326448.9210706,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/category/index.vue": 1783326448.9218316,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/express/index.vue": 1783326448.9225786,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue": 1783326448.9230077,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/detail.vue": 1782893853.853974,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/modules/user-dialog.vue": 1782893853.9540384,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/modules/user-search.vue": 1782893853.8827589,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue": 1782893853.7838233,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/workflow/my-applications/index.vue": 1782893853.9951289,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/workflow/task-pending/index.vue": 1782893853.9475517,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/workflow/task-completed/index.vue": 1782893853.8960793,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue": 1783326448.9247322,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/workflow/my-applications/index.vue": 1783326448.9256914,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/workflow/task-pending/index.vue": 1783326448.9262764,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/workflow/task-completed/index.vue": 1783326448.926806,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/workflow/components/ProcessStatusTag.vue": 1782893853.8633924,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/workflow/components/ApprovalDialog.vue": 1782893853.836738,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/workflow/designer/FlowDesigner.vue": 1782893853.8128686,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/workflow/process/index.vue": 1782893853.6662621,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/menu/index.vue": 1782893853.4886823,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/site/index.vue": 1782893853.416447,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/dept/index.vue": 1782893853.1672907,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/dict/index.vue": 1782893853.0456495,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/leave/index.vue": 1782893852.9582078,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/workflow/process/index.vue": 1783326448.9286532,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/menu/index.vue": 1783326448.9295316,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/site/index.vue": 1783326448.9302733,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/dept/index.vue": 1783326448.9311762,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/dict/index.vue": 1783326448.9326534,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/leave/index.vue": 1783326448.934463,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/output-type/index.vue": 1782893852.8585393,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/index.vue": 1782894735.4350092,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/index.vue": 1783326448.9373286,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/SourceChainGraph.vue": 1782893852.699336,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/source-chain/ChainLinkEdge.vue": 1782893852.6166403,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/source-chain/chainInject.ts": 1781272556.806028,
@@ -388,11 +390,11 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/source-chain/chainToFlow.ts": 1781272556.808583,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/my-production-material-usage/index.vue": 1782893852.8452,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-route/index.vue": 1782893852.7870154,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/sop/index.vue": 1782893852.719772,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/sop/index.vue": 1783326448.939372,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-task/index.vue": 1782893852.6013515,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/reagent/index.vue": 1782893852.5094585,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/reagent/index.vue": 1783326448.9403174,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue": 1782893853.82419,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionStepBadge.vue": 1782893853.410545,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionStepBadge.vue": 1783307223.0443783,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts": 1782822330.679258,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue": 1782893853.2023683,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue": 1782893853.1254928,
@@ -407,16 +409,16 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskPaperAttachmentsPanel.vue": 1782893853.2361045,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue": 1782893853.2094715,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskOutputProductDialog.vue": 1782893853.1137185,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderCardList.vue": 1782893852.9759836,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderCardList.vue": 1783306631.8896008,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ForwardTaskDialog.vue": 1782893852.8302743,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderQcViewDialog.vue": 1782893852.7941833,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskStepSubList.vue": 1782893852.736343,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailActionBar.vue": 1782893852.7041657,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderTabBar.vue": 1782893852.6336923,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderTabBar.vue": 1783307222.9653108,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/task-step-editor-persistence.ts": 1782811944.10899,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue": 1782893852.5906737,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/tabs/OutboundPilotTab.vue": 1782893853.79892,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/tabs/ProductionWorkOrderTabPanel.vue": 1782893853.7061236,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/tabs/ProductionWorkOrderTabPanel.vue": 1783305587.9386103,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/tabs/InboundCellStorageTab.vue": 1782893853.6783733,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/tabs/OutboundBasicExperimentTab.vue": 1782893853.643957,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/tabs/InboundResearchDonationTab.vue": 1782893853.5110183,
@@ -425,8 +427,8 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/tabs/OutboundClinicalTab.vue": 1782893853.4355772,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/production-view-sections.ts": 1782894016.9828084,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionViewDialog.ts": 1782894735.182986,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabStepCounts.ts": 1782703040.673378,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts": 1782881469.5639377,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabStepCounts.ts": 1783307221.1570694,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts": 1783305912.7244124,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/view-dialogs/InboundResearchDonationProductionViewDialog.vue": 1782893853.8921535,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/view-dialogs/OutboundClinicalProductionViewDialog.vue": 1782893853.8665204,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/view-dialogs/InboundCellStorageProductionViewDialog.vue": 1782893853.844183,
@@ -436,55 +438,56 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/view-dialogs/ProductionWorkOrderViewDialogFrame.vue": 1782893853.8742938,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/view-dialogs/TemporaryProductionViewDialog.vue": 1782893853.8400733,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/consumable-pack/index.vue": 1782893852.5431323,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/consumable/index.vue": 1782893852.7799647,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/consumable/ConsumablePackTab.vue": 1782894737.21965,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cleanroom-garment/index.vue": 1782893852.58252,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/index.vue": 1782894736.1945877,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/MaterialConsumptionTab.vue": 1782893852.3221345,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/consumable/index.vue": 1783326448.950747,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/consumable/ConsumablePackTab.vue": 1783326448.951496,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cleanroom-garment/index.vue": 1783326448.9530618,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/index.vue": 1783326448.9552636,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/MaterialConsumptionTab.vue": 1783326448.9566333,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/ProductionMaterialConfiguredCatalogDialog.vue": 1782893852.288642,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/ProductionMaterialUsageTab.vue": 1782894736.9178555,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/ProductionMaterialStockCheckTab.vue": 1782893852.1908164,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/ProductionMaterialPrepTab.vue": 1782893852.1329908,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/ProductionMaterialUsageTab.vue": 1783326448.9573576,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/ProductionMaterialStockCheckTab.vue": 1783326448.957976,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/ProductionMaterialPrepTab.vue": 1783326448.9587293,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/sample-reception-completion/index.vue": 1782893851.986683,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/my-production-task/index.vue": 1782893851.9189324,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/equipment/index.vue": 1782893851.7107234,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/index.vue": 1782893851.6625698,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue": 1782893851.6356437,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/equipment/index.vue": 1783326448.9595375,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/index.vue": 1783326448.9607878,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue": 1783326448.961669,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/index.vue": 1782893851.5846715,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/OutputTypeTab.vue": 1782893851.5618722,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/OutputTypeTab.vue": 1783326448.9644928,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/index/index.vue": 1782893851.535544,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue": 1782893854.1761613,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue": 1783325990.1820126,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderTaskResultPanel.vue": 1782893853.990059,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue": 1782893854.0760326,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSingleCard.vue": 1782893854.0393713,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue": 1783322273.1684673,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSingleCard.vue": 1783321996.7327573,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderConfigureBatches.vue": 1782893853.9850519,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderFeeSummaryBar.vue": 1782893853.9414947,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSampleGroup.vue": 1782893854.1439548,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSampleGroup.vue": 1783327679.8364553,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSelectCheckbox.vue": 1783322131.5377831,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderBatchResultTabs.vue": 1782893854.2285423,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcUnfinishedBadge.vue": 1782893854.1479301,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderTaskSubList.vue": 1782961148.468002,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderTabBar.vue": 1782893854.0314786,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderBatchSubList.vue": 1782893854.0134735,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderCardList.vue": 1782893853.9724226,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderCardList.vue": 1783327877.2203474,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolPaymentPanel.vue": 1782893853.9119349,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/tabs/OutboundPilotTab.vue": 1782893854.159883,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/tabs/InboundCellStorageTab.vue": 1782893854.1357596,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/tabs/QcWorkOrderTabPanel.vue": 1782893854.0690873,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/tabs/QcWorkOrderTabPanel.vue": 1783327002.974947,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/tabs/OutboundBasicExperimentTab.vue": 1782893854.2442567,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/tabs/InboundResearchDonationTab.vue": 1782893854.1390157,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/tabs/AllTab.vue": 1782893854.1312714,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/tabs/TemporaryTab.vue": 1782893854.0570166,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/tabs/tab-registry.ts": 1782393772.4243252,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/tabs/OutboundClinicalTab.vue": 1782893854.022184,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/useQcWorkOrderAttachmentExport.ts": 1782875325.8554192,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/useQcWorkOrderAttachmentExport.ts": 1783322133.8456562,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/useOutboundQcViewDialog.ts": 1782398591.849214,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/useQcWorkOrderTaskViewSections.ts": 1782527340.2357967,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/useQcWorkOrderTabUnfinishedCounts.ts": 1782394182.2860413,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/useInboundQcViewDialog.ts": 1782398606.799624,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/useQcViewAttachmentHelpers.ts": 1781581579.8782947,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/qc-work-order-selection.ts": 1782875325.8554592,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/qc-work-order-selection.ts": 1783322122.0742447,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/inbound-view-sections.ts": 1782894738.7775028,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/useQcWorkOrderTabPage.ts": 1782802279.1326668,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/composables/useQcWorkOrderTabPage.ts": 1783326302.5727773,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/view-dialogs/QcWorkOrderSystemViewDialog.vue": 1782893854.2724051,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/view-dialogs/OutboundQcProductTable.vue": 1782893854.2596574,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/view-dialogs/OutboundQcDiagnosisAttachments.vue": 1782893854.2985036,
@@ -495,23 +498,23 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/view-dialogs/InboundCellStorageViewDialog.vue": 1782893854.3284824,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/view-dialogs/TemporaryQcViewDialog.vue": 1782893854.3063695,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/view-dialogs/OutboundPilotViewDialog.vue": 1782893854.200392,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception-check-item/index.vue": 1782893853.86999,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception-check-item/index.vue": 1783326448.973901,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/lab-test-item/index.vue": 1782893853.832618,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/lab-test-item/ThirdPartyCompanyTab.vue": 1782893853.7928631,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/lab-test-item/ThirdPartyCompanyTab.vue": 1783326448.9753742,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/my-qc-material-usage/index.vue": 1782893853.6503608,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material/index.vue": 1782894736.4960976,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material/QcMaterialStockCheckTab.vue": 1782893853.4241662,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material/QcMaterialUsageTab.vue": 1782894736.7785268,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material/index.vue": 1783326448.9782045,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material/QcMaterialStockCheckTab.vue": 1783326448.981454,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material/QcMaterialUsageTab.vue": 1783326448.9838498,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material/QcMaterialBatchAttachmentDialog.vue": 1782893853.076457,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/index.vue": 1782893853.0101395,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/index.vue": 1783326448.9852715,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue": 1782894112.8165123,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue": 1782894743.3751435,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue": 1783326448.9908016,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/SampleReceptionCardList.vue": 1782894078.8557267,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/my-qc-task/index.vue": 1782893853.507648,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/my-qc-task/index.vue": 1783325990.456282,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/env-detect-record/index.vue": 1782893853.44988,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/env-detect-item/index.vue": 1782893853.1796434,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/env-detect-item/index.vue": 1783326448.9953067,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue": 1782893853.146115,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/index.vue": 1782894202.6907072,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/index.vue": 1783326448.9972053,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseReviewDialog.vue": 1782893853.0158439,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue": 1782894755.2440438,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material-usage/index.vue": 1782893852.8511324,
@@ -520,9 +523,9 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/exception/403/index.vue": 1782893852.6942284,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/exception/404/index.vue": 1782893852.624851,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/index.vue": 1782893853.037768,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/CellProductPriceTab.vue": 1782893852.9823923,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/ProjectPriceSystemTab.vue": 1782893852.8638844,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/CellProductSpecTab.vue": 1782893852.8212717,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/CellProductPriceTab.vue": 1783326449.006454,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/ProjectPriceSystemTab.vue": 1783326449.0071213,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/CellProductSpecTab.vue": 1783326449.0088341,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/checkup-institution/index.vue": 1782893852.743487,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/checkup-institution/CheckupPackagePanel.vue": 1782893852.611682,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/infusion-schedule-management/index.vue": 1782893852.4317713,
@@ -533,25 +536,25 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue": 1782893852.1531374,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/ServiceOrderTxnTable.vue": 1782893852.1199427,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/ServiceOrderTxnDialog.vue": 1782893852.0296383,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel/index.vue": 1782893851.968867,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel/index.vue": 1783326449.0182624,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel/ChannelViewDialog.vue": 1782894738.0196648,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel/ChannelServiceOrderTab.vue": 1782894736.1205277,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel/ChannelServiceOrderTab.vue": 1783326449.0239458,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-refund-confirm/index.vue": 1782893851.613325,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-payment-confirm/index.vue": 1782893853.444681,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-payment-confirm/RefundConfirmTab.vue": 1782893853.2308147,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/outbound-release-review/index.vue": 1782893853.1534364,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-payment-confirm/index.vue": 1783326449.0261748,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-payment-confirm/RefundConfirmTab.vue": 1783326449.02722,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/outbound-release-review/index.vue": 1783326449.028225,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/outbound-release-review/OutboundReleaseViewDialog.vue": 1782893853.1006944,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/outbound-release-review/OutboundReleaseReviewDialog.vue": 1782893853.242398,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/outbound-release-review/OutboundReleaseMaterialDialog.vue": 1782893853.1737905,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/outbound-release-review/OutboundReleaseReviewCardList.vue": 1782893853.0584636,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue": 1782893852.991473,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetailDialog.vue": 1782893852.9339294,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue": 1782893852.8262732,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue": 1783326449.0335362,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationViewDialog.vue": 1782894737.3121367,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/InfusionScheduleTab.vue": 1782893852.6786568,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/InfusionScheduleTab.vue": 1783326449.0346425,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationFormDialog.vue": 1782894735.609239,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue": 1782893852.365706,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ClinicalPaymentTab.vue": 1782893852.3358445,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue": 1783326449.036253,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ClinicalPaymentTab.vue": 1783326449.0376368,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-price/index.vue": 1782893852.3049684,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/checkup-management/index.vue": 1782893852.2775676,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/checkup-management/CheckupReserveItemsTable.vue": 1782893852.2584097,
@@ -562,17 +565,17 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/checkup-management/CheckupFillDialog.vue": 1782893851.993419,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/checkup-management/CheckupMarkCheckedDialog.vue": 1782893851.9295256,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-payment-info/index.vue": 1782893851.7028527,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order-finance/index.vue": 1782894735.6840522,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order-finance/index.vue": 1783326449.0417247,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/project-price-system/index.vue": 1782893851.639349,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-spec/index.vue": 1782893851.5999632,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/sample-code/index.vue": 1782893851.5876079,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/cell-sample-type/index.vue": 1782893851.5657287,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/cell-sample-type/SampleCodeTab.vue": 1782893851.5487845,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/cell-sample-type/index.vue": 1783326449.043507,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/cell-sample-type/SampleCodeTab.vue": 1783326449.0444326,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/insurance-company/index.vue": 1782893851.6212523,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/collection-protocol-no/index.vue": 1782893851.573797,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue": 1782893851.5518563,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/collection-region/index.vue": 1782893851.539197,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/collection-region/CollectionProtocolNoTab.vue": 1782893851.5241253,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue": 1783326449.0455372,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/collection-region/index.vue": 1783326449.0480328,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/collection-region/CollectionProtocolNoTab.vue": 1783326449.0493598,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/assets/svg/loading.ts": 1781272558.486104,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/index.ts": 1781272559.227605,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/qc-menu-badge.ts": 1782394567.2213001,
@@ -580,7 +583,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/table.ts": 1781272559.2465377,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/menu.ts": 1781272559.2476027,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/setting.ts": 1781661173.9923356,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/production-menu-badge.ts": 1782404664.0879827,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/production-menu-badge.ts": 1783307231.3874598,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/user.ts": 1782404740.3322744,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/routesAlias.ts": 1781272559.2590332,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/index.ts": 1781272559.4304278,
+4 -2
View File
@@ -74,6 +74,9 @@ export function fetchMyProductionTasks(params: {
bizType?: string
scope: 'current' | 'history'
includeStepSummary?: boolean
excludeVoidProtocol?: boolean
plannedStartTimeStart?: string
plannedStartTimeEnd?: string
}) {
return request.get<{
list: any[]
@@ -152,8 +155,7 @@ export function fetchProductionTaskEditorInit(
id: string,
options?: { includeReference?: boolean }
) {
const params =
options?.includeReference === false ? { includeReference: false } : undefined
const params = options?.includeReference === false ? { includeReference: false } : undefined
return request.get<ProductionTaskEditorInitPayload>({
url: `/web/admin/production-tasks/${id}/editor-init`,
params
+22 -9
View File
@@ -26,6 +26,8 @@ export interface ProductionWorkOrderItem {
receptionTime?: string
workOrderStatus: string
createTime?: string
/** 卡片展示:工单下全部工艺步骤计划开始时间区间(前端聚合) */
plannedStartTimeRange?: string
remark?: string
labStorageCode?: string
protocolStatus?: string
@@ -62,7 +64,9 @@ export interface ProductionWorkOrderItem {
export type ProductionWorkOrderDetail = ProductionWorkOrderItem & {
reception?: QcWorkOrderReceptionDetail
productionReception?: import('@/utils/sample-production-reception-fields').ProductionReceptionRecord | null
productionReception?:
| import('@/utils/sample-production-reception-fields').ProductionReceptionRecord
| null
bizType?: string
bizTypeLabel?: string
/** 临床应用出库:简要申请单 */
@@ -100,6 +104,9 @@ export function fetchProductionWorkOrderList(params?: {
createTimeEnd?: string
infusionTimeStart?: string
infusionTimeEnd?: string
plannedStartTimeStart?: string
plannedStartTimeEnd?: string
excludeVoidProtocol?: boolean
}) {
return request.get<{
list: ProductionWorkOrderItem[]
@@ -201,7 +208,9 @@ export type ProductionWorkOrderQcInfoDetail = {
showGateSection?: boolean
gateQcInfo?: import('@/components/business/sample-qc-info-cards/index.vue').SampleQcInfo | null
processQcInfoList?: import('@/components/business/sample-qc-info-cards/index.vue').SampleQcInfo[]
sampleReception?: import('@/components/business/sample-qc-info-cards/index.vue').SampleReceptionBrief | null
sampleReception?:
| import('@/components/business/sample-qc-info-cards/index.vue').SampleReceptionBrief
| null
}
export function fetchProductionWorkOrderQcInfo(workOrderId: string) {
@@ -212,7 +221,7 @@ export function fetchProductionWorkOrderQcInfo(workOrderId: string) {
export type ProductionWorkOrderTabStepCount = {
overdueIncomplete: number
unassigned: number
futureIncomplete: number
}
export type ProductionWorkOrderTabStepCounts = Record<
@@ -220,13 +229,17 @@ export type ProductionWorkOrderTabStepCounts = Record<
ProductionWorkOrderTabStepCount
>
export function formatProductionWorkOrderTabStepBadge(count: ProductionWorkOrderTabStepCount): string {
export function formatProductionWorkOrderTabStepBadge(
count: ProductionWorkOrderTabStepCount
): string {
const fmt = (n: number) => (n > 99 ? '99+' : String(n))
return `${fmt(count.overdueIncomplete)}+${fmt(count.unassigned)}`
return `${fmt(count.overdueIncomplete)}+${fmt(count.futureIncomplete)}`
}
export function isProductionWorkOrderTabStepBadgeZero(count: ProductionWorkOrderTabStepCount): boolean {
return (count.overdueIncomplete || 0) === 0 && (count.unassigned || 0) === 0
export function isProductionWorkOrderTabStepBadgeZero(
count: ProductionWorkOrderTabStepCount
): boolean {
return (count.overdueIncomplete || 0) === 0 && (count.futureIncomplete || 0) === 0
}
/** 汇总可见 Tab 的步骤角标(左侧菜单展示各 Tab 数值之和) */
@@ -238,10 +251,10 @@ export function sumProductionWorkOrderTabStepCounts(
(acc, key) => {
const c = counts?.[key]
acc.overdueIncomplete += c?.overdueIncomplete || 0
acc.unassigned += c?.unassigned || 0
acc.futureIncomplete += c?.futureIncomplete || 0
return acc
},
{ overdueIncomplete: 0, unassigned: 0 }
{ overdueIncomplete: 0, futureIncomplete: 0 }
)
}
+3
View File
@@ -2,6 +2,7 @@ import request from '@/utils/http'
import type {
QcBasicExperimentFeeSummary,
QcProtocolPaymentSummary,
QcProtocolSiblingSample,
OutboundQcDetailProduct
} from '@/api/qc-work-order'
@@ -128,6 +129,8 @@ export type QcTask = {
feeSummary?: QcBasicExperimentFeeSummary | null
/** 列表级工单摘要:未完成标题栏角标数字 */
unfinishedBadgeCount?: number
/** 列表 enrich:同协议下全部样本 */
protocolSiblingSamples?: QcProtocolSiblingSample[]
}
export type QcTaskOperateScope = 'mine' | 'manage'
+9
View File
@@ -27,6 +27,12 @@ export type QcProtocolPaymentDetailSummary = {
payStatusLabel?: string
}
export type QcProtocolSiblingSample = {
sampleCode: string
labStorageCode?: string
sampleTypeName?: string
}
export type QcProtocolPaymentSummary = {
payMode?: string
payModeLabel?: string
@@ -153,6 +159,8 @@ export type QcWorkOrder = {
feeSummary?: QcBasicExperimentFeeSummary | null
/** 列表 enrich:未完成工单卡片角标数字(待配置=1,已配置=未完成任务数) */
unfinishedBadgeCount?: number
/** 列表 enrich:同协议下全部样本(标题栏「同协议样本」展示) */
protocolSiblingSamples?: QcProtocolSiblingSample[]
}
export type QcWorkOrderDetail = QcWorkOrder & {
@@ -220,6 +228,7 @@ export function fetchQcWorkOrderList(params?: {
infusionTimeStart?: string
infusionTimeEnd?: string
triggerSource?: string
sampleTypeId?: string
}) {
return request.get<PageList<QcWorkOrder>>({
url: '/web/admin/qc-work-orders',
@@ -1306,13 +1306,6 @@ body {
border-bottom: 1px solid var(--mint-border);
}
.filter-hint {
margin: 0 0 8px;
font-size: 11px;
color: var(--mint-text-muted);
line-height: 1.35;
}
.filter-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "label": "production-work-order-tabs.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L1"}, {"id": "utils_production_work_order_tabs_getproductionworkordertab", "label": "getProductionWorkOrderTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L89"}, {"id": "utils_production_work_order_tabs_parseproductionworkordertabkey", "label": "parseProductionWorkOrderTabKey()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L93"}, {"id": "utils_production_work_order_tabs_toworkorderlistquery", "label": "toWorkOrderListQuery()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L103"}, {"id": "utils_production_work_order_tabs_resolvetabkeyfromworkorder", "label": "resolveTabKeyFromWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L118"}, {"id": "utils_production_work_order_tabs_tabusesinfusiontimefilter", "label": "tabUsesInfusionTimeFilter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L136"}, {"id": "utils_production_work_order_tabs_keywordplaceholderfortab", "label": "keywordPlaceholderForTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L140"}, {"id": "utils_production_work_order_tabs_filtertimelabelfortab", "label": "filterTimeLabelForTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L150"}, {"id": "utils_production_work_order_tabs_filtertimehintfortab", "label": "filterTimeHintForTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L157"}, {"id": "utils_production_work_order_tabs_workordermatchestab", "label": "workOrderMatchesTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L169"}, {"id": "utils_production_work_order_tabs_isallproductionworkordertab", "label": "isAllProductionWorkOrderTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L177"}, {"id": "utils_production_work_order_tabs_resolveeffectiverowtabkey", "label": "resolveEffectiveRowTabKey()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L182"}, {"id": "utils_production_work_order_tabs_tabsupportsinactiveprotocolfilter", "label": "tabSupportsInactiveProtocolFilter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L189"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "target": "utils_production_work_order_tabs_getproductionworkordertab", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L89", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "target": "utils_production_work_order_tabs_parseproductionworkordertabkey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L93", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "target": "utils_production_work_order_tabs_toworkorderlistquery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L103", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "target": "utils_production_work_orderLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_protocol_audit_fullmoontodotab_vue", "label": "FullmoonTodoTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1"}, {"id": "protocol_audit_fullmoontodotab_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L959"}, {"id": "protocol_audit_fullmoontodotab_handlesearch", "label": "handleSearch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L977"}, {"id": "protocol_audit_fullmoontodotab_handlereset", "label": "handleReset()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L982"}, {"id": "protocol_audit_fullmoontodotab_formatymdfromany", "label": "formatYmdFromAny()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L990"}, {"id": "protocol_audit_fullmoontodotab_normalizenewbornsex", "label": "normalizeNewbornSex()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L998"}, {"id": "protocol_audit_fullmoontodotab_handleexportinsurancesheet", "label": "handleExportInsuranceSheet()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1006"}, {"id": "protocol_audit_fullmoontodotab_resolveprotocolid", "label": "resolveProtocolId()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1155"}, {"id": "protocol_audit_fullmoontodotab_resetformfields", "label": "resetFormFields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1179"}, {"id": "protocol_audit_fullmoontodotab_resetdialogcontext", "label": "resetDialogContext()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1195"}, {"id": "protocol_audit_fullmoontodotab_handleinsurancedialogclosed", "label": "handleInsuranceDialogClosed()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1202"}, {"id": "protocol_audit_fullmoontodotab_parseinsuranceattachmentsfromurls", "label": "parseInsuranceAttachmentsFromUrls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1206"}, {"id": "protocol_audit_fullmoontodotab_buildinsuranceattachmentsvalue", "label": "buildInsuranceAttachmentsValue()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1218"}, {"id": "protocol_audit_fullmoontodotab_buildinsurancepayload", "label": "buildInsurancePayload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1225"}, {"id": "protocol_audit_fullmoontodotab_handlebatchedit", "label": "handleBatchEdit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1242"}, {"id": "protocol_audit_fullmoontodotab_handleedit", "label": "handleEdit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1255"}, {"id": "protocol_audit_fullmoontodotab_handleinsurancecompanychange", "label": "handleInsuranceCompanyChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1278"}, {"id": "protocol_audit_fullmoontodotab_handleinsurancetypechange", "label": "handleInsuranceTypeChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/FullmoonTodoTab.vue", "source_location": "L1286"}, {"id": "protocol_audit_fullmoontodotab_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storaLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_cell_product_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_cleanroom_garment_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cleanroom-garment/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_collection_region_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/collection-region/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "label": "qc-work-order.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L1"}, {"id": "api_qc_work_order_formatqcworkordertabbadgecount", "label": "formatQcWorkOrderTabBadgeCount()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L202"}, {"id": "api_qc_work_order_fetchqcworkordertabunfinishedcounts", "label": "fetchQcWorkOrderTabUnfinishedCounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L206"}, {"id": "api_qc_work_order_fetchmineqcworkordertabunfinishedcounts", "label": "fetchMineQcWorkOrderTabUnfinishedCounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L212"}, {"id": "api_qc_work_order_fetchqcworkorderlist", "label": "fetchQcWorkOrderList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L218"}, {"id": "api_qc_work_order_fetchqcworkorderdetail", "label": "fetchQcWorkOrderDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L239"}, {"id": "api_qc_work_order_fetchconfigureqcworkorder", "label": "fetchConfigureQcWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L245"}, {"id": "api_qc_work_order_fetchcreateqcworkorder", "label": "fetchCreateQcWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L271"}, {"id": "api_qc_work_order_fetchupdateqcworkorder", "label": "fetchUpdateQcWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L286"}, {"id": "api_qc_work_order_fetchdeleteqcworkorder", "label": "fetchDeleteQcWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L296"}, {"id": "api_qc_work_order_fetchoutboundqcdetail", "label": "fetchOutboundQcDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L370"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_inspection_batch", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_work_order_tabs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_order_formatqcworkordertabbadgecount", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L202", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_order_fetchqcworkordertabunfinishedcounts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L206", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_order_fetchmineqcworkordertabunfinishedcounts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L212", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_order_fetchqcworkorderlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L218", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_ordeLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_operations_clean_room_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/clean-room/index.vue", "source_location": "L1"}, {"id": "clean_room_index_walk", "label": "walk()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/clean-room/index.vue", "source_location": "L1239"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_operations_clean_room_index_vue", "target": "clean_room_index_walk", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/clean-room/index.vue", "source_location": "L1239", "weight": 1.0}], "raw_calls": [{"caller_nid": "clean_room_index_walk", "callee": "push", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/clean-room/index.vue", "source_location": "L1241"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_processroutetab_vue", "label": "ProcessRouteTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1"}, {"id": "process_processroutetab_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1495"}, {"id": "process_processroutetab_get", "label": "get()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1703"}, {"id": "process_processroutetab_set", "label": "set()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1713"}, {"id": "process_processroutetab_for", "label": "for()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1755"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_processroutetab_vue", "target": "process_processroutetab_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1495", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_processroutetab_vue", "target": "process_processroutetab_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1615", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_processroutetab_vue", "target": "process_processroutetab_get", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1703", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_processroutetab_vue", "target": "process_processroutetab_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1713", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_processroutetab_vue", "target": "process_processroutetab_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1755", "weight": 1.0}], "raw_calls": [{"caller_nid": "process_processroutetab_if", "callee": "mapReagentOptionLabel", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1497"}, {"caller_nid": "process_processroutetab_if", "callee": "mapConsumableOptionLabel", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1617"}, {"caller_nid": "process_processroutetab_get", "callee": "isArray", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1707"}, {"caller_nid": "process_processroutetab_get", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1707"}, {"caller_nid": "process_processroutetab_get", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1708"}, {"caller_nid": "process_processroutetab_get", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1708"}, {"caller_nid": "process_processroutetab_get", "callee": "split", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1708"}, {"caller_nid": "process_processroutetab_get", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1708"}, {"caller_nid": "process_processroutetab_set", "callee": "join", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1715"}, {"caller_nid": "process_processroutetab_for", "callee": "push", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_locaLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_composables_useproductionworkordertabpage_ts", "label": "useProductionWorkOrderTabPage.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts", "source_location": "L1"}, {"id": "composables_useproductionworkordertabpage_useproductionworkordertabpage", "label": "useProductionWorkOrderTabPage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts", "source_location": "L33"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_composables_useproductionworkordertabpage_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_composables_useproductionworkordertabpage_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_composables_useproductionworkordertabpage_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_task", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_composables_useproductionworkordertabpage_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_mine_task_groups", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_composables_useproductionworkordertabpage_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts", "source_location": "L15", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_composables_useproductionworkordertabpage_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_category", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts", "source_location": "L27", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_composables_useproductionworkordertabpage_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_card_meta", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts", "source_location": "L28", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_composables_useproductionworkordertabpage_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_composables_useproductionworkordertabpage_ts", "target": "composables_useproductionworkordertabpage_useproductionworkordertabpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/composables/useProductionWorkOrderTabPage.ts", "source_location": "L33", "weight": 1.0}], "raw_calls": [{"caller_nid": "composablesLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_user_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L1"}, {"id": "user_index_loadroleoptions", "label": "loadRoleOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L385"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_user_index_vue", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L354", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_user_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L355", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_user_index_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L356", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_user_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_system_view_dialog_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L369", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_user_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L370", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_user_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_tree_path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L380", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_user_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_user_avatar", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L381", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_user_index_vue", "target": "user_index_loadroleoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L385", "weight": 1.0}], "raw_calls": [{"caller_nid": "user_index_loadroleoptions", "callee": "fetchRoleOptions", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L387"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_protocol_audit_samplecollectioninfotab_vue", "label": "SampleCollectionInfoTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/SampleCollectionInfoTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "label": "production-work-order.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L1"}, {"id": "api_production_work_order_fetchproductionworkorderlist", "label": "fetchProductionWorkOrderList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L95"}, {"id": "api_production_work_order_fetchproductionworkorderdetail", "label": "fetchProductionWorkOrderDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L120"}, {"id": "api_production_work_order_fetchcompleteproductionworkorder", "label": "fetchCompleteProductionWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L124"}, {"id": "api_production_work_order_fetchcreateproductionworkorder", "label": "fetchCreateProductionWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L128"}, {"id": "api_production_work_order_fetchconfigureproductionworkorder", "label": "fetchConfigureProductionWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L141"}, {"id": "api_production_work_order_fetchupdateproductionworkorder", "label": "fetchUpdateProductionWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L157"}, {"id": "api_production_work_order_fetchdeleteproductionworkorder", "label": "fetchDeleteProductionWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L164"}, {"id": "api_production_work_order_fetchproductionworkorderqcdispatchoptions", "label": "fetchProductionWorkOrderQcDispatchOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L186"}, {"id": "api_production_work_order_fetchproductionworkordercellproductoptions", "label": "fetchProductionWorkOrderCellProductOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L193"}, {"id": "api_production_work_order_fetchcreateqcfromproduction", "label": "fetchCreateQcFromProduction()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L197"}, {"id": "api_production_work_order_fetchproductionworkorderqcinfo", "label": "fetchProductionWorkOrderQcInfo()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L216"}, {"id": "api_production_work_order_formatproductionworkordertabstepbadge", "label": "formatProductionWorkOrderTabStepBadge()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L232"}, {"id": "api_production_work_order_isproductionworkordertabstepbadgezero", "label": "isProductionWorkOrderTabStepBadgeZero()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L239"}, {"id": "api_production_work_order_sumproductionworkordertabstepcounts", "label": "sumProductionWorkOrderTabStepCounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L246"}, {"id": "api_production_work_order_fetchproductionworkordertabstepcounts", "label": "fetchProductionWorkOrderTabStepCounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L261"}, {"id": "api_production_work_order_fetchproductionworkordertabstepcountsdeduped", "label": "fetchProductionWorkOrderTabStepCountsDeduped()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L270"}, {"id": "api_production_work_order_fetchmineproductionworkordertabstepcounts", "label": "fetchMineProductionWorkOrderTabStepCounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L279"}, {"id": "api_production_work_order_fetchmineproductionworkordertabstepcountsdeduped", "label": "fetchMineProductionWorkOrderTabStepCountsDeduped()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/productLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_material_materialusagetab_vue", "label": "MaterialUsageTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/material/MaterialUsageTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_labels_ts", "label": "production-labels.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L1"}, {"id": "utils_production_labels_productionconclusionlabel", "label": "productionConclusionLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L4"}, {"id": "utils_production_labels_productionconclusiontagtype", "label": "productionConclusionTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L11"}, {"id": "utils_production_labels_productionordersourcetag", "label": "productionOrderSourceTag()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L19"}, {"id": "utils_production_labels_productiontasktypetag", "label": "productionTaskTypeTag()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L30"}, {"id": "utils_production_labels_productiontasktypeforworkorder", "label": "productionTaskTypeForWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L46"}, {"id": "utils_production_labels_productionstepstatustag", "label": "productionStepStatusTag()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L52"}, {"id": "utils_production_labels_extractproductiontasksteps", "label": "extractProductionTaskSteps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L62"}, {"id": "utils_production_labels_formatplannedstartdate", "label": "formatPlannedStartDate()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L69"}, {"id": "utils_production_labels_normalizeplannedstartdate", "label": "normalizePlannedStartDate()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L79"}, {"id": "utils_production_labels_productionstepassigneedisplayname", "label": "productionStepAssigneeDisplayName()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L84"}, {"id": "utils_production_labels_productionstepassigneelabels", "label": "productionStepAssigneeLabels()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L92"}, {"id": "utils_production_labels_productionstepassigneetext", "label": "productionStepAssigneeText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L142"}, {"id": "utils_production_labels_productionstepplannedstarttext", "label": "productionStepPlannedStartText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L146"}, {"id": "utils_production_labels_formatchinesedateymd", "label": "formatChineseDateYmd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L151"}, {"id": "utils_production_labels_computeworkorderplannedstarttimerange", "label": "computeWorkOrderPlannedStartTimeRange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L158"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_labels_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_labels_ts", "target": "utils_production_labels_productionconclusionlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_labels_ts", "target": "utils_production_labels_productionconclusiontagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-labels.ts", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_pilot_application_checkupmanagementtab_vue", "label": "CheckupManagementTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L1"}, {"id": "pilot_application_checkupmanagementtab_isrowselectable", "label": "isRowSelectable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L320"}, {"id": "pilot_application_checkupmanagementtab_handleselectionchange", "label": "handleSelectionChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L322"}, {"id": "pilot_application_checkupmanagementtab_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L339"}, {"id": "pilot_application_checkupmanagementtab_remotesearchinstitutions", "label": "remoteSearchInstitutions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L363"}, {"id": "pilot_application_checkupmanagementtab_oninstitutionselectvisible", "label": "onInstitutionSelectVisible()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L380"}, {"id": "pilot_application_checkupmanagementtab_handlesearch", "label": "handleSearch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L385"}, {"id": "pilot_application_checkupmanagementtab_handlereset", "label": "handleReset()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L390"}, {"id": "pilot_application_checkupmanagementtab_canfillcheckupinfo", "label": "canFillCheckupInfo()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L401"}, {"id": "pilot_application_checkupmanagementtab_canmarkchecked", "label": "canMarkChecked()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L405"}, {"id": "pilot_application_checkupmanagementtab_caneditreserve", "label": "canEditReserve()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L408"}, {"id": "pilot_application_checkupmanagementtab_caneditactualcheckupinfo", "label": "canEditActualCheckupInfo()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L411"}, {"id": "pilot_application_checkupmanagementtab_hasprimarycheckupactions", "label": "hasPrimaryCheckupActions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L414"}, {"id": "pilot_application_checkupmanagementtab_handlefill", "label": "handleFill()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L417"}, {"id": "pilot_application_checkupmanagementtab_handleeditreserve", "label": "handleEditReserve()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L424"}, {"id": "pilot_application_checkupmanagementtab_handleeditactual", "label": "handleEditActual()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L431"}, {"id": "pilot_application_checkupmanagementtab_onfillsuccess", "label": "onFillSuccess()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location": "L438"}, {"id": "pilot_application_checkupmanagementtab_handleview", "label": "handleView()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue", "source_location"Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_protocol_audit_sampleqcinfotab_vue", "label": "SampleQcInfoTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/SampleQcInfoTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_material_materialstockchecktab_vue", "label": "MaterialStockCheckTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/material/MaterialStockCheckTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_lab_test_item_thirdpartycompanytab_vue", "label": "ThirdPartyCompanyTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/lab-test-item/ThirdPartyCompanyTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_work_order_inbound_sample_cards_ts", "label": "qc-work-order-inbound-sample-cards.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L1"}, {"id": "utils_qc_work_order_inbound_sample_cards_buildinboundsamplecardanchorid", "label": "buildInboundSampleCardAnchorId()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L23"}, {"id": "utils_qc_work_order_inbound_sample_cards_sampletypenameforgroup", "label": "sampleTypeNameForGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L30"}, {"id": "utils_qc_work_order_inbound_sample_cards_protocolsorttime", "label": "protocolSortTime()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L35"}, {"id": "utils_qc_work_order_inbound_sample_cards_resolveprotocolsiblingsamplesforgroup", "label": "resolveProtocolSiblingSamplesForGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L44"}, {"id": "utils_qc_work_order_inbound_sample_cards_buildprotocolsiblinglinksfromsamples", "label": "buildProtocolSiblingLinksFromSamples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L55"}, {"id": "utils_qc_work_order_inbound_sample_cards_buildlinksfromvisiblegroups", "label": "buildLinksFromVisibleGroups()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L73"}, {"id": "utils_qc_work_order_inbound_sample_cards_resolveprotocolsiblinglinksforgroup", "label": "resolveProtocolSiblingLinksForGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L87"}, {"id": "utils_qc_work_order_inbound_sample_cards_buildinboundsamplelistitems", "label": "buildInboundSampleListItems()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L98"}, {"id": "utils_qc_work_order_inbound_sample_cards_scrolltoinboundsamplecard", "label": "scrollToInboundSampleCard()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L162"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_work_order_inbound_sample_cards_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_work_order_inbound_sample_cards_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_work_order_groups", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_work_order_inbound_sample_cards_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_work_order_card_meta", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_work_order_inbound_sample_cards_ts", "target": "utils_qc_work_order_inbound_sample_cards_buildinboundsamplecardanchorid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L23", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_work_order_inbound_sample_cards_ts", "target": "utils_qc_work_order_inbound_sample_cards_sampletypenameforgroup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-inbound-sample-cards.ts", "source_location": "L30", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_work_order_inbound_sample_cards_ts", "target": "utils_qc_work_order_inbound_sample_cards_protocolsorttime", "relation": "conLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_order_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/order/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_cell_product_type_cellproductspectab_vue", "label": "CellProductSpecTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/CellProductSpecTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L1"}, {"id": "customer_index_handleview", "label": "handleView()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L313"}, {"id": "customer_index_handleselectionchange", "label": "handleSelectionChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L333"}, {"id": "customer_index_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L337"}, {"id": "customer_index_handlesearch", "label": "handleSearch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L354"}, {"id": "customer_index_handlereset", "label": "handleReset()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L359"}, {"id": "customer_index_resetform", "label": "resetForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L366"}, {"id": "customer_index_handleadd", "label": "handleAdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L378"}, {"id": "customer_index_handleedit", "label": "handleEdit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L386"}, {"id": "customer_index_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L402"}, {"id": "customer_index_handledropdowncommand", "label": "handleDropdownCommand()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L431"}, {"id": "customer_index_handledelete", "label": "handleDelete()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L438"}, {"id": "customer_index_handlebatchdelete", "label": "handleBatchDelete()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L445"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L263", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L264", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L265", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_fullscreen_loading", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L267", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_system_view_dialog_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L273", "weight": 1.0}, {"source": "users_wuziLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_consumable_consumablepacktab_vue", "label": "ConsumablePackTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/consumable/ConsumablePackTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_tabs_productionworkordertabpanel_vue", "label": "ProductionWorkOrderTabPanel.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/tabs/ProductionWorkOrderTabPanel.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L1"}, {"id": "post_index_handleview", "label": "handleView()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L415"}, {"id": "post_index_findpostbinddeptnodebyid", "label": "findPostBindDeptNodeById()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L446"}, {"id": "post_index_collectpostbinddeptsubtreeids", "label": "collectPostBindDeptSubtreeIds()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L460"}, {"id": "post_index_collectallpostbinddeptids", "label": "collectAllPostBindDeptIds()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L466"}, {"id": "post_index_expandpostbinddepttree", "label": "expandPostBindDeptTree()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L478"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L324", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L325", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L326", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_dialog_form_body_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L339", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_system_view_dialog_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L340", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_fetch_paged_list", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L341", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_fullscreen_loading", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L342", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L343", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "target": "post_index_handleview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L415", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "target": "post_index_findpostbinddeptnodebyid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue", "source_location": "L446", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_post_index_vue", "target": "post_index_collectpostbinddeptsubtreeids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00codLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_material_productionmaterialstockchecktab_vue", "label": "ProductionMaterialStockCheckTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/ProductionMaterialStockCheckTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_qcworkordersinglecard_vue", "label": "QcWorkOrderSingleCard.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSingleCard.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_category_outputtypetab_vue", "label": "OutputTypeTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/OutputTypeTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_product_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1"}, {"id": "product_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1320"}, {"id": "product_index_scrolltofirsterror", "label": "scrollToFirstError()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1782"}, {"id": "product_index_revokelocalpreview", "label": "revokeLocalPreview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L2452"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_product_index_vue", "target": "product_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1320", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_product_index_vue", "target": "product_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1331", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_product_index_vue", "target": "product_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1375", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_product_index_vue", "target": "product_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1725", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_product_index_vue", "target": "product_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1760", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_product_index_vue", "target": "product_index_scrolltofirsterror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1782", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_system_product_index_vue", "target": "product_index_revokelocalpreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L2452", "weight": 1.0}], "raw_calls": [{"caller_nid": "product_index_if", "callee": "revokeObjectURL", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1322"}, {"caller_nid": "product_index_if", "callee": "revokeObjectURL", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1333"}, {"caller_nid": "product_index_if", "callee": "applyCategoryPriceCoefficientIfNeeded", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1376"}, {"caller_nid": "product_index_if", "callee": "loadCategoryParameters", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1377"}, {"caller_nid": "product_index_if", "callee": "error", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1726"}, {"caller_nid": "product_index_if", "callee": "error", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1727"}, {"caller_nid": "product_index_if", "callee": "error", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1761"}, {"caller_nid": "product_index_scrolltofirsterror", "callee": "nextTick", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1783"}, {"caller_nid": "product_index_scrolltofirsterror", "callee": "querySelector", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/product/index.vue", "source_location": "L1786"}, {"caller_nid": "product_index_scrolltofirsterror", "callee": "scrollIntoView", "source_file": "/Users/wuzilong/work/00code/zkxw/web-adminLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_pilot_application_pilotapplicationtab_vue", "label": "PilotApplicationTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L1"}, {"id": "pilot_application_pilotapplicationtab_onchannelselectfocus", "label": "onChannelSelectFocus()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L331"}, {"id": "pilot_application_pilotapplicationtab_loadchanneloptions", "label": "loadChannelOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L337"}, {"id": "pilot_application_pilotapplicationtab_handleselectionchange", "label": "handleSelectionChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L359"}, {"id": "pilot_application_pilotapplicationtab_cleartableselection", "label": "clearTableSelection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L363"}, {"id": "pilot_application_pilotapplicationtab_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L382"}, {"id": "pilot_application_pilotapplicationtab_handlesearch", "label": "handleSearch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L404"}, {"id": "pilot_application_pilotapplicationtab_handlereset", "label": "handleReset()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L409"}, {"id": "pilot_application_pilotapplicationtab_handleview", "label": "handleView()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L421"}, {"id": "pilot_application_pilotapplicationtab_handlecreate", "label": "handleCreate()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L430"}, {"id": "pilot_application_pilotapplicationtab_caneditapplication", "label": "canEditApplication()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L436"}, {"id": "pilot_application_pilotapplicationtab_canvoidapplication", "label": "canVoidApplication()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L439"}, {"id": "pilot_application_pilotapplicationtab_hasprimarystatusactions", "label": "hasPrimaryStatusActions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L442"}, {"id": "pilot_application_pilotapplicationtab_hasmoreactions", "label": "hasMoreActions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L446"}, {"id": "pilot_application_pilotapplicationtab_handledropdowncommand", "label": "handleDropdownCommand()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L448"}, {"id": "pilot_application_pilotapplicationtab_handleedit", "label": "handleEdit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L462"}, {"id": "pilot_application_pilotapplicationtab_onformsaved", "label": "onFormSaved()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L467"}, {"id": "pilot_application_pilotapplicationtab_handledelete", "label": "handleDelete()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue", "source_location": "L472"}, {"id": "pilot_application_pilotapplicationtab_runbatchstatusactiLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "label": "production-work-order-tabs.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L1"}, {"id": "utils_production_work_order_tabs_getproductionworkordertab", "label": "getProductionWorkOrderTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L91"}, {"id": "utils_production_work_order_tabs_parseproductionworkordertabkey", "label": "parseProductionWorkOrderTabKey()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L95"}, {"id": "utils_production_work_order_tabs_toworkorderlistquery", "label": "toWorkOrderListQuery()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L105"}, {"id": "utils_production_work_order_tabs_resolvetabkeyfromworkorder", "label": "resolveTabKeyFromWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L120"}, {"id": "utils_production_work_order_tabs_tabusesinfusiontimefilter", "label": "tabUsesInfusionTimeFilter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L138"}, {"id": "utils_production_work_order_tabs_keywordplaceholderfortab", "label": "keywordPlaceholderForTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L142"}, {"id": "utils_production_work_order_tabs_filtertimelabelfortab", "label": "filterTimeLabelForTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L152"}, {"id": "utils_production_work_order_tabs_workordermatchestab", "label": "workOrderMatchesTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L159"}, {"id": "utils_production_work_order_tabs_isallproductionworkordertab", "label": "isAllProductionWorkOrderTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L167"}, {"id": "utils_production_work_order_tabs_resolveeffectiverowtabkey", "label": "resolveEffectiveRowTabKey()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L172"}, {"id": "utils_production_work_order_tabs_tabsupportsinactiveprotocolfilter", "label": "tabSupportsInactiveProtocolFilter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L179"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "target": "utils_production_work_order_tabs_getproductionworkordertab", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L91", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "target": "utils_production_work_order_tabs_parseproductionworkordertabkey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L95", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "target": "utils_production_work_order_tabs_toworkorderlistquery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L105", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs_ts", "target": "utils_production_work_order_tabs_resolvetabkeyfromworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-tabs.ts", "source_location": "L120", "weight": 1.0}, {"source": "users_wLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_cell_product_type_projectpricesystemtab_vue", "label": "ProjectPriceSystemTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/ProjectPriceSystemTab.vue", "source_location": "L1"}, {"id": "cell_product_type_projectpricesystemtab_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/ProjectPriceSystemTab.vue", "source_location": "L609"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_cell_product_type_projectpricesystemtab_vue", "target": "cell_product_type_projectpricesystemtab_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/ProjectPriceSystemTab.vue", "source_location": "L609", "weight": 1.0}], "raw_calls": [{"caller_nid": "cell_product_type_projectpricesystemtab_if", "callee": "fetchDeleteProjectSystemItem", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/ProjectPriceSystemTab.vue", "source_location": "L610"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_qcworkorderprotocolgroup_vue", "label": "QcWorkOrderProtocolGroup.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L1"}, {"id": "qc_work_order_qcworkorderprotocolgroup_sampletypelabel", "label": "sampleTypeLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L264"}, {"id": "qc_work_order_qcworkorderprotocolgroup_gateworkorder", "label": "gateWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L269"}, {"id": "qc_work_order_qcworkorderprotocolgroup_sampletabstatuslabel", "label": "sampleTabStatusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L273"}, {"id": "qc_work_order_qcworkorderprotocolgroup_sampletabstatustagtype", "label": "sampleTabStatusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L278"}, {"id": "qc_work_order_qcworkorderprotocolgroup_workorderstatustagtype", "label": "workOrderStatusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L283"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_qcworkorderprotocolgroup_vue", "target": "qc_work_order_qcworkorderprotocolgroup_sampletypelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L264", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_qcworkorderprotocolgroup_vue", "target": "qc_work_order_qcworkorderprotocolgroup_gateworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L269", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_qcworkorderprotocolgroup_vue", "target": "qc_work_order_qcworkorderprotocolgroup_sampletabstatuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L273", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_qcworkorderprotocolgroup_vue", "target": "qc_work_order_qcworkorderprotocolgroup_sampletabstatustagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L278", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_qcworkorderprotocolgroup_vue", "target": "qc_work_order_qcworkorderprotocolgroup_workorderstatustagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L283", "weight": 1.0}, {"source": "qc_work_order_qcworkorderprotocolgroup_sampletabstatuslabel", "target": "qc_work_order_qcworkorderprotocolgroup_gateworkorder", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L274", "weight": 1.0}, {"source": "qc_work_order_qcworkorderprotocolgroup_sampletabstatustagtype", "target": "qc_work_order_qcworkorderprotocolgroup_gateworkorder", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": "L279", "weight": 1.0}, {"source": "qc_work_order_qcworkorderprotocolgroup_sampletabstatustagtype", "target": "qc_work_order_qcworkorderprotocolgroup_workorderstatustagtype", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolGroup.vue", "source_location": Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_payment_confirm_invoicerequesttab_vue", "label": "InvoiceRequestTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/InvoiceRequestTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
Loaded 100 of 327 files, more files were not shown because too many files have changed in this diff. Show more