This commit is contained in:
zlwu committed 2026-06-24 10:39:55 +08:00
1 parent 93c28759d0
commit b23a2eb350
129 files changed
+28511 -17769

No files matched your search

+1 -1
View File
@@ -20,7 +20,7 @@ DATABASE_URL=mysql+pymysql://root:password@localhost:3306/zkxw
# BACKEND_CORS_ORIGINS=["http://localhost:5173","http://localhost:3006","http://127.0.0.1:3006"]
# DEBUG=true 时后端还会允许任意本机端口的 Origin(localhost / 127.0.0.1),便于本地换端口开发。
# 登录 RSA(Web/小程序加密登录;多实例须配置同一私钥 PEM)
# 登录 RSA(Web/小程序加密登录;留空则各 Worker 共用内置默认密钥,生产建议配置独立 PEM)
# LOGIN_RSA_PRIVATE_KEY_PEM="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
# 仅本地用 Swagger/Apifox 明文测登录时可临时打开(生产务必 false)
# LOGIN_ALLOW_PLAINTEXT_LOGIN=false
-1
View File
@@ -1 +0,0 @@
29565
+2
View File
@@ -31,6 +31,7 @@ from app.api.clinical_payment import router as clinical_payment_router
from app.api.env_detect import router as env_detect_router
from app.api.cleanroom_garment import router as cleanroom_garment_router
from app.api.market import router as market_router
from app.api.pre_transit_sample import router as pre_transit_sample_router
__all__ = [
"public_router",
@@ -65,4 +66,5 @@ __all__ = [
"env_detect_router",
"cleanroom_garment_router",
"market_router",
"pre_transit_sample_router",
]
+24 -5
View File
@@ -9,7 +9,7 @@ from sqlalchemy import or_
from sqlalchemy.orm import Session
from app.core.config import settings
from app.core.data_scope import apply_data_scope
from app.core.data_scope import apply_data_scope, _get_child_dept_ids
from app.core.database import get_db
from app.core.menu_guard import require_admin_or_super_admin, require_menu_code
from app.core.response import success_response, error_response
@@ -26,7 +26,7 @@ from app.crud import menu as menu_svc
from app.crud import role as role_svc
from app.crud import user as user_svc
from app.crud.collection_protocol import _lookup_attachment_by_url
from app.models.models import BizAttachment, SysDept, SysRole, SysUser
from app.models.models import BizAttachment, SysDept, SysRole, SysUser, SysUserRole
from app.services.web_auth_roles import _map_role_name_to_web
router = APIRouter(prefix="/web/admin", tags=["运营端管理"])
@@ -71,15 +71,33 @@ async def list_roles_for_select(
@router.get("/users/options")
async def list_users_for_select(
roleName: Optional[str] = Query(None, alias="roleName"),
_user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
"""返回用户下拉选项(label=昵称,value=用户ID),供流程设计器审批人选择使用。"""
"""返回用户下拉选项(label=昵称,value=用户ID),供流程设计器审批人选择使用。
可选 roleName:按 sys_role.role_name 精确过滤拥有该角色的用户。
"""
tenant_no = _user.get("tenant_no", "")
q = db.query(SysUser).filter(SysUser.del_flag == 0, SysUser.status == "1")
if tenant_no:
q = q.filter(SysUser.tenant_no == tenant_no)
rows = q.order_by(SysUser.create_time.desc()).all()
rn = (roleName or "").strip()
if rn:
q = (
q.join(SysUserRole, SysUserRole.user_id == SysUser.id)
.join(SysRole, SysRole.id == SysUserRole.role_id)
.filter(
SysUserRole.del_flag == 0,
SysRole.del_flag == 0,
SysRole.status == "1",
SysRole.role_name == rn,
)
)
if tenant_no:
q = q.filter(SysUserRole.tenant_no == tenant_no, SysRole.tenant_no == tenant_no)
rows = q.order_by(SysUser.create_time.desc()).distinct().all()
out = [{"label": (r.nick_name or r.user_no or ""), "value": r.id} for r in rows]
return success_response(out)
@@ -284,7 +302,8 @@ async def list_users(
)
)
if deptId:
query = query.filter(SysUser.dept_id == deptId)
dept_ids = _get_child_dept_ids(db, deptId, tenant_no)
query = query.filter(SysUser.dept_id.in_(dept_ids))
if status:
query = query.filter(SysUser.status == status)
query = apply_data_scope(query, SysUser, user, db, tenant_no)
+12
View File
@@ -447,6 +447,18 @@ class HospitalUpdateBody(BaseModel):
remark: Optional[str] = None
@router.get("/collection-hospitals/search")
async def search_collection_hospitals(
keyword: str = Query(..., min_length=1),
limit: int = Query(20, ge=1, le=50),
user: dict = Depends(require_menu_code("biz:collectionRegion:list")),
db: Session = Depends(get_db),
):
tenant_no = _get_tenant_no(db, user)
items = region_svc.search_hospitals_by_keyword(db, keyword=keyword, tenant_no=tenant_no, limit=limit)
return success_response({"list": items})
@router.get("/collection-regions/{region_id}/hospitals")
async def list_hospitals(
region_id: str,
-2
View File
@@ -126,7 +126,6 @@ async def list_collection_protocols(
db: Session = Depends(get_db),
):
tenant_no = _get_tenant_no(db, user)
current_user_id = _get_current_user_id(user)
items, total = cp_svc.list_collection_protocols(
db,
page=page,
@@ -138,7 +137,6 @@ async def list_collection_protocols(
sample_collect_time_start=sampleCollectTimeStart,
sample_collect_time_end=sampleCollectTimeEnd,
tenant_no=tenant_no,
scope_collector_user_id=current_user_id,
user_info=user,
)
tp = cp_svc.total_pages(total, pageSize)
+103
View File
@@ -0,0 +1,103 @@
"""质量检测 — 预产及在途样本 API"""
from typing import Optional
from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from app.core.database import get_db
from app.core.menu_guard import require_menu_code
from app.core.response import error_response, success_response
from app.crud import pre_transit_sample as pts_svc
from app.models.models import SysUser
router = APIRouter(prefix="/web/admin", tags=["质量检测"])
def _get_tenant_no(db: Session, user: dict) -> str:
user_id = user.get("user_id")
if not user_id:
raise PermissionError("用户身份信息缺失,无法确定租户")
sys_user = db.query(SysUser).filter(SysUser.id == user_id).first()
if not sys_user or not sys_user.tenant_no:
raise PermissionError("用户租户信息缺失")
return sys_user.tenant_no
def _page_payload(items: list, total: int, page: int, page_size: int) -> dict:
return {
"list": items,
"total": total,
"page": page,
"pageSize": page_size,
"totalPages": pts_svc.total_pages(total, page_size),
}
@router.get("/pre-transit-samples/in-transit")
async def list_in_transit_samples(
page: int = Query(1, ge=1),
pageSize: int = Query(10, ge=1, le=100),
keyword: Optional[str] = None,
sourceType: Optional[str] = None,
createTimeStart: Optional[str] = Query(None, alias="createTimeStart"),
createTimeEnd: Optional[str] = Query(None, alias="createTimeEnd"),
sampleCollectTimeStart: Optional[str] = Query(None, alias="sampleCollectTimeStart"),
sampleCollectTimeEnd: Optional[str] = Query(None, alias="sampleCollectTimeEnd"),
db: Session = Depends(get_db),
user: dict = Depends(require_menu_code("biz:preTransitSample:list")),
):
try:
tenant_no = _get_tenant_no(db, user)
items, total = pts_svc.list_in_transit_protocols(
db,
page=page,
page_size=pageSize,
tenant_no=tenant_no,
keyword=keyword,
source_type=sourceType,
create_time_start=createTimeStart,
create_time_end=createTimeEnd,
sample_collect_time_start=sampleCollectTimeStart,
sample_collect_time_end=sampleCollectTimeEnd,
user_info=user,
)
return success_response(_page_payload(items, total, page, pageSize))
except PermissionError as e:
return error_response(403, str(e))
except Exception as e:
return error_response(400, str(e))
@router.get("/pre-transit-samples/pre-delivery")
async def list_pre_delivery_samples(
page: int = Query(1, ge=1),
pageSize: int = Query(10, ge=1, le=100),
keyword: Optional[str] = None,
sourceType: Optional[str] = None,
createTimeStart: Optional[str] = Query(None, alias="createTimeStart"),
createTimeEnd: Optional[str] = Query(None, alias="createTimeEnd"),
sampleCollectTimeStart: Optional[str] = Query(None, alias="sampleCollectTimeStart"),
sampleCollectTimeEnd: Optional[str] = Query(None, alias="sampleCollectTimeEnd"),
db: Session = Depends(get_db),
user: dict = Depends(require_menu_code("biz:preTransitSample:list")),
):
try:
tenant_no = _get_tenant_no(db, user)
items, total = pts_svc.list_pre_delivery_protocols(
db,
page=page,
page_size=pageSize,
tenant_no=tenant_no,
keyword=keyword,
source_type=sourceType,
create_time_start=createTimeStart,
create_time_end=createTimeEnd,
sample_collect_time_start=sampleCollectTimeStart,
sample_collect_time_end=sampleCollectTimeEnd,
user_info=user,
)
return success_response(_page_payload(items, total, page, pageSize))
except PermissionError as e:
return error_response(403, str(e))
except Exception as e:
return error_response(400, str(e))
+21 -4
View File
@@ -125,7 +125,6 @@ async def list_research_donations(
db: Session = Depends(get_db),
):
tenant_no = _get_tenant_no(db, user)
collector_user_id = _get_current_user_id(user)
result = rd_svc.list_donations(
db,
tenant_no=tenant_no,
@@ -137,7 +136,6 @@ async def list_research_donations(
create_time_end=createTimeEnd,
sample_collect_time_start=sampleCollectTimeStart,
sample_collect_time_end=sampleCollectTimeEnd,
collector_user_id=collector_user_id,
user_info=user,
)
return success_response(result)
@@ -173,7 +171,24 @@ async def list_research_donation_audits(
# ---------------------------------------------------------------------------
# 3. 详情
# 3. 下一捐赠样本编码(须在 {donation_id} 详情路由之前注册)
# ---------------------------------------------------------------------------
@router.get("/research-donations/next-sample-code")
async def next_research_donation_sample_code(
pendingCodes: Optional[str] = Query(None, alias="pendingCodes"),
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
tenant_no = _get_tenant_no(db, user)
extra = [c.strip() for c in (pendingCodes or "").split(",") if c.strip()]
code = rd_svc.next_donation_sample_code(db, tenant_no=tenant_no, extra_codes=extra)
return success_response({"sampleCode": code})
# ---------------------------------------------------------------------------
# 4. 详情
# ---------------------------------------------------------------------------
@@ -205,7 +220,9 @@ async def create_research_donation(
user_id = _get_current_user_id(user)
try:
data = body.model_dump(exclude_none=False, by_alias=True)
data["collector_user_id"] = user_id
collector = (data.get("collectorUserId") or data.get("collector_user_id") or "").strip()
if not collector:
data["collectorUserId"] = user_id
obj = rd_svc.create_donation(
db,
data=data,
+1 -1
View File
@@ -105,7 +105,7 @@ class Settings(BaseSettings):
# 已废弃:无角色用户固定为 guest,不可通过环境变量提升为 super_admin
WEB_AUTH_DEFAULT_ROLE: str = "guest"
# 登录 RSA:私钥 PEM(多实例/负载均衡须配置同一私钥;留空则进程启动时临时生成,仅适合单机开发)
# 登录 RSA:私钥 PEM(多实例建议配置同一私钥;留空则各 Worker 共用内置默认密钥 login_rsa_default.pem)
LOGIN_RSA_PRIVATE_KEY_PEM: str = ""
# 是否允许明文 username/password 登录(仅建议本地排障临时开启;生产务必 false)
LOGIN_ALLOW_PLAINTEXT_LOGIN: bool = False
+32 -15
View File
@@ -5,11 +5,12 @@ import base64
import json
import logging
import time
from pathlib import Path
from typing import Any, Dict, Optional, Tuple
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding, rsa
from cryptography.hazmat.primitives.asymmetric import padding
from app.core.config import settings
@@ -18,29 +19,45 @@ logger = logging.getLogger(__name__)
_private_key = None # type: ignore
_public_pem: Optional[str] = None
# 未配置 LOGIN_RSA_PRIVATE_KEY_PEM 时,各 Worker/实例共用此内置密钥(勿按进程随机生成)
_DEFAULT_PEM_PATH = Path(__file__).resolve().parent / "login_rsa_default.pem"
def _normalize_pem_text(pem: str) -> str:
text = (pem or "").strip()
if "\\n" in text and "-----BEGIN" in text:
text = text.replace("\\n", "\n")
return text
def _load_private_key_from_pem(pem: str):
return serialization.load_pem_private_key(
_normalize_pem_text(pem).encode("utf-8"),
password=None,
backend=default_backend(),
)
def ensure_initialized() -> None:
"""加载或生成 RSA 密钥对。"""
"""加载 RSA 密钥对:优先环境变量,否则使用内置固定默认密钥。"""
global _private_key, _public_pem
if _private_key is not None:
return
pem = (settings.LOGIN_RSA_PRIVATE_KEY_PEM or "").strip()
# 兼容 .env 中单行保存 PEM(以 "\n" 形式转义换行)的场景
if "\\n" in pem and "-----BEGIN" in pem:
pem = pem.replace("\\n", "\n")
pem = _normalize_pem_text(settings.LOGIN_RSA_PRIVATE_KEY_PEM or "")
if pem:
_private_key = serialization.load_pem_private_key(
pem.encode("utf-8"), password=None, backend=default_backend()
)
_private_key = _load_private_key_from_pem(pem)
logger.info("登录 RSA:已自配置加载私钥")
else:
_private_key = rsa.generate_private_key(
public_exponent=65537, key_size=2048, backend=default_backend()
)
elif _DEFAULT_PEM_PATH.is_file():
_private_key = _load_private_key_from_pem(_DEFAULT_PEM_PATH.read_text(encoding="utf-8"))
logger.warning(
"登录 RSA:未配置 LOGIN_RSA_PRIVATE_KEY_PEM,已生成进程内临时密钥;"
"多进程/负载均衡下请配置固定 PEM。"
"登录 RSA:未配置 LOGIN_RSA_PRIVATE_KEY_PEM,已使用内置默认密钥;"
"生产环境建议配置独立 PEM。"
)
else:
raise RuntimeError(
f"登录 RSA 私钥不可用:未配置 LOGIN_RSA_PRIVATE_KEY_PEM,"
f"且缺少内置文件 {_DEFAULT_PEM_PATH}"
)
_public_pem = (
+4 -1
View File
@@ -187,7 +187,10 @@ def list_garments(
page_size = min(max(1, page_size), 100)
rows = (
_filtered()
.order_by(BizCleanroomGarment.create_time.desc())
.order_by(
BizCleanroomGarment.create_time.desc(),
BizCleanroomGarment.garment_code.asc(),
)
.offset((page - 1) * page_size)
.limit(page_size)
.all()
-5
View File
@@ -866,17 +866,12 @@ def list_collection_protocols(
sample_collect_time_start: Optional[str] = None,
sample_collect_time_end: Optional[str] = None,
tenant_no: Optional[str] = None,
scope_collector_user_id: Optional[str] = None,
user_info=None,
) -> Tuple[List[Dict[str, Any]], int]:
def _filtered():
q0 = db.query(BizCollectionProtocol).filter(BizCollectionProtocol.del_flag == 0)
if tenant_no:
q0 = q0.filter(BizCollectionProtocol.tenant_no == tenant_no)
if scope_collector_user_id:
q0 = q0.filter(
BizCollectionProtocol.collector_user_id == scope_collector_user_id
)
if protocol_status:
q0 = q0.filter(BizCollectionProtocol.protocol_status == protocol_status.strip())
if create_time_start:
+36
View File
@@ -224,6 +224,42 @@ def list_hospitals(
return [_hospital_to_dict(x) for x in rows], int(total)
def search_hospitals_by_keyword(
db: Session,
*,
keyword: str,
tenant_no: Optional[str] = None,
limit: int = 20,
) -> List[Dict[str, Any]]:
"""按医院名称模糊检索,返回医院及所属采集地区信息。"""
kw = (keyword or "").strip()
if not kw:
return []
like = f"%{kw}%"
q = (
db.query(BizCollectionHospital, BizCollectionRegion)
.join(BizCollectionRegion, BizCollectionHospital.region_id == BizCollectionRegion.id)
.filter(
BizCollectionHospital.del_flag == 0,
BizCollectionRegion.del_flag == 0,
BizCollectionHospital.hospital_name.like(like),
)
)
if tenant_no:
q = q.filter(BizCollectionHospital.tenant_no == tenant_no)
rows = (
q.order_by(BizCollectionHospital.order_num.asc(), BizCollectionHospital.create_time.desc())
.limit(min(max(1, limit), 50))
.all()
)
items: List[Dict[str, Any]] = []
for hospital, region in rows:
item = _hospital_to_dict(hospital)
item["regionName"] = region.region_name or ""
items.append(item)
return items
def get_hospital(db: Session, hospital_id: str, tenant_no: Optional[str] = None) -> Optional[BizCollectionHospital]:
q = db.query(BizCollectionHospital).filter(and_(BizCollectionHospital.id == hospital_id, BizCollectionHospital.del_flag == 0))
if tenant_no:
File diff suppressed because it is too large. Load diff
+97 -4
View File
@@ -18,6 +18,7 @@ from app.crud.collection_protocol import (
validate_sample_codes_not_used,
_format_sample_collect_summary,
_load_sample_type_name_map,
_load_site_name_map,
)
from app.crud.protocol_donation_convert import (
assert_biz_no_available,
@@ -60,6 +61,83 @@ def total_pages(total: int, page_size: int) -> int:
return int(math.ceil(total / float(page_size)))
_DONATION_SAMPLE_CODE_PREFIX = "KYJZ"
_DONATION_SAMPLE_CODE_SEQ_LEN = 4
def _donation_sample_code_seq(code: str, *, date_str: str) -> Optional[int]:
"""解析 KYJZ+YYYYMMDD+序号 中的序号;不匹配则返回 None。"""
prefix = f"{_DONATION_SAMPLE_CODE_PREFIX}{date_str}"
c = (code or "").strip()
if not c.startswith(prefix):
return None
suffix = c[len(prefix) :]
if len(suffix) != _DONATION_SAMPLE_CODE_SEQ_LEN or not suffix.isdigit():
return None
return int(suffix)
def next_donation_sample_code(
db: Session,
*,
tenant_no: str,
extra_codes: Optional[List[str]] = None,
) -> str:
"""生成捐赠样本编码:KYJZ + YYYYMMDD + 4 位递增序号(0001 起)。"""
date_str = datetime.now().strftime("%Y%m%d")
prefix = f"{_DONATION_SAMPLE_CODE_PREFIX}{date_str}"
max_seq = 0
def bump(code: Optional[str]) -> None:
nonlocal max_seq
seq = _donation_sample_code_seq(code or "", date_str=date_str)
if seq is not None:
max_seq = max(max_seq, seq)
donation_rows = (
db.query(BizResearchDonationSample.sample_code)
.filter(
BizResearchDonationSample.tenant_no == tenant_no,
BizResearchDonationSample.del_flag == 0,
BizResearchDonationSample.sample_code.like(f"{prefix}%"),
)
.all()
)
for row in donation_rows:
bump(row[0])
protocol_rows = (
db.query(BizProtocolSample.sample_code)
.filter(
BizProtocolSample.tenant_no == tenant_no,
BizProtocolSample.del_flag == 0,
BizProtocolSample.sample_code.like(f"{prefix}%"),
)
.all()
)
for row in protocol_rows:
bump(row[0])
from app.models.models import BizSampleCode
pool_rows = (
db.query(BizSampleCode.sample_code)
.filter(
BizSampleCode.tenant_no == tenant_no,
BizSampleCode.del_flag == 0,
BizSampleCode.sample_code.like(f"{prefix}%"),
)
.all()
)
for row in pool_rows:
bump(row[0])
for code in extra_codes or []:
bump(code)
return f"{prefix}{str(max_seq + 1).zfill(_DONATION_SAMPLE_CODE_SEQ_LEN)}"
def _fmt_dt(t: Optional[datetime]) -> str:
return t.strftime("%Y-%m-%d %H:%M:%S") if t else ""
@@ -408,7 +486,6 @@ def list_donations(
create_time_end: Optional[str] = None,
sample_collect_time_start: Optional[str] = None,
sample_collect_time_end: Optional[str] = None,
collector_user_id: Optional[str] = None,
user_info=None,
) -> Dict[str, Any]:
def _base():
@@ -418,8 +495,6 @@ def list_donations(
)
if tenant_no:
q = q.filter(BizResearchDonation.tenant_no == tenant_no)
if collector_user_id:
q = q.filter(BizResearchDonation.collector_user_id == collector_user_id)
if donation_status:
q = q.filter(BizResearchDonation.donation_status == donation_status.strip())
if create_time_start:
@@ -706,7 +781,14 @@ def get_donation_detail(
# samples + transport
s_rows = list_samples(db, donation_id, tenant_no)
transport_rows = list_sample_transports(db, donation_id, tenant_no)
transport_by_sample = {t.sample_id: _transport_to_dict(t) for t in transport_rows}
site_name_map = _load_site_name_map(
db, [t.dest_site_id for t in transport_rows if t.dest_site_id]
)
transport_by_sample: Dict[str, Dict[str, Any]] = {}
for t in transport_rows:
td = _transport_to_dict(t)
td["destSiteName"] = site_name_map.get(t.dest_site_id or "", "")
transport_by_sample[t.sample_id] = td
from app.crud import sample_reception as sample_reception_svc
from app.crud import qc_work_order as qc_work_order_svc
from app.crud import production_work_order as production_work_order_svc
@@ -1891,8 +1973,19 @@ def _create_samples(
exclude_donation_id=donation_id,
)
result = []
assigned_codes: List[str] = []
for idx, raw_item in enumerate(samples or []):
raw = _normalize_fields(raw_item)
code = (raw.get("sample_code") or "").strip()
if not code and (raw.get("sample_type_id") or "").strip():
code = next_donation_sample_code(
db,
tenant_no=tenant_no,
extra_codes=assigned_codes,
)
raw["sample_code"] = code
if code:
assigned_codes.append(code)
obj = BizResearchDonationSample(
id=generate_uuid(),
research_donation_id=donation_id,
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_collection_protocol_py", "label": "collection_protocol.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L1"}, {"id": "api_collection_protocol_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L29"}, {"id": "api_collection_protocol_get_current_user_id", "label": "_get_current_user_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L39"}, {"id": "api_collection_protocol_parse_datetime_fields", "label": "_parse_datetime_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L53"}, {"id": "api_collection_protocol_ensure_customer_for_mother", "label": "_ensure_customer_for_mother()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L67"}, {"id": "api_collection_protocol_list_collection_protocols", "label": "list_collection_protocols()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L116"}, {"id": "api_collection_protocol_get_collection_protocol_detail", "label": "get_collection_protocol_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L147"}, {"id": "api_collection_protocol_protocolcreatebody", "label": "ProtocolCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L162"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_collection_protocol_protocolupdatebody", "label": "ProtocolUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L181"}, {"id": "api_collection_protocol_resolve_protocol_attachments", "label": "_resolve_protocol_attachments()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L207"}, {"id": "api_collection_protocol_persist_protocol_sub_resources", "label": "_persist_protocol_sub_resources()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L217"}, {"id": "api_collection_protocol_create_collection_protocol", "label": "create_collection_protocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L253"}, {"id": "api_collection_protocol_update_collection_protocol", "label": "update_collection_protocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L296"}, {"id": "api_collection_protocol_delete_collection_protocol", "label": "delete_collection_protocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L345"}, {"id": "api_collection_protocol_list_collection_protocol_audits", "label": "list_collection_protocol_audits()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L371"}, {"id": "api_collection_protocol_auditcreatebody", "label": "AuditCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L395"}, {"id": "api_collection_protocol_submit_collection_protocol_audit", "label": "submit_collection_protocol_audit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L403"}, {"id": "api_collection_protocol_list_payment_details", "label": "list_payment_details()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L432"}, {"id": "api_collection_protocol_batchdetailidsbody", "label": "BatchDetailIdsBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L460"}, {"id": "api_collection_protocol_paymentdetaildraftbody", "label": "PaymentDetailDraftBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py", "source_location": "L466"}, {"id": "api_collection_protocol_draft_fields_from_body", "label": "_draft_fields_from_body()", "file_type": "code", "source_file": "/Users/wuzilong/work/00codLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_admin_py", "label": "admin.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L1"}, {"id": "api_admin_list_roles_for_select", "label": "list_roles_for_select()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L41"}, {"id": "api_admin_list_users_for_select", "label": "list_users_for_select()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L73"}, {"id": "api_admin_list_roles_for_designer", "label": "list_roles_for_designer()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L106"}, {"id": "api_admin_tenantcreatebody", "label": "TenantCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L126"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_admin_tenantupdatebody", "label": "TenantUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L137"}, {"id": "api_admin_list_tenants", "label": "list_tenants()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L149"}, {"id": "api_admin_create_tenant", "label": "create_tenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L170"}, {"id": "api_admin_update_tenant", "label": "update_tenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L192"}, {"id": "api_admin_delete_tenant", "label": "delete_tenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L217"}, {"id": "api_admin_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L234"}, {"id": "api_admin_usercreatebody", "label": "UserCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L247"}, {"id": "api_admin_userupdatebody", "label": "UserUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L264"}, {"id": "api_admin_list_users", "label": "list_users()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L280"}, {"id": "api_admin_get_user_by_id", "label": "get_user_by_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L325"}, {"id": "api_admin_create_user", "label": "create_user()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L341"}, {"id": "api_admin_update_user", "label": "update_user()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L374"}, {"id": "api_admin_delete_user", "label": "delete_user()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L404"}, {"id": "api_admin_reset_user_password", "label": "reset_user_password()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L417"}, {"id": "api_admin_dicttypecreatebody", "label": "DictTypeCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L434"}, {"id": "api_admin_dicttypeupdatebody", "label": "DictTypeUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L443"}, {"id": "api_admin_list_dict_types", "label": "list_dict_types()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L453"}, {"id": "api_admin_create_dict_type", "label": "create_dict_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L469"}, {"id": "api_admin_update_dict_type", "label": "update_dict_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L491"}, {"id": "api_admin_delete_dict_type", "label": "delete_dict_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L516"}, {"id": "api_admin_dictdatacreatebody", "label": "DictDataCreateBody", "file_type": "code", "Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "label": "pre_transit_sample.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L1"}, {"id": "api_pre_transit_sample_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L16"}, {"id": "api_pre_transit_sample_page_payload", "label": "_page_payload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L26"}, {"id": "api_pre_transit_sample_list_in_transit_samples", "label": "list_in_transit_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L37"}, {"id": "api_pre_transit_sample_list_pre_delivery_samples", "label": "list_pre_delivery_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L68"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "app_core_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "app_core_menu_guard", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "app_core_response", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "app_models_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "api_pre_transit_sample_get_tenant_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L16", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "api_pre_transit_sample_page_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L26", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "api_pre_transit_sample_list_in_transit_samples", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L37", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "api_pre_transit_sample_list_pre_delivery_samples", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L68", "weight": 1.0}, {"source": "api_pre_transit_sample_list_in_transit_samples", "target": "api_pre_transit_sample_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/UseLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "label": "web_auth_roles.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L1"}, {"id": "services_web_auth_roles_map_role_name_to_web", "label": "_map_role_name_to_web()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L19"}, {"id": "services_web_auth_roles_active_role_name_rows", "label": "_active_role_name_rows()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L31"}, {"id": "services_web_auth_roles_user_has_active_roles", "label": "user_has_active_roles()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L53"}, {"id": "services_web_auth_roles_get_user_role_names", "label": "get_user_role_names()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L58"}, {"id": "services_web_auth_roles_resolve_web_role_for_user", "label": "resolve_web_role_for_user()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L64"}, {"id": "services_web_auth_roles_iter_user_menu_perm_codes", "label": "iter_user_menu_perm_codes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L75"}, {"id": "services_web_auth_roles_rationale_1", "label": "Web \u7ba1\u7406\u7aef\u767b\u5f55\uff1a\u57fa\u4e8e V0.3 sys_user / sys_user_role / sys_role \u7684\u89d2\u8272\u4e0e\u83dc\u5355\u6743\u9650\u89e3\u6790", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L1"}, {"id": "services_web_auth_roles_rationale_20", "label": "\u5c06 sys_role.role_name \u6620\u5c04\u4e3a web-admin \u4f7f\u7528\u7684 role \u5b57\u7b26\u4e32\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L20"}, {"id": "services_web_auth_roles_rationale_32", "label": "\u67e5\u8be2\u7528\u6237\u5f53\u524d\u6709\u6548\u7684 sys_role.role_name \u5217\u8868\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L32"}, {"id": "services_web_auth_roles_rationale_54", "label": "\u7528\u6237\u662f\u5426\u81f3\u5c11\u7ed1\u5b9a\u4e00\u4e2a\u6709\u6548\u89d2\u8272\uff08sys_user_role \u2192 sys_role\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L54"}, {"id": "services_web_auth_roles_rationale_59", "label": "\u7528\u6237\u5f53\u524d\u7ed1\u5b9a\u7684 sys_role.role_name \u5217\u8868\uff08\u53bb\u91cd\u3001\u4fdd\u5e8f\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L59"}, {"id": "services_web_auth_roles_rationale_65", "label": "\u6839\u636e\u7528\u6237\u5173\u8054\u89d2\u8272\u89e3\u6790 Web \u7aef role\uff08admin / super_admin / guest\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L65"}, {"id": "services_web_auth_roles_rationale_76", "label": "\u7528\u6237\u901a\u8fc7\u89d2\u8272\u5173\u8054\u5f97\u5230\u7684\u83dc\u5355\u6743\u9650\u6807\u8bc6\uff08sys_menu.perms\uff0c\u7a7a\u5219\u9000\u56de\u83dc\u5355 id\uff09\u3002 \u6ce8\uff1a\u4e0d\u8fc7\u6ee4 visible\u2014\u2014F \u7c7b\u578b\u6309\u94ae\u7b49 visible", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L76"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_services_web_auth_roles_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00cLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_core_config_py", "label": "config.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py", "source_location": "L1"}, {"id": "core_config_settings", "label": "Settings", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py", "source_location": "L7"}, {"id": "basesettings", "label": "BaseSettings", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "core_config_config", "label": "Config", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py", "source_location": "L145"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_core_config_py", "target": "pydantic_settings", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_config_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_config_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_config_py", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_config_py", "target": "core_config_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py", "source_location": "L7", "weight": 1.0}, {"source": "core_config_settings", "target": "basesettings", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_config_py", "target": "core_config_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py", "source_location": "L145", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_research_donation_py", "label": "research_donation.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L1"}, {"id": "crud_research_donation_total_pages", "label": "total_pages()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L58"}, {"id": "crud_research_donation_donation_sample_code_seq", "label": "_donation_sample_code_seq()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L68"}, {"id": "crud_research_donation_next_donation_sample_code", "label": "next_donation_sample_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L80"}, {"id": "crud_research_donation_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L141"}, {"id": "crud_research_donation_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L145"}, {"id": "crud_research_donation_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L152"}, {"id": "crud_research_donation_optional_decimal", "label": "_optional_decimal()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L160"}, {"id": "crud_research_donation_normalize_fields", "label": "_normalize_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L172"}, {"id": "crud_research_donation_merge_comma_separated_urls", "label": "_merge_comma_separated_urls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L183"}, {"id": "crud_research_donation_resolve_donation_payload", "label": "_resolve_donation_payload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L199"}, {"id": "crud_research_donation_user_nick_name_map", "label": "_user_nick_name_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L217"}, {"id": "crud_research_donation_load_unit_name_map", "label": "_load_unit_name_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L225"}, {"id": "crud_research_donation_donation_to_dict", "label": "_donation_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L244"}, {"id": "crud_research_donation_audit_to_dict", "label": "_audit_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L278"}, {"id": "crud_research_donation_party_to_dict", "label": "_party_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L300"}, {"id": "crud_research_donation_collection_to_dict", "label": "_collection_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L334"}, {"id": "crud_research_donation_sample_to_dict", "label": "_sample_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L352"}, {"id": "crud_research_donation_transport_to_dict", "label": "_transport_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L375"}, {"id": "crud_research_donation_get_party", "label": "get_party()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L400"}, {"id": "crud_research_donation_get_collection", "label": "get_collection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L416"}, {"id": "crud_research_donation_list_samples", "label": "list_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L432"}, {"id": "crud_research_donation_list_sample_transports", "label": "list_sample_transports()", "file_type": "code", "source_file": "/UsLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_research_donation_py", "label": "research_donation.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L1"}, {"id": "crud_research_donation_total_pages", "label": "total_pages()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L57"}, {"id": "crud_research_donation_donation_sample_code_seq", "label": "_donation_sample_code_seq()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L67"}, {"id": "crud_research_donation_next_donation_sample_code", "label": "next_donation_sample_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L79"}, {"id": "crud_research_donation_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L140"}, {"id": "crud_research_donation_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L144"}, {"id": "crud_research_donation_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L151"}, {"id": "crud_research_donation_optional_decimal", "label": "_optional_decimal()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L159"}, {"id": "crud_research_donation_normalize_fields", "label": "_normalize_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L171"}, {"id": "crud_research_donation_merge_comma_separated_urls", "label": "_merge_comma_separated_urls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L182"}, {"id": "crud_research_donation_resolve_donation_payload", "label": "_resolve_donation_payload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L198"}, {"id": "crud_research_donation_user_nick_name_map", "label": "_user_nick_name_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L216"}, {"id": "crud_research_donation_load_unit_name_map", "label": "_load_unit_name_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L224"}, {"id": "crud_research_donation_donation_to_dict", "label": "_donation_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L243"}, {"id": "crud_research_donation_audit_to_dict", "label": "_audit_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L277"}, {"id": "crud_research_donation_party_to_dict", "label": "_party_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L299"}, {"id": "crud_research_donation_collection_to_dict", "label": "_collection_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L333"}, {"id": "crud_research_donation_sample_to_dict", "label": "_sample_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L351"}, {"id": "crud_research_donation_transport_to_dict", "label": "_transport_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L374"}, {"id": "crud_research_donation_get_party", "label": "get_party()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L399"}, {"id": "crud_research_donation_get_collection", "label": "get_collection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L415"}, {"id": "crud_research_donation_list_samples", "label": "list_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L431"}, {"id": "crud_research_donation_list_sample_transports", "label": "list_sample_transports()", "file_type": "code", "source_file": "/UsLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_research_donation_py", "label": "research_donation.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L1"}, {"id": "api_research_donation_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L18"}, {"id": "api_research_donation_get_current_user_id", "label": "_get_current_user_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L28"}, {"id": "api_research_donation_donationcreatebody", "label": "DonationCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L40"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_research_donation_donationupdatebody", "label": "DonationUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L61"}, {"id": "api_research_donation_batchdeletebody", "label": "BatchDeleteBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L82"}, {"id": "api_research_donation_auditsubmitbody", "label": "AuditSubmitBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L88"}, {"id": "api_research_donation_statuschangebody", "label": "StatusChangeBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L95"}, {"id": "api_research_donation_convertfromstoragebody", "label": "ConvertFromStorageBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L103"}, {"id": "api_research_donation_list_research_donations", "label": "list_research_donations()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L115"}, {"id": "api_research_donation_list_research_donation_audits", "label": "list_research_donation_audits()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L152"}, {"id": "api_research_donation_next_research_donation_sample_code", "label": "next_research_donation_sample_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L181"}, {"id": "api_research_donation_get_research_donation_detail", "label": "get_research_donation_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L198"}, {"id": "api_research_donation_create_research_donation", "label": "create_research_donation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L216"}, {"id": "api_research_donation_update_research_donation", "label": "update_research_donation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L246"}, {"id": "api_research_donation_delete_research_donation", "label": "delete_research_donation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L277"}, {"id": "api_research_donation_batch_delete_research_donations", "label": "batch_delete_research_donations()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L302"}, {"id": "api_research_donation_submit_donation_audit", "label": "submit_donation_audit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L327"}, {"id": "api_research_donation_change_donation_status", "label": "change_donation_status()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L360"}, {"id": "api_research_donation_convert_from_storage", "label": "convert_from_storage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L392"}, {"id": "api_research_donation_convert_to_storage", "label": "convert_to_storage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L420"}, {"id": "api_research_donation_rationale_1", "label": "\u79d1\u7814\u6350\u8d60\u7ba1Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_collection_protocol_py", "label": "collection_protocol.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L1"}, {"id": "crud_collection_protocol_get_protocol_nos_used_in_protocols", "label": "get_protocol_nos_used_in_protocols()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L64"}, {"id": "crud_collection_protocol_get_sample_codes_used_in_protocol_samples", "label": "get_sample_codes_used_in_protocol_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L98"}, {"id": "crud_collection_protocol_validate_sample_codes_not_used", "label": "validate_sample_codes_not_used()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L132"}, {"id": "crud_collection_protocol_total_pages", "label": "total_pages()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L165"}, {"id": "crud_collection_protocol_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L171"}, {"id": "crud_collection_protocol_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L175"}, {"id": "crud_collection_protocol_optional_decimal", "label": "_optional_decimal()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L183"}, {"id": "crud_collection_protocol_today_yyyymmdd", "label": "_today_yyyymmdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L189"}, {"id": "crud_collection_protocol_normalize_yyyymmdd_date", "label": "_normalize_yyyymmdd_date()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L193"}, {"id": "crud_collection_protocol_normalize_fields", "label": "_normalize_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L212"}, {"id": "crud_collection_protocol_pop_attachment_urls", "label": "_pop_attachment_urls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L223"}, {"id": "crud_collection_protocol_attachments_to_urls", "label": "attachments_to_urls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L234"}, {"id": "crud_collection_protocol_normalize_attachment_url_key", "label": "_normalize_attachment_url_key()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L253"}, {"id": "crud_collection_protocol_format_attachment_file_size", "label": "_format_attachment_file_size()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L262"}, {"id": "crud_collection_protocol_lookup_attachment_by_url", "label": "_lookup_attachment_by_url()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L270"}, {"id": "crud_collection_protocol_urls_to_attachment_list", "label": "urls_to_attachment_list()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L294"}, {"id": "crud_collection_protocol_user_nick_name_map", "label": "_user_nick_name_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L326"}, {"id": "crud_collection_protocol_protocol_to_dict", "label": "_protocol_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L334"}, {"id": "crud_collection_protocol_payment_to_dict", "label": "_payment_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L359"}, {"id": "crud_collection_protocol_detail_to_dict", "label": "_detail_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py", "source_location": "L380"}, {"id": "crud_collection_protocol_audit_to_dict", "label": "_audit_to_dict()", "file_type": "code", "source_Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_research_donation_py", "label": "research_donation.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L1"}, {"id": "api_research_donation_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L18"}, {"id": "api_research_donation_get_current_user_id", "label": "_get_current_user_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L28"}, {"id": "api_research_donation_donationcreatebody", "label": "DonationCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L40"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_research_donation_donationupdatebody", "label": "DonationUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L61"}, {"id": "api_research_donation_batchdeletebody", "label": "BatchDeleteBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L82"}, {"id": "api_research_donation_auditsubmitbody", "label": "AuditSubmitBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L88"}, {"id": "api_research_donation_statuschangebody", "label": "StatusChangeBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L95"}, {"id": "api_research_donation_convertfromstoragebody", "label": "ConvertFromStorageBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L103"}, {"id": "api_research_donation_list_research_donations", "label": "list_research_donations()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L115"}, {"id": "api_research_donation_list_research_donation_audits", "label": "list_research_donation_audits()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L150"}, {"id": "api_research_donation_next_research_donation_sample_code", "label": "next_research_donation_sample_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L179"}, {"id": "api_research_donation_get_research_donation_detail", "label": "get_research_donation_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L196"}, {"id": "api_research_donation_create_research_donation", "label": "create_research_donation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L214"}, {"id": "api_research_donation_update_research_donation", "label": "update_research_donation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L246"}, {"id": "api_research_donation_delete_research_donation", "label": "delete_research_donation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L277"}, {"id": "api_research_donation_batch_delete_research_donations", "label": "batch_delete_research_donations()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L302"}, {"id": "api_research_donation_submit_donation_audit", "label": "submit_donation_audit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L327"}, {"id": "api_research_donation_change_donation_status", "label": "change_donation_status()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L360"}, {"id": "api_research_donation_convert_from_storage", "label": "convert_from_storage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L392"}, {"id": "api_research_donation_convert_to_storage", "label": "convert_to_storage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L420"}, {"id": "api_research_donation_rationale_1", "label": "\u79d1\u7814\u6350\u8d60\u7ba1Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_cleanroom_garment_py", "label": "cleanroom_garment.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L1"}, {"id": "crud_cleanroom_garment_total_pages", "label": "total_pages()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L22"}, {"id": "crud_cleanroom_garment_parse_date", "label": "_parse_date()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L28"}, {"id": "crud_cleanroom_garment_parse_datetime", "label": "_parse_datetime()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L46"}, {"id": "crud_cleanroom_garment_parse_limit", "label": "_parse_limit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L62"}, {"id": "crud_cleanroom_garment_count_map", "label": "_count_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L74"}, {"id": "crud_cleanroom_garment_garment_to_dict", "label": "_garment_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L86"}, {"id": "crud_cleanroom_garment_list_garments", "label": "list_garments()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L116"}, {"id": "crud_cleanroom_garment_get_garment", "label": "get_garment()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L210"}, {"id": "crud_cleanroom_garment_get_garment_detail", "label": "get_garment_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L221"}, {"id": "crud_cleanroom_garment_garment_code_exists", "label": "garment_code_exists()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L236"}, {"id": "crud_cleanroom_garment_create_garment", "label": "create_garment()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L251"}, {"id": "crud_cleanroom_garment_update_garment", "label": "update_garment()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L300"}, {"id": "crud_cleanroom_garment_soft_delete_garment", "label": "soft_delete_garment()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L350"}, {"id": "crud_cleanroom_garment_batch_soft_delete_garments", "label": "batch_soft_delete_garments()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L360"}, {"id": "crud_cleanroom_garment_discard_garment", "label": "discard_garment()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L373"}, {"id": "crud_cleanroom_garment_batch_discard_garments", "label": "batch_discard_garments()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L400"}, {"id": "crud_cleanroom_garment_ensure_garment_active", "label": "_ensure_garment_active()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L435"}, {"id": "crud_cleanroom_garment_wash_log_to_dict", "label": "_wash_log_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L448"}, {"id": "crud_cleanroom_garment_list_wash_logs", "label": "list_wash_logs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L463"}, {"id": "crud_cleanroom_garment_get_wash_log", "label": "get_wash_log()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L489"}, {"id": "crud_cleanroom_garment_create_wash_log", "label": "create_wash_log()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py", "source_location": "L498"}, {"id": "crud_cleanroom_garment_update_wash_log", "label": "update_wash_log()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_basic_info_py", "label": "basic_info.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L1"}, {"id": "api_basic_info_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L31"}, {"id": "api_basic_info_customercreatebody", "label": "CustomerCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L46"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_basic_info_customerupdatebody", "label": "CustomerUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L59"}, {"id": "api_basic_info_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L72"}, {"id": "api_basic_info_list_customers", "label": "list_customers()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L80"}, {"id": "api_basic_info_create_customer", "label": "create_customer()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L123"}, {"id": "api_basic_info_update_customer", "label": "update_customer()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L149"}, {"id": "api_basic_info_delete_customer", "label": "delete_customer()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L178"}, {"id": "api_basic_info_cellsampletypecreatebody", "label": "CellSampleTypeCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L196"}, {"id": "api_basic_info_cellsampletypeupdatebody", "label": "CellSampleTypeUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L209"}, {"id": "api_basic_info_list_cell_sample_types", "label": "list_cell_sample_types()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L223"}, {"id": "api_basic_info_create_cell_sample_type", "label": "create_cell_sample_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L254"}, {"id": "api_basic_info_update_cell_sample_type", "label": "update_cell_sample_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L280"}, {"id": "api_basic_info_delete_cell_sample_type", "label": "delete_cell_sample_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L309"}, {"id": "api_basic_info_collectionregioncreatebody", "label": "CollectionRegionCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L327"}, {"id": "api_basic_info_collectionregionupdatebody", "label": "CollectionRegionUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L335"}, {"id": "api_basic_info_list_collection_regions", "label": "list_collection_regions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L344"}, {"id": "api_basic_info_create_collection_region", "label": "create_collection_region()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L371"}, {"id": "api_basic_info_update_collection_region", "label": "update_collection_region()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L392"}, {"id": "api_basic_info_delete_collection_region", "label": "delete_collection_region()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L416"}, {"id": "api_basic_info_hospitalcreatebody", "label": "HospitalCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L434"}, {"id": "api_basic_info_hospitalupdatebody", "label": "HospitalUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py", "source_location": "L442"}, {"id": "api_bLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_public_py", "label": "public.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L1"}, {"id": "api_public_avatar_url_field", "label": "_avatar_url_field()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L44"}, {"id": "api_public_build_user_info_payload", "label": "_build_user_info_payload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L53"}, {"id": "api_public_build_current_user_payload", "label": "_build_current_user_payload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L72"}, {"id": "api_public_resolve_current_user_from_request", "label": "_resolve_current_user_from_request()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L95"}, {"id": "api_public_jwt_user_payload", "label": "_jwt_user_payload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L103"}, {"id": "api_public_web_login_rsa_public_key", "label": "web_login_rsa_public_key()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L114"}, {"id": "api_public_web_login", "label": "web_login()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L121"}, {"id": "api_public_refresh_token", "label": "refresh_token()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L183"}, {"id": "api_public_logout", "label": "logout()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L245"}, {"id": "api_public_get_current_user_profile", "label": "get_current_user_profile()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L264"}, {"id": "api_public_update_current_user_profile", "label": "update_current_user_profile()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L274"}, {"id": "api_public_change_current_user_password", "label": "change_current_user_password()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L311"}, {"id": "api_public_upload_current_user_avatar", "label": "upload_current_user_avatar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L343"}, {"id": "api_public_get_web_auth_menu_codes", "label": "get_web_auth_menu_codes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L380"}, {"id": "api_public_rationale_1", "label": "\u516c\u5171\u63a5\u53e3\uff08Web \u767b\u5f55\u3001\u5237\u65b0 Token\u3001\u767b\u51fa\uff1b\u7528\u6237\u6a21\u578b\u5bf9\u9f50 docs/sql/zkxw.sql \u57fa\u7ebf\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L1"}, {"id": "api_public_rationale_45", "label": "\u8fd4\u56de\u5e93\u4e2d\u539f\u59cb\u5934\u50cf\u8def\u5f84\uff0c\u7531\u524d\u7aef\u6309 VITE_MINIO_BASE_URL \u62fc\u5c55\u793a URL\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L45"}, {"id": "api_public_rationale_54", "label": "\u4e0e web-admin `userInfo` \u5b57\u6bb5\u7ea6\u5b9a\u4e00\u81f4\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L54"}, {"id": "api_public_rationale_73", "label": "\u7ec4\u88c5 current-user \u63a5\u53e3\u54cd\u5e94\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L73"}, {"id": "api_public_rationale_115", "label": "Web \u7aef\u767b\u5f55\u7528 RSA \u516c\u94a5\uff08PKCS#1 v1.5\uff0c\u4e0e JSEncrypt \u4e00\u81f4\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L115"}, {"id": "api_public_rationale_126", "label": "Web \u7aef\u767b\u5f55\uff1a\u8d26\u53f7\u4e3a sys_user.user_no\uff0c\u5bc6\u7801\u4e3a sys_user.password\uff08bcrypt\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py", "source_location": "L126"}, {"id": "api_public_rationale_246", "label": "\u767b\u51fa\uff1a\u540a\u9500 Redis \u4f1a\u8bdd\uff08\u82e5\u5df2\u914d\u7f6e REDIS_HOST\uff09\u3002", "file_type": "rationale",Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_collection_region_py", "label": "collection_region.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L1"}, {"id": "crud_collection_region_region_to_dict", "label": "_region_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L15"}, {"id": "crud_collection_region_hospital_names_by_region_ids", "label": "_hospital_names_by_region_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L28"}, {"id": "crud_collection_region_hospital_to_dict", "label": "_hospital_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L49"}, {"id": "crud_collection_region_list_collection_regions", "label": "list_collection_regions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L62"}, {"id": "crud_collection_region_get_collection_region", "label": "get_collection_region()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L96"}, {"id": "crud_collection_region_create_collection_region", "label": "create_collection_region()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L103"}, {"id": "crud_collection_region_update_collection_region", "label": "update_collection_region()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L134"}, {"id": "crud_collection_region_soft_delete_collection_region", "label": "soft_delete_collection_region()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L164"}, {"id": "crud_collection_region_list_hospitals", "label": "list_hospitals()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L189"}, {"id": "crud_collection_region_search_hospitals_by_keyword", "label": "search_hospitals_by_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L227"}, {"id": "crud_collection_region_get_hospital", "label": "get_hospital()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L263"}, {"id": "crud_collection_region_create_hospital", "label": "create_hospital()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L270"}, {"id": "crud_collection_region_update_hospital", "label": "update_hospital()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L306"}, {"id": "crud_collection_region_soft_delete_hospital", "label": "soft_delete_hospital()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L336"}, {"id": "crud_collection_region_total_pages", "label": "total_pages()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L346"}, {"id": "crud_collection_region_rationale_29", "label": "\u6279\u91cf\u67e5\u8be2\u5730\u533a\u4e0b\u5c5e\u533b\u9662\u540d\u79f0\uff0c\u6309 order_num\u3001create_time \u6392\u5e8f\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L29"}, {"id": "crud_collection_region_rationale_234", "label": "\u6309\u533b\u9662\u540d\u79f0\u6a21\u7cca\u68c0\u7d22\uff0c\u8fd4\u56de\u533b\u9662\u53ca\u6240\u5c5e\u91c7\u96c6\u5730\u533a\u4fe1\u606f\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L234"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_collection_region_py", "target": "math", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_collection_region_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_collection_region_py", "tarLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_core_login_crypto_py", "label": "login_crypto.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L1"}, {"id": "core_login_crypto_normalize_pem_text", "label": "_normalize_pem_text()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L26"}, {"id": "core_login_crypto_load_private_key_from_pem", "label": "_load_private_key_from_pem()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L33"}, {"id": "core_login_crypto_ensure_initialized", "label": "ensure_initialized()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L41"}, {"id": "core_login_crypto_get_public_pem", "label": "get_public_pem()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L73"}, {"id": "core_login_crypto_decrypt_login_payload", "label": "decrypt_login_payload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L79"}, {"id": "core_login_crypto_validate_ts", "label": "_validate_ts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L88"}, {"id": "core_login_crypto_extract_login_credentials", "label": "extract_login_credentials()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L100"}, {"id": "core_login_crypto_rationale_1", "label": "\u767b\u5f55\u51ed\u636e RSA \u89e3\u5bc6\uff08\u4e0e\u524d\u7aef JSEncrypt PKCS#1 v1.5 \u517c\u5bb9\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L1"}, {"id": "core_login_crypto_rationale_42", "label": "\u52a0\u8f7d RSA \u5bc6\u94a5\u5bf9\uff1a\u4f18\u5148\u73af\u5883\u53d8\u91cf\uff0c\u5426\u5219\u4f7f\u7528\u5185\u7f6e\u56fa\u5b9a\u9ed8\u8ba4\u5bc6\u94a5\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L42"}, {"id": "core_login_crypto_rationale_80", "label": "Base64 \u5bc6\u6587 -> JSON \u5bf9\u8c61\uff08\u987b\u542b username\u3001password\u3001ts \u6beb\u79d2\u65f6\u95f4\u6233\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L80"}, {"id": "core_login_crypto_rationale_101", "label": "\u4ece\u8bf7\u6c42\u4f53\u89e3\u6790\u7528\u6237\u540d\u3001\u5bc6\u7801\u3002 \u8fd4\u56de (username, password, error_message)\uff1berror_message \u975e\u7a7a\u65f6\u8868\u793a\u5931\u8d25\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L101"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_core_login_crypto_py", "target": "base64", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_login_crypto_py", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_login_crypto_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_login_crypto_py", "target": "time", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_login_crypto_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_login_crypto_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_login_crypto_py", "target": "cryptography_hazmat_backends", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_research_donation_py", "label": "research_donation.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L1"}, {"id": "crud_research_donation_total_pages", "label": "total_pages()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L57"}, {"id": "crud_research_donation_donation_sample_code_seq", "label": "_donation_sample_code_seq()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L67"}, {"id": "crud_research_donation_next_donation_sample_code", "label": "next_donation_sample_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L79"}, {"id": "crud_research_donation_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L140"}, {"id": "crud_research_donation_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L144"}, {"id": "crud_research_donation_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L151"}, {"id": "crud_research_donation_optional_decimal", "label": "_optional_decimal()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L159"}, {"id": "crud_research_donation_normalize_fields", "label": "_normalize_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L171"}, {"id": "crud_research_donation_merge_comma_separated_urls", "label": "_merge_comma_separated_urls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L182"}, {"id": "crud_research_donation_resolve_donation_payload", "label": "_resolve_donation_payload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L198"}, {"id": "crud_research_donation_user_nick_name_map", "label": "_user_nick_name_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L216"}, {"id": "crud_research_donation_load_unit_name_map", "label": "_load_unit_name_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L224"}, {"id": "crud_research_donation_donation_to_dict", "label": "_donation_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L243"}, {"id": "crud_research_donation_audit_to_dict", "label": "_audit_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L277"}, {"id": "crud_research_donation_party_to_dict", "label": "_party_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L299"}, {"id": "crud_research_donation_collection_to_dict", "label": "_collection_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L333"}, {"id": "crud_research_donation_sample_to_dict", "label": "_sample_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L351"}, {"id": "crud_research_donation_transport_to_dict", "label": "_transport_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L374"}, {"id": "crud_research_donation_get_party", "label": "get_party()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L399"}, {"id": "crud_research_donation_get_collection", "label": "get_collection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L415"}, {"id": "crud_research_donation_list_samples", "label": "list_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L431"}, {"id": "crud_research_donation_list_sample_transports", "label": "list_sample_transports()", "file_type": "code", "source_file": "/UsLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L1"}, {"id": "api_init_rationale_1", "label": "API \u8def\u7531\u5305\uff08\u9aa8\u67b6\uff1a\u516c\u5171\u9274\u6743 + \u9759\u6001\u83dc\u5355 + \u8fd0\u8425\u7aef\u5360\u4f4d\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_public", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_menu", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_workflow", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_basic_info", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_collection_protocol", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_leave", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_operations", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_ethnic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_sample_reception", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_qc", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_research_donation", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_production", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_pilot_service", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L15", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_insurance_company", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L16", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_init_py", "target": "app_api_material", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py", "source_location": "L17", "weight": 1.0}, {"source": "usLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_core_auth_py", "label": "auth.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L1"}, {"id": "core_auth_redis_session_enabled", "label": "_redis_session_enabled()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L29"}, {"id": "core_auth_get_redis_client", "label": "_get_redis_client()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L34"}, {"id": "core_auth_session_key", "label": "_session_key()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L51"}, {"id": "core_auth_refresh_key", "label": "_refresh_key()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L55"}, {"id": "core_auth_store_session", "label": "store_session()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L59"}, {"id": "core_auth_revoke_session", "label": "revoke_session()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L67"}, {"id": "core_auth_extend_session", "label": "extend_session()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L75"}, {"id": "core_auth_is_session_valid", "label": "is_session_valid()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L91"}, {"id": "core_auth_store_refresh_token", "label": "store_refresh_token()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L106"}, {"id": "core_auth_is_refresh_token_valid", "label": "is_refresh_token_valid()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L114"}, {"id": "core_auth_revoke_refresh_token", "label": "revoke_refresh_token()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L126"}, {"id": "core_auth_create_access_token", "label": "create_access_token()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L133"}, {"id": "core_auth_create_refresh_token", "label": "create_refresh_token()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L157"}, {"id": "core_auth_decode_token", "label": "decode_token()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L173"}, {"id": "core_auth_get_current_user_by_token", "label": "get_current_user_by_token()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L186"}, {"id": "core_auth_get_current_user", "label": "get_current_user()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L253"}, {"id": "core_auth_get_current_user_simple", "label": "get_current_user_simple()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L261"}, {"id": "core_auth_get_client_ip", "label": "get_client_ip()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L280"}, {"id": "core_auth_rationale_76", "label": "\u5237\u65b0\u4f1a\u8bdd TTL\uff08refreshToken \u7eed\u671f\uff1b\u5df2\u767b\u5f55\u7528\u6237\u6bcf\u6b21 API \u6821\u9a8c\u901a\u8fc7\u540e\u6ed1\u52a8\u7eed\u671f\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L76"}, {"id": "core_auth_rationale_107", "label": "\u5199\u5165 refreshToken\uff08\u7528\u4e8e one-time \u4f7f\u7528/\u540a\u9500\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L107"}, {"id": "core_auth_rationale_190", "label": "\u6839\u636e token \u83b7\u53d6\u5f53\u524d\u7528\u6237\uff08\u5305\u542b Redis \u4f1a\u8bdd\u6821\u9a8c\uff1b\u4f1a\u8bdd\u6ed1\u52a8\u7eed\u671f\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L190"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_core_auth_py", "target": "asyncio", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_auth_pLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_research_donation_py", "label": "research_donation.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L1"}, {"id": "crud_research_donation_total_pages", "label": "total_pages()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L57"}, {"id": "crud_research_donation_donation_sample_code_seq", "label": "_donation_sample_code_seq()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L67"}, {"id": "crud_research_donation_next_donation_sample_code", "label": "next_donation_sample_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L79"}, {"id": "crud_research_donation_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L140"}, {"id": "crud_research_donation_normalize_date_bound", "label": "_normalize_date_bound()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L144"}, {"id": "crud_research_donation_dec", "label": "_dec()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L151"}, {"id": "crud_research_donation_optional_decimal", "label": "_optional_decimal()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L159"}, {"id": "crud_research_donation_normalize_fields", "label": "_normalize_fields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L171"}, {"id": "crud_research_donation_merge_comma_separated_urls", "label": "_merge_comma_separated_urls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L182"}, {"id": "crud_research_donation_resolve_donation_payload", "label": "_resolve_donation_payload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L198"}, {"id": "crud_research_donation_user_nick_name_map", "label": "_user_nick_name_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L216"}, {"id": "crud_research_donation_load_unit_name_map", "label": "_load_unit_name_map()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L224"}, {"id": "crud_research_donation_donation_to_dict", "label": "_donation_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L243"}, {"id": "crud_research_donation_audit_to_dict", "label": "_audit_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L277"}, {"id": "crud_research_donation_party_to_dict", "label": "_party_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L299"}, {"id": "crud_research_donation_collection_to_dict", "label": "_collection_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L333"}, {"id": "crud_research_donation_sample_to_dict", "label": "_sample_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L351"}, {"id": "crud_research_donation_transport_to_dict", "label": "_transport_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L374"}, {"id": "crud_research_donation_get_party", "label": "get_party()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L399"}, {"id": "crud_research_donation_get_collection", "label": "get_collection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L415"}, {"id": "crud_research_donation_list_samples", "label": "list_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py", "source_location": "L431"}, {"id": "crud_research_donation_list_sample_transports", "label": "list_sample_transports()", "file_type": "code", "source_file": "/UsLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_pre_transit_sample_py", "label": "pre_transit_sample.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L1"}, {"id": "crud_pre_transit_sample_is_uncollected_status", "label": "_is_uncollected_status()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L50"}, {"id": "crud_pre_transit_sample_is_in_transit_sample", "label": "_is_in_transit_sample()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L54"}, {"id": "crud_pre_transit_sample_cell_received_exists", "label": "_cell_received_exists()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L58"}, {"id": "crud_pre_transit_sample_donation_received_exists", "label": "_donation_received_exists()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L75"}, {"id": "crud_pre_transit_sample_apply_collection_keyword", "label": "_apply_collection_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L92"}, {"id": "crud_pre_transit_sample_apply_donation_keyword", "label": "_apply_donation_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L128"}, {"id": "crud_pre_transit_sample_apply_create_time_filter", "label": "_apply_create_time_filter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L164"}, {"id": "crud_pre_transit_sample_earliest_eta", "label": "_earliest_eta()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L172"}, {"id": "crud_pre_transit_sample_build_sample_items", "label": "_build_sample_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L179"}, {"id": "crud_pre_transit_sample_summarize_in_transit_items", "label": "_summarize_in_transit_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L227"}, {"id": "crud_pre_transit_sample_summarize_pre_delivery", "label": "_summarize_pre_delivery()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L234"}, {"id": "crud_pre_transit_sample_list_in_transit_collection_ids", "label": "_list_in_transit_collection_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L241"}, {"id": "crud_pre_transit_sample_list_in_transit_donation_ids", "label": "_list_in_transit_donation_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L278"}, {"id": "crud_pre_transit_sample_list_pre_delivery_collection_ids", "label": "_list_pre_delivery_collection_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L315"}, {"id": "crud_pre_transit_sample_list_pre_delivery_donation_ids", "label": "_list_pre_delivery_donation_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L379"}, {"id": "crud_pre_transit_sample_sort_key_in_transit", "label": "_sort_key_in_transit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L443"}, {"id": "crud_pre_transit_sample_sort_key_pre_delivery", "label": "_sort_key_pre_delivery()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L448"}, {"id": "crud_pre_transit_sample_hydrate_collection_rows", "label": "_hydrate_collection_rows()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L453"}, {"id": "crud_pre_transit_sample_hydrate_donation_rows", "label": "_hydrate_donation_rows()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L662"}, {"id": "crud_pre_transit_sample_list_in_transit_protocols", "label": "list_in_transit_protocols()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L874"}, {"id": "crud_pre_tLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_research_donation_py", "label": "research_donation.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L1"}, {"id": "api_research_donation_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L18"}, {"id": "api_research_donation_get_current_user_id", "label": "_get_current_user_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L28"}, {"id": "api_research_donation_donationcreatebody", "label": "DonationCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L40"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_research_donation_donationupdatebody", "label": "DonationUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L61"}, {"id": "api_research_donation_batchdeletebody", "label": "BatchDeleteBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L82"}, {"id": "api_research_donation_auditsubmitbody", "label": "AuditSubmitBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L88"}, {"id": "api_research_donation_statuschangebody", "label": "StatusChangeBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L95"}, {"id": "api_research_donation_convertfromstoragebody", "label": "ConvertFromStorageBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L103"}, {"id": "api_research_donation_list_research_donations", "label": "list_research_donations()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L115"}, {"id": "api_research_donation_list_research_donation_audits", "label": "list_research_donation_audits()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L150"}, {"id": "api_research_donation_next_research_donation_sample_code", "label": "next_research_donation_sample_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L179"}, {"id": "api_research_donation_get_research_donation_detail", "label": "get_research_donation_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L196"}, {"id": "api_research_donation_create_research_donation", "label": "create_research_donation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L214"}, {"id": "api_research_donation_update_research_donation", "label": "update_research_donation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L244"}, {"id": "api_research_donation_delete_research_donation", "label": "delete_research_donation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L275"}, {"id": "api_research_donation_batch_delete_research_donations", "label": "batch_delete_research_donations()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L300"}, {"id": "api_research_donation_submit_donation_audit", "label": "submit_donation_audit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L325"}, {"id": "api_research_donation_change_donation_status", "label": "change_donation_status()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L358"}, {"id": "api_research_donation_convert_from_storage", "label": "convert_from_storage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L390"}, {"id": "api_research_donation_convert_to_storage", "label": "convert_to_storage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py", "source_location": "L418"}, {"id": "api_research_donation_rationale_1", "label": "\u79d1\u7814\u6350\u8d60\u7ba1Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_admin_py", "label": "admin.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L1"}, {"id": "api_admin_list_roles_for_select", "label": "list_roles_for_select()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L41"}, {"id": "api_admin_list_users_for_select", "label": "list_users_for_select()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L73"}, {"id": "api_admin_list_roles_for_designer", "label": "list_roles_for_designer()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L106"}, {"id": "api_admin_tenantcreatebody", "label": "TenantCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L126"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_admin_tenantupdatebody", "label": "TenantUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L137"}, {"id": "api_admin_list_tenants", "label": "list_tenants()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L149"}, {"id": "api_admin_create_tenant", "label": "create_tenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L170"}, {"id": "api_admin_update_tenant", "label": "update_tenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L192"}, {"id": "api_admin_delete_tenant", "label": "delete_tenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L217"}, {"id": "api_admin_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L234"}, {"id": "api_admin_usercreatebody", "label": "UserCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L247"}, {"id": "api_admin_userupdatebody", "label": "UserUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L264"}, {"id": "api_admin_list_users", "label": "list_users()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L280"}, {"id": "api_admin_get_user_by_id", "label": "get_user_by_id()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L324"}, {"id": "api_admin_create_user", "label": "create_user()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L340"}, {"id": "api_admin_update_user", "label": "update_user()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L373"}, {"id": "api_admin_delete_user", "label": "delete_user()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L403"}, {"id": "api_admin_reset_user_password", "label": "reset_user_password()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L416"}, {"id": "api_admin_dicttypecreatebody", "label": "DictTypeCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L433"}, {"id": "api_admin_dicttypeupdatebody", "label": "DictTypeUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L442"}, {"id": "api_admin_list_dict_types", "label": "list_dict_types()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L452"}, {"id": "api_admin_create_dict_type", "label": "create_dict_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L468"}, {"id": "api_admin_update_dict_type", "label": "update_dict_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L490"}, {"id": "api_admin_delete_dict_type", "label": "delete_dict_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py", "source_location": "L515"}, {"id": "api_admin_dictdatacreatebody", "label": "DictDataCreateBody", "file_type": "code", "Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "label": "main.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L1"}, {"id": "app_main_lifespan", "label": "lifespan()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L20"}, {"id": "app_main_error_json", "label": "_error_json()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L67"}, {"id": "app_main_sqlalchemy_exception_handler", "label": "sqlalchemy_exception_handler()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L80"}, {"id": "app_main_unhandled_exception_handler", "label": "unhandled_exception_handler()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L91"}, {"id": "app_main_mask_secret", "label": "_mask_secret()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L136"}, {"id": "app_main_root", "label": "root()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L158"}, {"id": "app_main_health_check", "label": "health_check()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L163"}, {"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", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L81"}, {"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", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L92"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "target": "contextlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "target": "fastapi_middleware_cors", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "target": "fastapi_responses", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "target": "sqlalchemy_exc", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "target": "app_core_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "target": "app_core_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "target": "app_core_api_request_log_middleware", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_main_py", "target": "app_core_api_crypto_middleware", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/main.py"Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_pre_transit_sample_py", "label": "pre_transit_sample.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L1"}, {"id": "crud_pre_transit_sample_is_uncollected_status", "label": "_is_uncollected_status()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L50"}, {"id": "crud_pre_transit_sample_is_in_transit_sample", "label": "_is_in_transit_sample()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L54"}, {"id": "crud_pre_transit_sample_cell_received_exists", "label": "_cell_received_exists()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L58"}, {"id": "crud_pre_transit_sample_donation_received_exists", "label": "_donation_received_exists()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L75"}, {"id": "crud_pre_transit_sample_apply_collection_keyword", "label": "_apply_collection_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L92"}, {"id": "crud_pre_transit_sample_apply_donation_keyword", "label": "_apply_donation_keyword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L128"}, {"id": "crud_pre_transit_sample_apply_create_time_filter", "label": "_apply_create_time_filter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L164"}, {"id": "crud_pre_transit_sample_apply_collection_sample_collect_time_filter", "label": "_apply_collection_sample_collect_time_filter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L172"}, {"id": "crud_pre_transit_sample_apply_donation_sample_collect_time_filter", "label": "_apply_donation_sample_collect_time_filter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L199"}, {"id": "crud_pre_transit_sample_earliest_eta", "label": "_earliest_eta()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L226"}, {"id": "crud_pre_transit_sample_build_sample_items", "label": "_build_sample_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L233"}, {"id": "crud_pre_transit_sample_summarize_in_transit_items", "label": "_summarize_in_transit_items()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L281"}, {"id": "crud_pre_transit_sample_summarize_pre_delivery", "label": "_summarize_pre_delivery()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L288"}, {"id": "crud_pre_transit_sample_list_in_transit_collection_ids", "label": "_list_in_transit_collection_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L295"}, {"id": "crud_pre_transit_sample_list_in_transit_donation_ids", "label": "_list_in_transit_donation_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L337"}, {"id": "crud_pre_transit_sample_list_pre_delivery_collection_ids", "label": "_list_pre_delivery_collection_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L379"}, {"id": "crud_pre_transit_sample_list_pre_delivery_donation_ids", "label": "_list_pre_delivery_donation_ids()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L448"}, {"id": "crud_pre_transit_sample_sort_key_in_transit", "label": "_sort_key_in_transit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L517"}, {"id": "crud_pre_transit_sample_sort_key_pre_delivery", "label": "_sort_key_pre_delivery()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py", "source_location": "L522"}, {"id": "crud_pre_transit_sample_hydrate_collection_rows", "label": "_hydrate_collection_rows()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/apLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "label": "pre_transit_sample.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L1"}, {"id": "api_pre_transit_sample_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L16"}, {"id": "api_pre_transit_sample_page_payload", "label": "_page_payload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L26"}, {"id": "api_pre_transit_sample_list_in_transit_samples", "label": "list_in_transit_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L37"}, {"id": "api_pre_transit_sample_list_pre_delivery_samples", "label": "list_pre_delivery_samples()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L72"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "app_core_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "app_core_menu_guard", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "app_core_response", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "app_models_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "api_pre_transit_sample_get_tenant_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L16", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "api_pre_transit_sample_page_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L26", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "api_pre_transit_sample_list_in_transit_samples", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L37", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_pre_transit_sample_py", "target": "api_pre_transit_sample_list_pre_delivery_samples", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py", "source_location": "L72", "weight": 1.0}, {"source": "api_pre_transit_sample_list_in_transit_samples", "target": "api_pre_transit_sample_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/UseLine truncated
+2 -1
View File
@@ -13,7 +13,7 @@ from app.core.database import SessionLocal
from app.core.api_request_log_middleware import ApiRequestLogMiddleware
from app.core.api_crypto_middleware import ApiCryptoMiddleware
from app.models import models # noqa: F401
from app.api import public_router, menu_router, admin_router, workflow_router, basic_info_router, collection_protocol_router, leave_router, operations_router, ethnic_router, sample_reception_router, qc_router, research_donation_router, production_router, pilot_service_router, insurance_company_router, material_router, storage_release_review_router, sample_sms_notification_router, storage_entry_sms_notification_router, qc_sms_notification_router, protocol_sample_collection_router, research_donation_sample_collection_router, pilot_application_router, pilot_checkup_router, pilot_delivery_router, pilot_infusion_confirm_router, pilot_infusion_schedule_mgmt_router, outbound_release_review_router, clinical_payment_router, env_detect_router, cleanroom_garment_router, market_router
from app.api import public_router, menu_router, admin_router, workflow_router, basic_info_router, collection_protocol_router, leave_router, operations_router, ethnic_router, sample_reception_router, qc_router, research_donation_router, production_router, pilot_service_router, insurance_company_router, material_router, storage_release_review_router, sample_sms_notification_router, storage_entry_sms_notification_router, qc_sms_notification_router, protocol_sample_collection_router, research_donation_sample_collection_router, pilot_application_router, pilot_checkup_router, pilot_delivery_router, pilot_infusion_confirm_router, pilot_infusion_schedule_mgmt_router, outbound_release_review_router, clinical_payment_router, env_detect_router, cleanroom_garment_router, market_router, pre_transit_sample_router
@asynccontextmanager
@@ -130,6 +130,7 @@ app.include_router(clinical_payment_router, prefix=settings.API_V1_PREFIX)
app.include_router(env_detect_router, prefix=settings.API_V1_PREFIX)
app.include_router(cleanroom_garment_router, prefix=settings.API_V1_PREFIX)
app.include_router(market_router, prefix=settings.API_V1_PREFIX)
app.include_router(pre_transit_sample_router, prefix=settings.API_V1_PREFIX)
def _mask_secret(value: str) -> str:
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+103 -98
View File
@@ -1,11 +1,11 @@
# Graph Report - app (2026-06-22)
# Graph Report - app (2026-06-24)
## Corpus Check
- Large corpus: 208 files · ~245,319 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
- Large corpus: 210 files · ~249,301 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
## Summary
- 4208 nodes · 22135 edges · 52 communities detected
- Extraction: 33% EXTRACTED · 67% INFERRED · 0% AMBIGUOUS · INFERRED: 14919 edges (avg confidence: 0.6)
- 4251 nodes · 22373 edges · 53 communities detected
- Extraction: 33% EXTRACTED · 67% INFERRED · 0% AMBIGUOUS · INFERRED: 15072 edges (avg confidence: 0.6)
- Token cost: 0 input · 0 output
## Community Hubs (Navigation)
@@ -55,17 +55,18 @@
- [[_COMMUNITY_Community 43|Community 43]]
- [[_COMMUNITY_Community 44|Community 44]]
- [[_COMMUNITY_Community 45|Community 45]]
- [[_COMMUNITY_Community 48|Community 48]]
- [[_COMMUNITY_Community 46|Community 46]]
- [[_COMMUNITY_Community 49|Community 49]]
- [[_COMMUNITY_Community 50|Community 50]]
- [[_COMMUNITY_Community 51|Community 51]]
- [[_COMMUNITY_Community 52|Community 52]]
- [[_COMMUNITY_Community 53|Community 53]]
- [[_COMMUNITY_Community 54|Community 54]]
## God Nodes (most connected - your core abstractions)
1. `success_response()` - 648 edges
2. `error_response()` - 536 edges
3. `SysUser` - 455 edges
1. `success_response()` - 652 edges
2. `error_response()` - 538 edges
3. `SysUser` - 458 edges
4. `BizProductionMaterialUsage` - 298 edges
5. `BizProductionMaterial` - 297 edges
6. `BizQcTaskResult` - 296 edges
@@ -81,104 +82,104 @@
api/menu.py → core/response.py
- `list_my_qc_material_usages()` --calls--> `strip_row_fields()` [INFERRED]
api/qc.py → core/menu_guard.py
- `中试服务交付管理 API(交付信息、交付物料、交付方式)` --uses--> `SysUser` [INFERRED]
api/pilot_delivery.py → models/models.py
- `保留匹配节点及其全部上级,供关键词检索后仍能正确组树。` --uses--> `SysDept` [INFERRED]
crud/dept.py → models/models.py
- `物品单位 CRUD(biz_item_unit)` --uses--> `BizItemUnit` [INFERRED]
crud/item_unit.py → models/models.py
## Communities
### Community 0 - "Community 0"
Cohesion: 0.01
Nodes (827): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+819 more)
Nodes (804): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+796 more)
### Community 1 - "Community 1"
Cohesion: 0.01
Nodes (586): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+578 more)
Nodes (609): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+601 more)
### Community 2 - "Community 2"
Cohesion: 0.08
Nodes (363): 保险公司及险种价格管理 API(保险公司 + 开票信息 + 险种价格), AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody, OccupancyCreateBody (+355 more)
Cohesion: 0.06
Nodes (519): 细胞存储 — 采集协议单 / 审核 / 财务确认 / 分期预警 API, If mother info exists but no customerId, create a customer record and link it., 保险公司及险种价格管理 API(保险公司 + 开票信息 + 险种价格), 审批意见:前端传 commentText,兼容 comment。, TaskActionBody, Base, 细胞产品 CRUD(biz_cell_product), 解析任务样本投入物,返回祖先链单段(样本终止节点)。 (+511 more)
### Community 3 - "Community 3"
Cohesion: 0.01
Nodes (309): generate_uuid(), batch_stock_in(), batch_stock_out(), consumable_code_exists(), create_consumable(), _dec(), get_consumable(), _is_enabled_status() (+301 more)
Nodes (312): _normalize_date_bound(), _persist_protocol_sub_resources(), list_ethnics_for_select(), apply_data_scope(), _get_child_dept_ids(), get_user_dept_id(), _resolve_user_role_scopes(), format_date() (+304 more)
### Community 4 - "Community 4"
Cohesion: 0.01
Nodes (298): CellSampleTypeCreateBody, CellSampleTypeUpdateBody, CollectionRegionCreateBody, CollectionRegionUpdateBody, create_collection_region(), CustomerCreateBody, CustomerUpdateBody, delete_cell_sample_type() (+290 more)
Nodes (288): generate_uuid(), create_cell_sample_type(), get_cell_sample_type(), list_cell_sample_types(), 细胞样本类型 CRUD(biz_cell_sample_type), _row_to_dict(), soft_delete_cell_sample_type(), type_code_exists() (+280 more)
### Community 5 - "Community 5"
Cohesion: 0.09
Nodes (211): AuditCreateBody, BatchDetailIdsBody, BatchRefundFinanceSubmitBody, FinanceConfirmBody, FullmoonTodoInsuranceBody, InvoiceRequestCompleteBody, InvoiceRequestCreateBody, PaymentDetailDraftBody (+203 more)
Cohesion: 0.02
Nodes (214): batch_discard(), batch_options(), _batch_row_to_dict(), batch_stock_in(), batch_stock_out(), _create_batch_and_usage(), delete_batch(), _discard_batch() (+206 more)
### Community 6 - "Community 6"
Cohesion: 0.02
Nodes (189): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时统一排序规则,避免 Illegal mix of collations。, 跨表字符串等值比较(JOIN / WHERE)时统一为 utf8mb4_unicode_ci。, 将列显式设为 utf8mb4_unicode_ci。, unicode_ci(), batch_review(), _dec() (+181 more)
Nodes (116): get_designer_data(), _error_json(), lifespan(), 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, sqlalchemy_exception_handler(), unhandled_exception_handler(), BaseHTTPMiddleware (+108 more)
### Community 7 - "Community 7"
Cohesion: 0.03
Nodes (160): batch_discard(), batch_options(), _batch_row_to_dict(), batch_stock_in(), batch_stock_out(), _create_batch_and_usage(), delete_batch(), _discard_batch() (+152 more)
Cohesion: 0.02
Nodes (165): 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() (+157 more)
### Community 8 - "Community 8"
Cohesion: 0.02
Nodes (153): 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() (+145 more)
Cohesion: 0.03
Nodes (164): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时统一排序规则,避免 Illegal mix of collations。, 跨表字符串等值比较(JOIN / WHERE)时统一为 utf8mb4_unicode_ci。, 将列显式设为 utf8mb4_unicode_ci。, unicode_ci(), batch_review(), _dec() (+156 more)
### Community 9 - "Community 9"
Cohesion: 0.02
Nodes (94): get_designer_data(), _error_json(), 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, sqlalchemy_exception_handler(), unhandled_exception_handler(), BaseHTTPMiddleware, ApiCryptoError (+86 more)
Cohesion: 0.05
Nodes (93): AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody, OccupancyCreateBody, 运营支撑 API(洁净室、进出记录、仓储设施、储位、展厅预约) (+85 more)
### Community 10 - "Community 10"
Cohesion: 0.04
Nodes (97): urls_to_attachment_list(), _apply_qc_status_filter(), _base_query(), _derive_qc_conclusion(), _ensure_notification(), _eq_ci(), _fetch_completed_tasks(), _fmt_dt() (+89 more)
Cohesion: 0.05
Nodes (75): batch_delete_research_donations(), change_donation_status(), convert_from_storage(), convert_to_storage(), create_research_donation(), delete_research_donation(), _get_current_user_id(), get_research_donation_detail() (+67 more)
### Community 11 - "Community 11"
Cohesion: 0.05
Nodes (66): _jwt_user_payload(), Web 端登录用 RSA 公钥(PKCS#1 v1.5,与 JSEncrypt 一致), Web 端登录:账号为 sys_user.user_no,密码为 sys_user.password(bcrypt)。, refresh_token(), web_login(), web_login_rsa_public_key(), lifespan(), create_access_token() (+58 more)
Cohesion: 0.36
Nodes (67): BatchStockInBody, BatchStockInItem, BatchStockOutBody, BatchStockOutItem, ConsumableCreateBody, ConsumablePackCreateBody, ConsumablePackUpdateBody, ConsumableUpdateBody (+59 more)
### Community 12 - "Community 12"
Cohesion: 0.06
Nodes (67): 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() (+59 more)
Nodes (52): _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)。 (+44 more)
### Community 13 - "Community 13"
Cohesion: 0.06
Nodes (56): generate_id(), optional_date(), parse_date(), 将字符串 / date / datetime 转为 date 或 None, camel_to_snake(), get_model_attr(), HistoryCRUD, allocate_next_biz_no() (+48 more)
Cohesion: 0.08
Nodes (53): 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() (+45 more)
### Community 14 - "Community 14"
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 15 - "Community 15"
Cohesion: 0.1
Nodes (36): batch_create_slots(), clear_slots_by_facility_node(), collect_descendant_ids(), create_facility(), create_slot(), get_children(), get_facility(), get_slot() (+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)
### Community 17 - "Community 17"
### Community 16 - "Community 16"
Cohesion: 0.19
Nodes (27): _amount_for_row(), _batch_map(), deduct_for_task(), _deduct_task_usage_legacy_batch(), _display_remark(), _fmt_date_val(), _linked_qc_task_no_map(), list_linked_task_usages() (+19 more)
### Community 17 - "Community 17"
Cohesion: 0.16
Nodes (19): get_by_schedule(), get_method(), _get_tenant_no(), list_by_application(), list_materials(), 中试服务交付管理 API(交付信息、交付物料、交付方式), soft_delete(), create_delivery() (+11 more)
### Community 18 - "Community 18"
Cohesion: 0.15
Nodes (20): _access_log_to_dict(), _calc_duration_minutes(), create_access_log(), create_clean_room(), create_uv_disinfect_log(), get_access_log(), get_clean_room(), get_uv_disinfect_log() (+12 more)
Cohesion: 0.18
Nodes (18): company_code_exists(), create_company(), get_company(), list_companies(), list_company_options(), _row_to_dict(), soft_delete_company(), update_company() (+10 more)
### Community 19 - "Community 19"
Cohesion: 0.17
Nodes (12): BusinessException, InvalidStatusTransitionException, log_delivery_operation(), log_operation(), log_order_operation(), log_settlement_operation(), log_user_operation(), OrderLockedException (+4 more)
### Community 20 - "Community 20"
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 20 - "Community 20"
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 21 - "Community 21"
Cohesion: 0.24
Nodes (9): 微信消息通知服务 支持微信小程序模板消息推送 使用方式: from app.core.wechat_message import Wech, 发送模板消息 Args: openid: 用户openid templ, send_delivery_notice(), send_delivery_warning(), send_order_status(), send_payment_success(), send_refund_result(), send_urge_notification() (+1 more)
Cohesion: 0.23
Nodes (12): create_collection_region(), create_hospital(), get_collection_region(), get_hospital(), _hospital_to_dict(), list_hospitals(), 按医院名称模糊检索,返回医院及所属采集地区信息。, search_hospitals_by_keyword() (+4 more)
### Community 22 - "Community 22"
Cohesion: 0.23
Nodes (12): Config, ProductBase, ProductCategoryBase, ProductCategoryCreate, ProductCategoryResponse, ProductCreate, ProductResponse, ProductUnitBase (+4 more)
Cohesion: 0.24
Nodes (9): 微信消息通知服务 支持微信小程序模板消息推送 使用方式: from app.core.wechat_message import Wech, 发送模板消息 Args: openid: 用户openid templ, send_delivery_notice(), send_delivery_warning(), send_order_status(), send_payment_success(), send_refund_result(), send_urge_notification() (+1 more)
### Community 23 - "Community 23"
Cohesion: 0.31
@@ -190,28 +191,28 @@ Nodes (11): create_consumable_pack(), get_consumable_pack(), get_pack_detail(),
### Community 25 - "Community 25"
Cohesion: 0.24
Nodes (12): appointment_no_exists(), create_exhibition_appointment(), _format_visit_date(), _generate_appointment_no(), get_exhibition_appointment(), list_exhibition_appointments(), 展览预约 CRUD(biz_exhibition_appointment), 生成预约编号:YYYYMMDD + 6位序号(如 20260515000001) (+4 more)
### 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 26 - "Community 26"
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 27 - "Community 27"
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 28 - "Community 28"
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 30 - "Community 30"
### Community 29 - "Community 29"
Cohesion: 0.29
Nodes (9): _build_tree(), _cascade_soft_delete(), create_menu(), get_menu(), list_menus(), list_menus_tree(), _row_to_dict(), soft_delete_menu() (+1 more)
### Community 30 - "Community 30"
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 31 - "Community 31"
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()
@@ -233,109 +234,113 @@ 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 36 - "Community 36"
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 37 - "Community 37"
Cohesion: 0.22
Nodes (8): 菜单 code 权限守卫(V0.3:通过 sys_user_role → sys_role_menu → sys_menu.perms), 运营端角色守卫:admin / super_admin 可访问。, 接口菜单权限守卫(已统一放行 menuCode 校验,仅保留运营端登录)。, 接口菜单权限守卫(已统一放行 menuCode 校验,仅保留运营端登录)。, require_admin_or_super_admin(), require_any_menu_code(), require_menu_code(), strip_row_fields()
### Community 37 - "Community 37"
Cohesion: 0.36
Nodes (7): create_post(), get_post(), list_posts(), post_code_exists(), _row_to_dict(), soft_delete_post(), update_post()
### Community 38 - "Community 38"
Cohesion: 0.36
Nodes (7): create_tenant(), get_tenant(), list_tenants(), _row_to_dict(), soft_delete_tenant(), tenant_no_exists(), update_tenant()
### Community 39 - "Community 39"
Cohesion: 0.36
Nodes (7): create_site(), get_site(), list_sites(), _row_to_dict(), site_code_exists(), soft_delete_site(), update_site()
### Community 40 - "Community 40"
Cohesion: 0.29
Nodes (2): BaseModel, SoftDeleteModel
### Community 40 - "Community 40"
### Community 41 - "Community 41"
Cohesion: 0.38
Nodes (6): derive_legacy_status_from_three(), derive_three_status_from_legacy(), 阶段A兼容:从旧 status 推导三字段。 约束:旧 status 本身混合了支付/配送/订单生命周期,因此只能尽力推断; 若业务侧已有更精确, 阶段A兼容:从三字段反推旧 status(用于旧前端/旧筛选参数兼容)。, ThreeStatus, _to_decimal()
### Community 41 - "Community 41"
### Community 42 - "Community 42"
Cohesion: 0.5
Nodes (3): BaseSettings, Config, Settings
### Community 42 - "Community 42"
### Community 43 - "Community 43"
Cohesion: 0.5
Nodes (2): _auto_fill_create_dept_id(), ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID
### Community 43 - "Community 43"
### Community 44 - "Community 44"
Cohesion: 0.67
Nodes (2): get_menu_list(), 运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)
### Community 44 - "Community 44"
### Community 45 - "Community 45"
Cohesion: 1.0
Nodes (1): 请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传
### Community 45 - "Community 45"
### Community 46 - "Community 46"
Cohesion: 1.0
Nodes (1): API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)
### Community 48 - "Community 48"
### Community 49 - "Community 49"
Cohesion: 1.0
Nodes (1): 发送订单状态通知 Args: openid: 用户openid ord
### Community 49 - "Community 49"
### Community 50 - "Community 50"
Cohesion: 1.0
Nodes (1): 发送支付成功通知 Args: openid: 用户openid ord
### Community 50 - "Community 50"
### Community 51 - "Community 51"
Cohesion: 1.0
Nodes (1): 发送配送通知 Args: openid: 配送员openid task
### Community 51 - "Community 51"
### Community 52 - "Community 52"
Cohesion: 1.0
Nodes (1): 发送配送时效预警 Args: openid: 配送员openid ta
### Community 52 - "Community 52"
### Community 53 - "Community 53"
Cohesion: 1.0
Nodes (1): 发送退款结果通知 Args: openid: 用户openid ord
### Community 53 - "Community 53"
### Community 54 - "Community 54"
Cohesion: 1.0
Nodes (1): 发送催单通知给配送员 Args: deliver_openid: 配送员openid
## Knowledge Gaps
- **128 isolated node(s):** `刷新会话 TTL(refreshToken 续期;已登录用户每次 API 校验通过后滑动续期)`, `写入 refreshToken(用于 one-time 使用/吊销)`, `根据 token 获取当前用户(包含 Redis 会话校验;会话滑动续期)`, `登录凭据 RSA 解密(与前端 JSEncrypt PKCS#1 v1.5 兼容)。`, `Base64 密文 -> JSON 对象(须含 username、password、ts 毫秒时间戳)。` (+123 more)
- **129 isolated node(s):** `刷新会话 TTL(refreshToken 续期;已登录用户每次 API 校验通过后滑动续期)`, `写入 refreshToken(用于 one-time 使用/吊销)`, `根据 token 获取当前用户(包含 Redis 会话校验;会话滑动续期)`, `登录凭据 RSA 解密(与前端 JSEncrypt PKCS#1 v1.5 兼容)。`, `加载 RSA 密钥对:优先环境变量,否则使用内置固定默认密钥。` (+124 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **Thin community `Community 39`** (8 nodes): `BaseModel`, `.to_dict()`, `get_active()`, `base.py`, `SoftDeleteModel`, `.restore()`, `.soft_delete()`, `__tablename__()`
- **Thin community `Community 40`** (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 42`** (4 nodes): `_auto_fill_create_dept_id()`, `get_db()`, `database.py`, `ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID`
- **Thin community `Community 43`** (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 43`** (3 nodes): `get_menu_list()`, `menu.py`, `运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,5 个一级菜单分组)`
- **Thin community `Community 44`** (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 44`** (2 nodes): `context.py`, `请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传`
- **Thin community `Community 45`** (2 nodes): `context.py`, `请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 45`** (2 nodes): `__init__.py`, `API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)`
- **Thin community `Community 46`** (2 nodes): `__init__.py`, `API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 48`** (1 nodes): `发送订单状态通知 Args: openid: 用户openid ord`
- **Thin community `Community 49`** (1 nodes): `发送订单状态通知 Args: openid: 用户openid ord`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 49`** (1 nodes): `发送支付成功通知 Args: openid: 用户openid ord`
- **Thin community `Community 50`** (1 nodes): `发送支付成功通知 Args: openid: 用户openid ord`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 50`** (1 nodes): `发送配送通知 Args: openid: 配送员openid task`
- **Thin community `Community 51`** (1 nodes): `发送配送通知 Args: openid: 配送员openid task`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 51`** (1 nodes): `发送配送时效预警 Args: openid: 配送员openid ta`
- **Thin community `Community 52`** (1 nodes): `发送配送时效预警 Args: openid: 配送员openid ta`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 52`** (1 nodes): `发送退款结果通知 Args: openid: 用户openid ord`
- **Thin community `Community 53`** (1 nodes): `发送退款结果通知 Args: openid: 用户openid ord`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 53`** (1 nodes): `发送催单通知给配送员 Args: deliver_openid: 配送员openid`
- **Thin community `Community 54`** (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 0`, `Community 2`, `Community 4`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 11`, `Community 26`, `Community 28`?**
_High betweenness centrality (0.111) - this node is a cross-community bridge._
- **Why does `generate_uuid()` connect `Community 3` to `Community 0`, `Community 4`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 14`, `Community 15`, `Community 17`, `Community 18`, `Community 20`, `Community 23`, `Community 24`, `Community 25`, `Community 26`, `Community 27`, `Community 28`, `Community 29`, `Community 30`, `Community 31`, `Community 32`, `Community 33`, `Community 34`, `Community 35`, `Community 36`, `Community 38`?**
_High betweenness centrality (0.063) - this node is a cross-community bridge._
- **Why does `success_response()` connect `Community 0` to `Community 1`, `Community 4`, `Community 9`, `Community 11`, `Community 43`, `Community 12`?**
_High betweenness centrality (0.063) - this node is a cross-community bridge._
- **Are the 700 inferred relationships involving `str` (e.g. with `unhandled_exception_handler()` and `get_current_user_by_token()`) actually correct?**
_`str` has 700 INFERRED edges - model-reasoned connections that need verification._
- **Are the 647 inferred relationships involving `success_response()` (e.g. with `list_storage_release_reviews()` and `get_storage_release_review_detail()`) actually correct?**
_`success_response()` has 647 INFERRED edges - model-reasoned connections that need verification._
- **Are the 535 inferred relationships involving `error_response()` (e.g. with `_json_error_response()` and `list_storage_release_reviews()`) actually correct?**
_`error_response()` has 535 INFERRED edges - model-reasoned connections that need verification._
- **Are the 453 inferred relationships involving `SysUser` (e.g. with `数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3` and `从 SysUser 读取用户的 dept_id。`) actually correct?**
_`SysUser` has 453 INFERRED edges - model-reasoned connections that need verification._
- **Why does `SysUser` connect `Community 1` to `Community 0`, `Community 2`, `Community 3`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 17`, `Community 20`, `Community 25`, `Community 27`?**
_High betweenness centrality (0.108) - this node is a cross-community bridge._
- **Why does `success_response()` connect `Community 0` to `Community 1`, `Community 3`, `Community 6`, `Community 7`, `Community 10`, `Community 12`, `Community 44`, `Community 13`, `Community 17`?**
_High betweenness centrality (0.068) - 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 12`, `Community 13`, `Community 14`, `Community 16`, `Community 18`, `Community 19`, `Community 20`, `Community 21`, `Community 23`, `Community 24`, `Community 25`, `Community 26`, `Community 27`, `Community 28`, `Community 29`, `Community 30`, `Community 31`, `Community 32`, `Community 33`, `Community 34`, `Community 35`, `Community 37`, `Community 38`, `Community 39`?**
_High betweenness centrality (0.060) - this node is a cross-community bridge._
- **Are the 703 inferred relationships involving `str` (e.g. with `unhandled_exception_handler()` and `get_current_user_by_token()`) actually correct?**
_`str` has 703 INFERRED edges - model-reasoned connections that need verification._
- **Are the 651 inferred relationships involving `success_response()` (e.g. with `list_storage_release_reviews()` and `get_storage_release_review_detail()`) actually correct?**
_`success_response()` has 651 INFERRED edges - model-reasoned connections that need verification._
- **Are the 537 inferred relationships involving `error_response()` (e.g. with `_json_error_response()` and `list_storage_release_reviews()`) actually correct?**
_`error_response()` has 537 INFERRED edges - model-reasoned connections that need verification._
- **Are the 456 inferred relationships involving `SysUser` (e.g. with `数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3` and `从 SysUser 读取用户的 dept_id。`) actually correct?**
_`SysUser` has 456 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">4208 nodes &middot; 22135 edges &middot; 58 communities</div>
<div id="stats">4251 nodes &middot; 22373 edges &middot; 59 communities</div>
</div>
<script>
const RAW_NODES = [{"id": "init_py", "label": "__init__.py", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 46, "community_name": "Community 46", "source_file": "__init__.py", "file_type": "code", "degree": 0}, {"id": "main_py", "label": "main.py", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "main.py", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 7}, {"id": "app_main_lifespan", "label": "lifespan()", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "lifespan()", "community": 11, "community_name": "Community 11", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_error_json", "label": "_error_json()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "_error_json()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 3}, {"id": "app_main_sqlalchemy_exception_handler", "label": "sqlalchemy_exception_handler()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "sqlalchemy_exception_handler()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 4}, {"id": "app_main_unhandled_exception_handler", "label": "unhandled_exception_handler()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "unhandled_exception_handler()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 5}, {"id": "app_main_mask_secret", "label": "_mask_secret()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "_mask_secret()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_root", "label": "root()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "root()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_health_check", "label": "health_check()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "health_check()", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "code", "degree": 1}, {"id": "app_main_rationale_81", "label": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "\u6570\u636e\u5e93\u5f02\u5e38\uff1a\u8fd4\u56de JSON \u5e76\u4fdd\u7559 CORS \u5934\uff0c\u907f\u514d\u6d4f\u89c8\u5668\u53ea\u62a5\u8de8\u57df\u9519\u8bef", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "app_main_rationale_92", "label": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "\u672a\u6355\u83b7\u5f02\u5e38\uff1a\u7edf\u4e00 JSON 500\uff0c\u786e\u4fdd\u8de8\u57df\u573a\u666f\u4e0b\u4ecd\u6709 Access-Control-Allow-Origin", "community": 9, "community_name": "Community 9", "source_file": "main.py", "file_type": "rationale", "degree": 3}, {"id": "tasks_init_py", "label": "__init__.py", "color": {"background": "#F28E2B", "border": "#F28E2B", "highlight": {"background": "#ffffff", "border": "#F28E2B"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 11, "community_name": "Community 11", "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": 860}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 627}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 368}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 339}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 337}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 212}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 201}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 172}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 169}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 152}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 110}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 80}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 71}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 68}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 38}, {"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": 28}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 22}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 21}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 20}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 13}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 13}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 13}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 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": 12}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 11}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 10}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 10}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 10}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 10}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 10}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 10}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 9}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 9}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 8}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 7}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 4}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 4}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 3}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 2}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 2}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 1}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 1}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 1}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 1}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 1}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 1}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 1}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 1}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 1}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 1}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 1}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 1}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 0}];
const RAW_NODES = [{"id": "init_py", "label": "__init__.py", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 47, "community_name": "Community 47", "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": 835}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 648}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 525}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 355}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 317}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 228}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 186}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 181}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 174}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 98}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 88}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 74}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 61}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 56}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 39}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 31}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 28}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 22}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 20}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 20}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 14}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 14}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 13}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 13}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 13}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 12}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 12}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 12}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 12}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 11}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 11}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 10}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 10}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 10}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 10}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 10}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 9}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 9}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 9}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 9}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 8}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 7}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 4}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 4}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 3}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 2}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 2}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 1}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 1}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 1}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 1}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 1}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 1}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 1}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 1}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 1}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 1}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 1}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 1}];
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
function esc(s) {
File diff suppressed because it is too large. Load diff
+17 -15
View File
@@ -1,11 +1,11 @@
{
"/Users/wuzilong/work/00code/zkxw/backend/app/__init__.py": 1778578257.989357,
"/Users/wuzilong/work/00code/zkxw/backend/app/main.py": 1781503261.6725278,
"/Users/wuzilong/work/00code/zkxw/backend/app/main.py": 1782203448.178036,
"/Users/wuzilong/work/00code/zkxw/backend/app/tasks/__init__.py": 1778579841.437791,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py": 1780540737.3359916,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py": 1782122636.871432,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/api_crypto.py": 1778578258.039314,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py": 1778578258.041774,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py": 1781364254.604756,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py": 1782186069.0708613,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py": 1782186070.0292308,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/wechat_pay.py": 1778578258.0461762,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/api_request_log_middleware.py": 1779882001.753267,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/avatar_url.py": 1780540753.5481932,
@@ -100,8 +100,8 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py": 1781583485.3504221,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_third_party_item.py": 1779265661.482352,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/reagent.py": 1779512669.9847593,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py": 1781750444.5171854,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py": 1781347124.799281,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_protocol.py": 1782195334.7812605,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/cleanroom_garment.py": 1782264452.4901433,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_material_usage.py": 1781423974.5969574,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/biz_no_generator.py": 1779882385.4674172,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/pilot_infusion_confirm.py": 1779828818.7646794,
@@ -115,6 +115,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/express_company.py": 1781402091.5987046,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/pilot_application.py": 1781079895.8304482,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_lab_test_item.py": 1779265673.3888667,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/pre_transit_sample.py": 1782204965.995829,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/role.py": 1779265616.3701816,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_material_stock_batch.py": 1781690315.173275,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/material_stock_check.py": 1781427194.5434632,
@@ -123,13 +124,13 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation_sample_collection.py": 1781063441.5812025,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/cell_product.py": 1781605163.863542,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/menu.py": 1779265729.0381103,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py": 1779277867.6408322,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/collection_region.py": 1782181887.2821388,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/pilot_delivery.py": 1779935673.6808827,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_reception_check_item.py": 1779007909.2933013,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/site.py": 1781401290.6845422,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/api_request_log.py": 1778578258.0614743,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/dict_data.py": 1779265627.276101,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py": 1781752329.9546905,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/research_donation.py": 1782206191.5779727,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/ethnic.py": 1779265849.547566,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_material_formula.py": 1781344175.5871844,
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/pilot_checkup.py": 1779935785.233911,
@@ -167,27 +168,28 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/crud/clinical_payment.py": 1781750839.838135,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/storage_release_review.py": 1779526635.1455016,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/outbound_release_review.py": 1779968232.5759368,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py": 1781364255.0874767,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py": 1782122639.96012,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/material.py": 1781522000.6097813,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/production_material.py": 1781513734.218474,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py": 1782120920.0829217,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/market.py": 1781522283.6823432,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py": 1781750449.5523665,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/collection_protocol.py": 1782195334.2335806,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/cleanroom_garment.py": 1781347256.2326367,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py": 1781747654.986922,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py": 1782181889.9448428,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_infusion_confirm.py": 1779657043.1389203,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_infusion_schedule_mgmt.py": 1779940938.18027,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py": 1781503247.4969025,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py": 1782203443.8451238,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/storage_entry_sms_notification.py": 1780325524.9170487,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_application.py": 1781079904.0516074,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py": 1782204426.7965167,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/qc_sms_notification.py": 1780326875.7886882,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation_sample_collection.py": 1780457788.2998126,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/operations.py": 1781435016.699977,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/menu.py": 1781749943.5843754,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_delivery.py": 1779655584.820777,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py": 1781402092.9624665,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/admin.py": 1782268401.1532724,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/env_detect.py": 1781145712.2433698,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py": 1781592190.878251,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py": 1782195482.219445,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/ethnic.py": 1779266243.9511197,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_checkup.py": 1779935751.2658868,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_service.py": 1781599314.0221174,
@@ -203,7 +205,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/services/qc_work_order_fee_summary.py": 1781337818.5442588,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/storage_facility_code.py": 1781348051.133351,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/workflow_engine.py": 1778634664.6293883,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py": 1782122105.267302,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/web_auth_roles.py": 1782122624.7941194,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/protocol_payment_installment.py": 1781432208.0765035,
"/Users/wuzilong/work/00code/zkxw/backend/app/services/protocol_pay_mode_switch.py": 1781687644.6013215,
"/Users/wuzilong/work/00code/zkxw/backend/app/ws/__init__.py": 1778578258.105995
+1 -1
View File
@@ -67,7 +67,7 @@ API_ENCRYPT_FAIL_OPEN=false
# 走 Nginx 同域 /api 反代,一般无需额外 CORS
# BACKEND_CORS_ORIGINS=["http://your-host:8112"]
# 登录 RSA(多 worker/多实例须配置同一私钥;执行 scripts/package-docker-deploy.sh 时会从 deploy/docker/.env 自动注入)
# 登录 RSA(留空时各 Worker 共用镜像内置默认密钥;生产建议配置独立 PEM)
# LOGIN_RSA_PRIVATE_KEY_PEM=
# 全量 API 请求日志(需 sys_api_request_log 表,否则可关闭)
@@ -0,0 +1,100 @@
-- 质检管理 · 预产及在途样本:菜单与查询权限
-- 新菜单置于「样本接收」之上(order_num=0);样本接收调整为 1
INSERT INTO `sys_menu` (
`id`,
`menu_name`,
`parent_id`,
`menu_type`,
`path`,
`component`,
`perms`,
`is_frame`,
`visible`,
`status`,
`tenant_no`,
`order_num`,
`remark`,
`create_by`,
`create_dept_id`,
`create_time`,
`update_by`,
`update_time`,
`del_flag`
)
SELECT
'70000000000000000000000000000001',
'预产及在途样本',
'QCM00000000000000000000000000001',
'C',
'pre-transit-sample',
'/quality-inspection/pre-transit-sample/index',
'biz:preTransitSample:list',
1,
'1',
'1',
'zkxw',
0,
'质检看板:在途样本与预产协议(协议单维度只读)',
NULL,
'',
NOW(),
NULL,
NOW(),
0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_menu` WHERE `id` = '70000000000000000000000000000001'
);
UPDATE `sys_menu`
SET `order_num` = 1,
`update_time` = NOW()
WHERE `id` = '70000000000000000000000000000002'
AND `del_flag` = 0;
INSERT INTO `sys_menu` (
`id`,
`menu_name`,
`parent_id`,
`menu_type`,
`path`,
`component`,
`perms`,
`is_frame`,
`visible`,
`status`,
`tenant_no`,
`order_num`,
`remark`,
`create_by`,
`create_dept_id`,
`create_time`,
`update_by`,
`update_time`,
`del_flag`
)
SELECT
'70000000000000000000000000000013',
'预产及在途查询',
'70000000000000000000000000000001',
'F',
'',
'',
'biz:preTransitSample:list',
1,
'0',
'1',
'zkxw',
1,
'预产及在途样本列表查询',
NULL,
'',
NOW(),
NULL,
NOW(),
0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_menu` WHERE `id` = '70000000000000000000000000000013'
);
@@ -0,0 +1,34 @@
-- 新增「采集接受人」角色,供样本接收经手人下拉筛选使用
INSERT INTO `sys_role` (
`id`,
`role_name`,
`data_scope`,
`status`,
`tenant_no`,
`order_num`,
`remark`,
`create_by`,
`create_dept_id`,
`create_time`,
`update_by`,
`update_time`,
`del_flag`
)
SELECT
'097bda12-4e72-11f1-9f47-00163e3bdd96',
'采集接受人',
'2',
'1',
'zkxw',
6,
'样本接收经手人候选角色',
NULL,
'',
NOW(),
NULL,
NOW(),
0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_role` WHERE `role_name` = '采集接受人' AND `tenant_no` = 'zkxw' AND `del_flag` = 0
);
+56
View File
@@ -0,0 +1,56 @@
-- 洁净服初始数据导入(来源:洁净服.txt,5列格式)
-- 幂等:按 tenant_no + garment_code 跳过已存在记录
-- id / order_num 从表中已有最大值递增,避免主键冲突
-- 执行:mysql -u root -p zkxw < docs/sql/seed_cleanroom_garments.sql
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
SET @cg_seq := (
SELECT IFNULL(MAX(CAST(SUBSTRING(`id`, 3) AS UNSIGNED)), 0)
FROM `biz_cleanroom_garment`
WHERE `id` REGEXP '^cg[0-9]+$'
);
SET @order_seq := (
SELECT IFNULL(MAX(`order_num`), 0)
FROM `biz_cleanroom_garment`
WHERE `tenant_no` = 'zkxw' AND `del_flag` = 0
);
INSERT INTO `biz_cleanroom_garment` (`id`, `garment_code`, `garment_name`, `wash_discard_limit`, `sterilize_discard_limit`, `inbound_date`, `discard_date`, `garment_status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('cg', LPAD(@cg_seq := @cg_seq + 1, 32, '0')), '10', '耐高温高筒布鞋蓝', 100, 100, '2026-06-24', NULL, 'zc', 'zkxw', @order_seq := @order_seq + 1, '耐高温高筒布鞋蓝 洁净鞋袋 蓝条 已编 10', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_cleanroom_garment` WHERE `garment_code`='10' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_cleanroom_garment` (`id`, `garment_code`, `garment_name`, `wash_discard_limit`, `sterilize_discard_limit`, `inbound_date`, `discard_date`, `garment_status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('cg', LPAD(@cg_seq := @cg_seq + 1, 32, '0')), '11', '耐高温高筒布鞋蓝', 100, 100, '2026-06-24', NULL, 'zc', 'zkxw', @order_seq := @order_seq + 1, '耐高温高筒布鞋蓝 洁净鞋袋 蓝条 已编 11', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_cleanroom_garment` WHERE `garment_code`='11' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_cleanroom_garment` (`id`, `garment_code`, `garment_name`, `wash_discard_limit`, `sterilize_discard_limit`, `inbound_date`, `discard_date`, `garment_status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('cg', LPAD(@cg_seq := @cg_seq + 1, 32, '0')), '12', '耐高温高筒布鞋蓝', 100, 100, '2026-06-24', NULL, 'zc', 'zkxw', @order_seq := @order_seq + 1, '耐高温高筒布鞋蓝 洁净鞋袋 蓝条 已编 12', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_cleanroom_garment` WHERE `garment_code`='12' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_cleanroom_garment` (`id`, `garment_code`, `garment_name`, `wash_discard_limit`, `sterilize_discard_limit`, `inbound_date`, `discard_date`, `garment_status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('cg', LPAD(@cg_seq := @cg_seq + 1, 32, '0')), '13', '耐高温高筒布鞋蓝', 100, 100, '2026-06-24', NULL, 'zc', 'zkxw', @order_seq := @order_seq + 1, '耐高温高筒布鞋蓝 洁净鞋袋 蓝条 已编 13', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_cleanroom_garment` WHERE `garment_code`='13' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_cleanroom_garment` (`id`, `garment_code`, `garment_name`, `wash_discard_limit`, `sterilize_discard_limit`, `inbound_date`, `discard_date`, `garment_status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('cg', LPAD(@cg_seq := @cg_seq + 1, 32, '0')), '14', '耐高温高筒布鞋蓝', 100, 100, '2026-06-24', NULL, 'zc', 'zkxw', @order_seq := @order_seq + 1, '耐高温高筒布鞋蓝 洁净鞋袋 蓝条 已编 14', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_cleanroom_garment` WHERE `garment_code`='14' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_cleanroom_garment` (`id`, `garment_code`, `garment_name`, `wash_discard_limit`, `sterilize_discard_limit`, `inbound_date`, `discard_date`, `garment_status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('cg', LPAD(@cg_seq := @cg_seq + 1, 32, '0')), '15', '耐高温高筒布鞋蓝', 100, 100, '2026-06-24', NULL, 'zc', 'zkxw', @order_seq := @order_seq + 1, '耐高温高筒布鞋蓝 洁净鞋袋 蓝条 已编 15', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_cleanroom_garment` WHERE `garment_code`='15' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_cleanroom_garment` (`id`, `garment_code`, `garment_name`, `wash_discard_limit`, `sterilize_discard_limit`, `inbound_date`, `discard_date`, `garment_status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('cg', LPAD(@cg_seq := @cg_seq + 1, 32, '0')), '16', '耐高温高筒布鞋蓝', 100, 100, '2026-06-24', NULL, 'zc', 'zkxw', @order_seq := @order_seq + 1, '耐高温高筒布鞋蓝 洁净鞋袋 蓝条 已编 16', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_cleanroom_garment` WHERE `garment_code`='16' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_cleanroom_garment` (`id`, `garment_code`, `garment_name`, `wash_discard_limit`, `sterilize_discard_limit`, `inbound_date`, `discard_date`, `garment_status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('cg', LPAD(@cg_seq := @cg_seq + 1, 32, '0')), '17', '耐高温高筒布鞋蓝', 100, 100, '2026-06-24', NULL, 'zc', 'zkxw', @order_seq := @order_seq + 1, '耐高温高筒布鞋蓝 洁净鞋袋 蓝条 已编 17', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_cleanroom_garment` WHERE `garment_code`='17' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_cleanroom_garment` (`id`, `garment_code`, `garment_name`, `wash_discard_limit`, `sterilize_discard_limit`, `inbound_date`, `discard_date`, `garment_status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('cg', LPAD(@cg_seq := @cg_seq + 1, 32, '0')), '18', '耐高温高筒布鞋蓝', 100, 100, '2026-06-24', NULL, 'zc', 'zkxw', @order_seq := @order_seq + 1, '耐高温高筒布鞋蓝 洁净鞋袋 蓝条 已编 18', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_cleanroom_garment` WHERE `garment_code`='18' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_cleanroom_garment` (`id`, `garment_code`, `garment_name`, `wash_discard_limit`, `sterilize_discard_limit`, `inbound_date`, `discard_date`, `garment_status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('cg', LPAD(@cg_seq := @cg_seq + 1, 32, '0')), '19', '耐高温高筒布鞋蓝', 100, 100, '2026-06-24', NULL, 'zc', 'zkxw', @order_seq := @order_seq + 1, '耐高温高筒布鞋蓝 洁净鞋袋 蓝条 已编 19', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_cleanroom_garment` WHERE `garment_code`='19' AND `tenant_no`='zkxw' AND `del_flag`=0);
+227
View File
@@ -0,0 +1,227 @@
-- 设备信息初始数据导入(来源:副本设备统计20250605.xlsx)
-- 字段映射:equipment_code←设备编号, equipment_name←设备名称, equipment_model←设备型号,
-- manufacturer←厂家, location←功能间, status=1(正常),
-- purchase_date/purchase_amount/serial_no=NULL, remark=整行(Tab分隔9列)
-- 缺失设备编号已自动补全为 XW044~XW052(共 9 条)
-- 幂等:按 tenant_no + equipment_code 跳过已存在记录
-- 执行:mysql -u root -p zkxw < docs/sql/seed_equipment.sql
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
SET @eq_seq := (
SELECT IFNULL(MAX(CAST(SUBSTRING(`id`, 3) AS UNSIGNED)), 0)
FROM `biz_equipment`
WHERE `id` REGEXP '^eq[0-9]+$'
);
SET @order_seq := (
SELECT IFNULL(MAX(`order_num`), 0)
FROM `biz_equipment`
WHERE `tenant_no` = 'zkxw' AND `del_flag` = 0
);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW001', '全自动洗衣机', 'XQB100-108', '青岛海尔滚筒洗衣机有限公司', NULL, NULL, '污物清洗、灭菌', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '污物清洗、灭菌 全自动洗衣机 1 XW001 XQB100-108 青岛海尔滚筒洗衣机有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW001' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW002', '电热鼓风干燥箱', 'BJPX-HGZ88', '山东博科科学仪器有限公司', NULL, NULL, '污物清洗、灭菌', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '污物清洗、灭菌 电热鼓风干燥箱 1 XW002 BJPX-HGZ88 山东博科科学仪器有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW002' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW003', 'BKQ-B50 II型立式压力蒸汽灭菌器', 'BKQ-B5011', '山东博科消毒设备有限公司', NULL, NULL, '污物清洗、灭菌', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '污物清洗、灭菌 BKQ-B50 II型立式压力蒸汽灭菌器 1 XW003 BKQ-B5011 山东博科消毒设备有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW003' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW004', 'BKQ-B50 II型立式压力蒸汽灭菌器', 'YXQ-LS-75SⅡ', '山东博科消毒设备有限公司', NULL, NULL, '污物清洗、灭菌', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '污物清洗、灭菌 BKQ-B50 II型立式压力蒸汽灭菌器 1 XW004 YXQ-LS-75SⅡ 山东博科消毒设备有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW004' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW005', '干手器', '81007', '温州奥莎卫浴制品有限公司', NULL, NULL, '一更', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '一更 干手器 1 XW005 81007 温州奥莎卫浴制品有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW005' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW006', '自动杀菌净手器', '白A3000', '温州奥莎卫浴制品有限公司', NULL, NULL, '缓冲间', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '缓冲间 自动杀菌净手器 1 XW006 白A3000 温州奥莎卫浴制品有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW006' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW007', 'CO2 INCUBATOR/二氧化碳培养箱', 'HF240(HT)', '上海力申科学仪器有限公司', NULL, NULL, '细胞培养(自动)', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养(自动) CO2 INCUBATOR/二氧化碳培养箱 1 XW007 HF240(HT) 上海力申科学仪器有限公司 DL1-6 0.75 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW007' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW008', 'CO2 INCUBATOR/二氧化碳培养箱', 'HF240(HT)', '上海力申科学仪器有限公司', NULL, NULL, '细胞培养(自动)', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养(自动) CO2 INCUBATOR/二氧化碳培养箱 1 XW008 HF240(HT) 上海力申科学仪器有限公司 DL1-6 0.75 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW008' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW009', 'CO2 INCUBATOR/二氧化碳培养箱', 'HF240(HT)', '上海力申科学仪器有限公司', NULL, NULL, '细胞培养(自动)', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养(自动) CO2 INCUBATOR/二氧化碳培养箱 1 XW009 HF240(HT) 上海力申科学仪器有限公司 DL1-6 0.75 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW009' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW010', 'CO2 INCUBATOR/二氧化碳培养箱', 'HF240(HT)', '上海力申科学仪器有限公司', NULL, NULL, '细胞培养(自动)', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养(自动) CO2 INCUBATOR/二氧化碳培养箱 1 XW010 HF240(HT) 上海力申科学仪器有限公司 DL1-6 0.75 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW010' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW011', 'CO2 INCUBATOR/二氧化碳培养箱', 'HF240(HT)', '上海力申科学仪器有限公司', NULL, NULL, '细胞培养(自动)', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养(自动) CO2 INCUBATOR/二氧化碳培养箱 1 XW011 HF240(HT) 上海力申科学仪器有限公司 DL1-6 0.75 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW011' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW012', 'CO2 INCUBATOR/二氧化碳培养箱', 'HF240(HT)', '上海力申科学仪器有限公司', NULL, NULL, '细胞培养(自动)', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养(自动) CO2 INCUBATOR/二氧化碳培养箱 1 XW012 HF240(HT) 上海力申科学仪器有限公司 DL1-6 0.75 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW012' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW013', '全自动细胞制备系统', '/', '济南创泽生物医药科技有限公司', NULL, NULL, '细胞培养(自动)', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养(自动) 全自动细胞制备系统 1 XW013 / 济南创泽生物医药科技有限公司 DL1-6 20 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW013' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW014', '蜂巢自动化培养系统', 'CZ-ABCS', '济南创泽生物医药科技有限公司', NULL, NULL, '细胞分离', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞分离 蜂巢自动化培养系统 1 XW014 CZ-ABCS 济南创泽生物医药科技有限公司 3.5 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW014' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW015', '生物安全柜(单人)', 'BSC-1100IIA2-X', '济南鑫贝西生物技术有限公司', NULL, NULL, '细胞分离', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞分离 生物安全柜(单人) 1 XW015 BSC-1100IIA2-X 济南鑫贝西生物技术有限公司 DL-7 0.275 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW015' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW016', '低速冷冻离心机', 'L53R', '湖南湘仪实验室仪器开发有限公司', NULL, NULL, '细胞分离', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞分离 低速冷冻离心机 1 XW016 L53R 湖南湘仪实验室仪器开发有限公司 DP-14 1.6 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW016' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW017', '电子天平', 'YP10002', '杭州旌斐仪器科技有限公司', NULL, NULL, '细胞分离', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞分离 电子天平 1 XW017 YP10002 杭州旌斐仪器科技有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW017' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW018', '全自动细胞荧光分析仪', 'CZ-CBL-A3', '济南创泽生物医药科技有限公司', NULL, NULL, '细胞分离', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞分离 全自动细胞荧光分析仪 1 XW018 CZ-CBL-A3 济南创泽生物医药科技有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW018' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW019', '倒置显微镜(含相机)', 'XD-202', '南京江南永新光学有限公司', NULL, NULL, '细胞分离', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞分离 倒置显微镜(含相机) 1 XW019 XD-202 南京江南永新光学有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW019' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW020', '全自动血液细胞分析仪', 'DF52CRP', '深圳市帝迈生物技术有限公司', NULL, NULL, '细胞分离', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞分离 全自动血液细胞分析仪 1 XW020 DF52CRP 深圳市帝迈生物技术有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW020' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW043', '血袋离心机', NULL, NULL, NULL, NULL, '细胞分离', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞分离 血袋离心机 1 XW043 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW043' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW021', '全自动细胞复苏仪', 'CZ-CR5A', '济南创泽生物医药科技有限公司', NULL, NULL, '细胞培养', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养 全自动细胞复苏仪 1 XW021 CZ-CR5A 济南创泽生物医药科技有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW021' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW022', '生物安全柜(单人)', 'BSC-1100IIA2-X', '济南鑫贝西生物技术有限公司', NULL, NULL, '细胞培养', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养 生物安全柜(单人) 1 XW022 BSC-1100IIA2-X 济南鑫贝西生物技术有限公司 DL1-8 0.275 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW022' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW023', '二氧化碳培养箱', 'CZ-F240', '济南创泽生物医药科技有限公司', NULL, NULL, '细胞培养', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养 二氧化碳培养箱 1 XW023 CZ-F240 济南创泽生物医药科技有限公司 DP-10 0.7 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW023' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW024', '二氧化碳培养箱', 'CZ-F240', '济南创泽生物医药科技有限公司', NULL, NULL, '细胞培养', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养 二氧化碳培养箱 1 XW024 CZ-F240 济南创泽生物医药科技有限公司 DP-10 0.7 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW024' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW025', '数显恒温水浴锅', 'HH-6', '国华(常州)仪器制造有限公司', NULL, NULL, '细胞培养', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养 数显恒温水浴锅 1 XW025 HH-6 国华(常州)仪器制造有限公司 DL1-8 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW025' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW026', '低速台式离心机', 'LT53', '湖南湘仪实验室仪器开发有限公司', NULL, NULL, '细胞培养', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养 低速台式离心机 1 XW026 LT53 湖南湘仪实验室仪器开发有限公司 DL1-8 0.4 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW026' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW027', '倒置显微镜(含相机)', 'XD-202', '南京江南永新光学有限公司', NULL, NULL, '细胞培养', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞培养 倒置显微镜(含相机) 1 XW027 XD-202 南京江南永新光学有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW027' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW028', '程序降温仪', 'CX-17', '济南创泽生物医药科技有限公司', NULL, NULL, '细胞样本库', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞样本库 程序降温仪 1 XW028 CX-17 济南创泽生物医药科技有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW028' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW029', '医用低温保存箱', 'BDF-86V348', '济南鑫贝西生物技术有限公司', NULL, NULL, '细胞样本库', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞样本库 医用低温保存箱 1 XW029 BDF-86V348 济南鑫贝西生物技术有限公司 DP-6 7.725 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW029' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW030', '不锈钢大口径液氮生物容器', NULL, '济南创泽生物医药科技有限公司', NULL, NULL, '细胞样本库', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞样本库 不锈钢大口径液氮生物容器 1 XW030 济南创泽生物医药科技有限公司 DL-10 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW030' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW044', '智能存储系统', NULL, '济南创泽生物医药科技有限公司', NULL, NULL, '细胞样本库', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞样本库 智能存储系统 1 XW044 济南创泽生物医药科技有限公司 DL-10 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW044' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW045', '智能存储系统', NULL, '济南创泽生物医药科技有限公司', NULL, NULL, '细胞样本库', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '细胞样本库 智能存储系统 1 XW045 济南创泽生物医药科技有限公司 DL-10 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW045' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW031', '医用低温保存箱', 'BDF-25H226', '济南鑫贝西生物技术有限公司', NULL, NULL, '物料暂存间', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '物料暂存间 医用低温保存箱 1 XW031 BDF-25H226 济南鑫贝西生物技术有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW031' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW032', '医用冷藏箱', 'BPR-5V298', '济南鑫贝西生物技术有限公司', NULL, NULL, '物料暂存间', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '物料暂存间 医用冷藏箱 1 XW032 BPR-5V298 济南鑫贝西生物技术有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW032' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW033', '医用冷藏箱', 'BPR-5V298', '济南鑫贝西生物技术有限公司', NULL, NULL, '物料暂存间', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '物料暂存间 医用冷藏箱 1 XW033 BPR-5V298 济南鑫贝西生物技术有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW033' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW034', '医用冷藏箱', 'BPR-5V298', '济南鑫贝西生物技术有限公司', NULL, NULL, '物料暂存间', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '物料暂存间 医用冷藏箱 1 XW034 BPR-5V298 济南鑫贝西生物技术有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW034' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW035', '消毒柜', '/', '泰州市金鑫医疗器械有限公司', NULL, NULL, '样本接收间', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '样本接收间 消毒柜 1 XW035 / 泰州市金鑫医疗器械有限公司 DP-11 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW035' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW036', 'GZR-III型高频热合机', 'GZR-III', '苏州市医用仪器厂', NULL, NULL, '内包间', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '内包间 GZR-III型高频热合机 1 XW036 GZR-III 苏州市医用仪器厂 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW036' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW037', '超净工作台', 'BBS-SDC', '济南鑫贝西生物技术有限公司', NULL, NULL, '质控区', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '质控区 超净工作台 1 XW037 BBS-SDC 济南鑫贝西生物技术有限公司 DP-9 0.09 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW037' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW038', '医用冷藏箱', 'BPR5V29825250250C', '济南鑫贝西生物技术有限公司', NULL, NULL, '质控区', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '质控区 医用冷藏箱 1 XW038 BPR5V29825250250C 济南鑫贝西生物技术有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW038' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW039', '医用荧光定量PCR仪', 'Archimed X4', '鲲鹏(徐州)科学仪器有限公司', NULL, NULL, '质控区', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '质控区 医用荧光定量PCR仪 1 XW039 Archimed X4 鲲鹏(徐州)科学仪器有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW039' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW040', '生化培养箱', NULL, '济南鑫贝西生物技术有限公司', NULL, NULL, '质控区', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '质控区 生化培养箱 1 XW040 济南鑫贝西生物技术有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW040' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW041', '酶联免疫分析仪', 'BK-EL10A', '山东博冠生物技术有限公司', NULL, NULL, '质控区', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '质控区 酶联免疫分析仪 1 XW041 BK-EL10A 山东博冠生物技术有限公司 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW041' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW042', '流式细胞仪', 'BeamCyte-1026M', '常州必达科生物科技有限公司', NULL, NULL, '质控区', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '质控区 流式细胞仪 1 XW042 BeamCyte-1026M 常州必达科生物科技有限公司 DP-8 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW042' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW046', '光学显微镜', 'XSP-BM-20-K', '上海彼爱姆光学仪器', NULL, NULL, '闲置设备', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '闲置设备 光学显微镜 1 XW046 XSP-BM-20-K 上海彼爱姆光学仪器 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW046' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW047', '电泳仪', 'JY300C', '君意东方电泳设备', NULL, NULL, '闲置设备', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '闲置设备 电泳仪 1 XW047 JY300C 君意东方电泳设备 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW047' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW048', '电泳槽', 'JY-SPCT', '君意优品生物', NULL, NULL, '闲置设备', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '闲置设备 电泳槽 1 XW048 JY-SPCT 君意优品生物 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW048' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW049', '全自动微生物培养检测仪', 'LABSTAR 60', '山东鑫科生物', NULL, NULL, '闲置设备', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '闲置设备 全自动微生物培养检测仪 1 XW049 LABSTAR 60 山东鑫科生物 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW049' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW050', '凝胶成像系统', 'OI 500', '广州光仪生物', NULL, NULL, '闲置设备', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '闲置设备 凝胶成像系统 1 XW050 OI 500 广州光仪生物 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW050' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW051', '恒温振荡器', 'SHA-C双数显', NULL, NULL, NULL, '闲置设备', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '闲置设备 恒温振荡器 1 XW051 SHA-C双数显 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW051' AND `tenant_no`='zkxw' AND `del_flag`=0);
INSERT INTO `biz_equipment` (`id`, `equipment_code`, `equipment_name`, `equipment_model`, `manufacturer`, `purchase_date`, `purchase_amount`, `location`, `serial_no`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
SELECT CONCAT('eq', LPAD(@eq_seq := @eq_seq + 1, 32, '0')), 'XW052', 'GZR-III型高频热合机', 'GZR-III', '苏州市医用仪器厂', NULL, NULL, '闲置设备', NULL, '1', 'zkxw', @order_seq := @order_seq + 1, '闲置设备 GZR-III型高频热合机 1 XW052 GZR-III 苏州市医用仪器厂 ', NULL, '', '2026-06-24 10:00:00', NULL, '2026-06-24 10:00:00', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `biz_equipment` WHERE `equipment_code`='XW052' AND `tenant_no`='zkxw' AND `del_flag`=0);
@@ -0,0 +1,310 @@
# 预产及在途样本 — 功能设计
**日期**: 2026-06-23
**状态**: 已实现
**界面模式**: P27 衍生列表(只读监控)+ 双分区单页;**列表样式对齐采集协议单列表**
**参考页**: `web-admin/src/views/cell-storage/protocol/index.vue`(列表壳层与列风格)、`research-donation/list/index.vue`(捐赠侧字段对齐)、`collection_protocol.py` 列表 `_row_to_dict`(样本概要字段)
## 1. 需求背景
客户在【质检管理】菜单下、【样本接收】上方新增 **【预产及在途样本】** 页面,用于质检人员集中查看接收前的两类待办:
| 分区 | 业务含义 | 列表粒度 |
|------|----------|----------|
| **上半区 · 在途样本** | 协议下存在 **已采集、未接收** 样本的协议单 | **协议单行**(样本为行内展示字段) |
| **下半区 · 预产样本** | 协议已建且 **样本未录入** 和/或 **样本未采集** | **协议单行**(样本为行内展示字段) |
**已确认展示维度(2026-06-23)**:上下半区均采用 **协议单维度** 展示;样本编码、类型、采集概况、运输/预计到达等作为 **协议行内的概要信息**,不拆成样本级多行。
**已确认列表样式**:参照 **【采集协议单】** 列表(`cell-storage/protocol/index.vue`)——`panel-top` + `filter-block` + `list-table`(`stripe`、列居中、`el-tag` 状态)+ `list-pager-bar`;**无**新增/编辑/删除工具栏与勾选列,操作列仅「查看」。
**已确认交互**:两个分区列表 **操作列仅「查看」**;按来源打开对应协议查看弹窗(采集 → `ProtocolViewDialog`,捐赠 → `DonationViewDialog`)。**不提供**接收、编辑、跳转样本接收等操作。
**已确认数据规则(上半区)**:仅展示 **`sample_status = 'ycj'`(已采集)且尚无有效接收记录** 的样本。
## 2. 与现有模块关系
- **【样本接收】**:操作入口(登记接收、批量接收、触发质检工单);本页为 **只读看板**,与之互补。
- **【采集协议单】列表**:列布局、筛选区结构、表格视觉的直接模板(见 §5.2)。
- **样本采集信息 Tab**:仅作查看弹窗 `handleView` 参考,不作列表列模板。
- **跨表关联键**:判断是否已接收 SHALL 使用 `tenant_no` + `sample_code`(OpenSpec `api-conventions` § 细胞存储样本跨表关联键),与 `sample_reception.py` 现有逻辑一致。
## 3. 数据判定规则
> **列表粒度**:先按 §3.1 / §3.2 判定 **协议是否入选**;再在行内挂载 **与本分区相关的样本概要**(`sampleItems` 为过滤后的子集,见 §3.4)。
### 3.1 上半区 · 在途(协议入选条件)
协议入选当且仅当:在其 `del_flag=0` 的样本子表中,**存在至少一条**同时满足:
```
sample_status = 'ycj'
AND NOT EXISTS 有效 biz_sample_reception(tenant_no + sample_code)
```
且协议本身:
```
del_flag = 0
AND tenant_no = 当前用户租户
AND protocol_status / donation_status NOT IN ('yzf', 'zky', 'zckc', 'ygq')
```
**行内样本展示(`sampleItems`)**:仅包含满足上述「在途」条件的样本行;附带各样本运输字段(`etaTime`、`waybillNo` 等)。
**行内汇总字段**(复用采集协议单列表逻辑):
- `sampleCodes`、`sampleTypeNames`、`labStorageCodes` — 由在途样本拼接
- `sampleCollectSummary` — 仅统计在途样本,如「2个已采集(待接收)」
- `etaTimeSummary` — 在途样本中最早的预计到达(用于排序与列展示,实施时命名可调整)
**协议级排序**:`etaTimeSummary` 升序(空值靠后)→ 协议 `create_time` 升序。
**关键词**:协议号、母亲姓名/电话/身份证、在途样本编码、实验室入库编码。
### 3.2 下半区 · 预产(协议入选条件)
协议入选当满足 **公共协议条件** 且符合 **下列 A 或 B**:
**公共协议条件**:
```
del_flag = 0
AND tenant_no = 当前用户租户
AND protocol_status / donation_status IN ('dsx', 'sxz') -- 排除 ygq
AND NOT IN ('yzf', 'zky', 'zckc')
```
| 子场景 | preDeliveryKind | 入选条件 |
|--------|-----------------|----------|
| A · 样本未录入 | `no_sample` | 无任何 `del_flag=0` 样本子表行 |
| B · 样本未采集 | `uncollected` | 存在 `sample_status` 为空的样本行 |
同一协议若同时无样本行与未采集样本不可能并存;若 **仅有未采集样本** 为 `uncollected`;**仅有零样本** 为 `no_sample`。若协议同时含未采集样本与在途样本,**可同时出现在上下两区**(各分区一行,样本概要不同)。
**行内样本展示**:
- `no_sample`:`sampleItems=[]`,`sampleCollectSummary` 展示「样本未录入」
- `uncollected`:`sampleItems` 仅含未采集样本;`sampleCollectSummary` 如「2个未采集」
**协议级排序**:预产期 `expected_delivery_date` 降序 → 协议 `create_time` 降序。
**关键词**:协议号、母亲姓名/电话/身份证、未采集样本编码。
### 3.3 数据归属总览(协议维度)
| 场景 | 上半区 · 在途 | 下半区 · 预产 |
|------|---------------|---------------|
| 协议无样本行 | — | **展示**(`no_sample`) |
| 仅有未采集样本 | — | **展示**(`uncollected`) |
| 仅有已采集未接收样本 | **展示** | — |
| 兼有未采集 + 已采集未接收 | **展示**(在途概要) | **展示**(未采集概要) |
| 全部样本已接收 | — | — |
### 3.4 行内样本概要结构(与采集协议单列表对齐)
后端复用 `collection_protocol.list` / `research_donation.list` 的组装方式,统一返回:
| 字段 | 说明 |
|------|------|
| `sampleItems[]` | `{ sampleTypeName, sampleCode, sampleStatus, labStorageCode, transport? }`,**已按分区过滤** |
| `sampleTypeNames` | 逗号拼接 |
| `sampleCodes` | 逗号拼接 |
| `labStorageCodes` | 逗号拼接 |
| `sampleCollectSummary` | 文字概要(分区语义不同) |
| `preDeliveryKind` | 仅下半区:`no_sample` / `uncollected`(协议同时仅一种预产态;若仅 `uncollected` 则标 `uncollected`) |
上半区在途样本的 `transport.etaTime` 可汇总到列 **预计到达**(多样本取最早或展示「详见概要」,实施取最早一条)。
## 4. 后端设计
### 4.1 新增 API(推荐独立模块,方案 A)
| 接口 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 在途样本列表 | GET | `/web/admin/pre-transit-samples/in-transit` | 上半区 |
| 预产协议列表 | GET | `/web/admin/pre-transit-samples/pre-delivery` | 下半区 |
**公共查询参数**:
| 参数 | 类型 | 说明 |
|------|------|------|
| page | int | 页码 |
| pageSize | int | 每页条数(≤100) |
| keyword | string | 关键词 |
| sourceType | string | 可选:`cell_storage` / `research_donation`,空=全部 |
**在途列表额外参数**(可选一期):
| 参数 | 类型 | 说明 |
|------|------|------|
| etaTimeStart | string | 预计到达开始 YYYY-MM-DD |
| etaTimeEnd | string | 预计到达结束 YYYY-MM-DD |
**权限**:`require_menu_code("biz:preTransitSample:list")`;`apply_data_scope` 挂在 **协议主表**(`BizCollectionProtocol` / `BizResearchDonation`),与采集协议单列表一致。
**实现要点**:
1. 先查询符合分区条件的 **协议 ID 集合**(采集 + 捐赠 UNION,分页在协议级)。
2. 批量加载当事人、采集信息、样本、运输、接收记录,组装与 `list_collection_protocols` 同构的协议行。
3. 按分区规则 **过滤 `sampleItems`** 并生成 `sampleCollectSummary` 等概要字段。
**实现文件**:
- `backend/app/crud/pre_transit_sample.py` — 协议级查询与行组装(可抽取与 `collection_protocol` 共用的样本概要 helper)
- `backend/app/api/pre_transit_sample.py` — 路由
- 注册:`app/api/__init__.py`、`app/main.py`
### 4.2 列表响应字段(上下半区均为协议行)
在 **采集协议单列表行** 基础上扩展,细胞存储与捐赠 **字段名统一**(捐赠的 `donationStatus` 映射为 `protocolStatus` 展示,`donationNo` 映射为 `docNo` 或保留双字段由前端列模板分支)。
**协议主信息**(对齐 `protocol/index.vue` 列):
| 字段 | 列名 |
|------|------|
| sourceType, sourceTypeLabel | 来源类型(新增,Tag 展示) |
| protocolStatus | 状态 |
| registerDate / donationDate | 登记日期 |
| motherName, motherPhone, motherIdCard | 母亲信息 |
| fatherName | 父亲姓名 |
| newbornSex, deliveryMode, newbornWeightGram | 新生儿信息 |
| regionName, hospitalName | 采集地区/医院 |
| collectorUserName, salesUserName | 采集专员/销售 |
| sampleCollectTime | 样本采集时间 |
| createTime | 创建时间 |
| expectedDeliveryDate | 预产期(下半区排序用,上半区可展示) |
**样本概要**(行内展示,非独立行):
| 字段 | 列名建议 |
|------|----------|
| sampleTypeNames | 样本类型 |
| sampleCodes | 样本编码 |
| labStorageCodes | 实验室入库编码 |
| sampleCollectSummary | 样本采集概况 |
| etaTimeSummary | 预计到达(**上半区**) |
| preDeliveryKindLabel | 预产类型(**下半区**:样本未录入 / 样本未采集) |
**查看用 ID**:`collectionProtocolId` 或 `researchDonationId`(二选一有值)、`sourceType`。
### 4.3 预产列表响应字段
与 §4.2 相同;额外必有 `preDeliveryKind`、`preDeliveryKindLabel`。
## 5. 前端设计
### 5.1 菜单与路由
| 项 | 值 |
|----|-----|
| 菜单名 | 预产及在途样本 |
| 父级 | 质检管理 `QCM00000000000000000000000000001` |
| 排序 | `order_num = 0`(位于样本接收 `order_num = 1` 之上) |
| 路由 path | `pre-transit-sample` |
| 组件 | `/quality-inspection/pre-transit-sample/index` |
| menuCode | `biz:preTransitSample:list` |
同步修改 `web-admin/src/router/modules/sqxp.ts`。
### 5.2 页面结构(对齐采集协议单列表)
```
page-container
└── section.panel
├── filter-block(结构同 protocol/index.vue:关键词、来源类型、创建时间等;下半区可不单独筛预产类型)
├── panel-top → h2.title-bar-heading「在途样本」
├── list-body.list-wrap
│ ├── el-table.list-table(列布局参照 protocol/index.vue + 来源/样本概要列)
│ └── pagination.list-pager-bar
├── panel-top → h2.title-bar-heading「预产样本」
└── list-body.list-wrap(同上)
```
**与采集协议单列表的差异**:
| 采集协议单列表 | 本页 |
|----------------|------|
| 有勾选列、新增/批量删除工具栏 | **无**工具栏、无勾选 |
| 操作:查看 + 更多(编辑/删除) | **仅查看**(`btn-op-item` + View,与协议列表查看按钮一致,不设 `primary` 亦可与协议页保持一致) |
| 仅细胞存储 | 增加 **来源类型** 列;捐赠行状态 Tag 用 `donationStatusTagType` |
| 无双分区 | **上下两个独立表格 + 分页** |
**表格列(建议顺序)**:序号 → 来源类型 → 状态 → 登记日期 → 母亲姓名 → 母亲电话 → 母亲身份证 → 父亲姓名 → 新生儿性别 → 分娩方式 → 新生儿体重 → 采集地区 → 采集医院 → 采集专员 → 销售 → **样本类型** → **样本编码** → **样本采集概况** → 样本采集时间 → **预计到达**(上半区)/ **预产类型**(下半区)→ 创建时间 → 操作。
- 列表:`list-table` + `stripe`;列 `align="center"`;状态/来源用 `el-tag`。
- **在途列表不对预计到达过期行标红**。
- 操作列:`fixed="right"`,`min-width ≥ 120`。
- 两个分区 **独立分页**。
**实现建议**:抽取 `ProtocolListTableColumns` 或在本页复制 `protocol/index.vue` 列定义并追加样本概要列,避免与录入页工具栏耦合。
### 5.3 查看交互
```typescript
function handleView(row) {
if (row.sourceType === 'research_donation') {
// DonationViewDialog :donation-id="row.researchDonationId"
} else {
// ProtocolViewDialog :protocol-id="row.collectionProtocolId"
}
}
```
挂载组件(默认配置,不展开审核/储存证等扩展 Tab):
- `@/views/cell-storage/protocol/ProtocolViewDialog.vue`
- `@/views/research-donation/list/DonationViewDialog.vue`
参照:`SampleCollectionInfoTab.vue`、`DonationSampleCollectionInfoTab.vue` 的 `handleView` 与 `listRow` 摘要传参。
### 5.4 API 模块
**文件**:`web-admin/src/api/pre-transit-sample.ts`
- `fetchPreTransitInTransitList(params)`
- `fetchPreTransitPreDeliveryList(params)`
## 6. 数据库与权限 SQL
**文件**:`docs/sql/alter_sys_menu_add_pre_transit_sample.sql`
- 新增菜单 C 类型:`biz:preTransitSample:list`
- 新增按钮 F 类型:`biz:preTransitSample:list`(查询,与菜单 perms 一致即可)
- 将原「样本接收」`order_num` 调整为 2(若新菜单占 1)或新菜单 0、样本接收保持 1
菜单 `id` 使用新 UUID(实施时生成,避免与现有冲突)。
## 7. 非目标(一期不做)
- 列表导出
- 从本页直接接收样本
- 双击行打开查看(可二期加,一期仅按钮)
- 修改【样本接收】待接收 Tab 的过滤逻辑(保持现网行为)
## 8. 测试要点
1. 上半区:仅含「存在 ycj 且未接收样本」的协议;行内 `sampleItems` 仅含在途样本;已接收、纯未采集协议不出现。
2. 下半区:仅 `dsx`/`sxz` 且非 `ygq`;`no_sample` / `uncollected` 协议各一行;同一协议可同时出现在上下区时样本概要不同。
3. 列表为协议维度,列风格与采集协议单列表一致;样本信息以概要列展示,非样本级多行。
3. 细胞存储行点查看打开 `ProtocolViewDialog`;捐赠行打开 `DonationViewDialog`。
4. 租户隔离、数据权限与关键词搜索正确。
5. 菜单显示在样本接收上方;无权限用户不可访问 API。
## 9. 已确认项汇总
| # | 项 | 结论 |
|---|-----|------|
| 1 | 上半区数据范围 | **仅 `ycj` + 未接收** |
| 2 | 操作列 | **仅查看** |
| 3 | 查看目标 | 采集 → 采集协议单;捐赠 → 捐赠协议单 |
| 4 | 布局 | 上下双分区、分开展示 |
| 5 | 来源 | 采集协议单 + 捐赠协议单均覆盖 |
| 6 | 下半区协议状态 | **仅 `dsx` + `sxz`,排除 `ygq` 已过期** |
| 7 | 在途过期样式 | **不标红、不特殊标记预计到达已过期行** |
| 8 | 下半区数据范围 | **样本未录入 + 样本未采集** |
| 9 | 列表粒度 | **上下半区均为协议单维度**;样本为行内概要字段 |
| 10 | 列表样式 | **参照采集协议单列表**(`protocol/index.vue`) |
## 10. 待确认(可选,不阻塞开发)
1. 筛选区是否在共用关键词之外,为在途区单独提供「预计到达日期」范围?
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+141 -108
View File
@@ -1,11 +1,11 @@
# Graph Report - src (2026-06-23)
# Graph Report - src (2026-06-24)
## Corpus Check
- Large corpus: 787 files · ~522,713 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
- Large corpus: 791 files · ~527,807 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
## Summary
- 2608 nodes · 3626 edges · 52 communities detected
- Extraction: 78% EXTRACTED · 22% INFERRED · 0% AMBIGUOUS · INFERRED: 796 edges (avg confidence: 0.8)
- 2609 nodes · 3608 edges · 57 communities detected
- Extraction: 78% EXTRACTED · 22% INFERRED · 0% AMBIGUOUS · INFERRED: 782 edges (avg confidence: 0.8)
- Token cost: 0 input · 0 output
## Community Hubs (Navigation)
@@ -44,149 +44,154 @@
- [[_COMMUNITY_Community 32|Community 32]]
- [[_COMMUNITY_Community 33|Community 33]]
- [[_COMMUNITY_Community 34|Community 34]]
- [[_COMMUNITY_Community 36|Community 36]]
- [[_COMMUNITY_Community 35|Community 35]]
- [[_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 44|Community 44]]
- [[_COMMUNITY_Community 42|Community 42]]
- [[_COMMUNITY_Community 45|Community 45]]
- [[_COMMUNITY_Community 48|Community 48]]
- [[_COMMUNITY_Community 46|Community 46]]
- [[_COMMUNITY_Community 49|Community 49]]
- [[_COMMUNITY_Community 50|Community 50]]
- [[_COMMUNITY_Community 51|Community 51]]
- [[_COMMUNITY_Community 52|Community 52]]
- [[_COMMUNITY_Community 53|Community 53]]
- [[_COMMUNITY_Community 54|Community 54]]
- [[_COMMUNITY_Community 55|Community 55]]
- [[_COMMUNITY_Community 56|Community 56]]
- [[_COMMUNITY_Community 57|Community 57]]
- [[_COMMUNITY_Community 60|Community 60]]
- [[_COMMUNITY_Community 61|Community 61]]
- [[_COMMUNITY_Community 63|Community 63]]
- [[_COMMUNITY_Community 64|Community 64]]
- [[_COMMUNITY_Community 62|Community 62]]
- [[_COMMUNITY_Community 67|Community 67]]
- [[_COMMUNITY_Community 69|Community 69]]
## God Nodes (most connected - your core abstractions)
1. `get()` - 265 edges
1. `get()` - 268 edges
2. `push()` - 64 edges
3. `emit()` - 27 edges
4. `WebSocketClient` - 26 edges
5. `MenuProcessor` - 16 edges
6. `withFullscreenLoading()` - 15 edges
7. `VersionManager` - 15 edges
8. `set()` - 15 edges
9. `handleDynamicRoutes()` - 15 edges
6. `handleDynamicRoutes()` - 16 edges
7. `withFullscreenLoading()` - 15 edges
8. `VersionManager` - 15 edges
9. `set()` - 15 edges
10. `TableCache` - 14 edges
## Surprising Connections (you probably didn't know these)
- `buildInboundMetaFields()` --calls--> `push()` [INFERRED]
utils/production-work-order-card-meta.ts → views/operations/storage-facility/index.vue
- `fmtMoney()` --calls--> `formatMoneyDisplay()` [INFERRED]
components/business/clinical-schedule-payment-detail/index.vue → utils/money-format.ts
- `handleDownloadAttachment()` --calls--> `downloadAttachmentFile()` [INFERRED]
views/pilot-service/infusion-schedule-management/InfusionScheduleHandoverDialog.vue → utils/download-attachment.ts
- `subscribeTokenRefresh()` --calls--> `push()` [INFERRED]
utils/http/index.ts → views/operations/storage-facility/index.vue
- `handleUnauthorizedResponse()` --calls--> `fetchRefreshToken()` [INFERRED]
utils/http/index.ts → api/auth.ts
- `fetchLeaveList()` --calls--> `get()` [INFERRED]
api/leave.ts → views/production/process/ProcessRouteTab.vue
- `fetchLeaveDetail()` --calls--> `get()` [INFERRED]
api/leave.ts → views/production/process/ProcessRouteTab.vue
## Communities
### Community 0 - "Community 0"
Cohesion: 0.01
Nodes (179): fetchAccessLogList(), fetchActiveRegions(), fetchCategoryList(), fetchCategoryParameters(), fetchCellProductPriceList(), fetchChannelAccount(), fetchChannelAgreementPrices(), fetchChannelAgreements() (+171 more)
Nodes (142): fetchAccessLogList(), fetchActiveRegions(), fetchCategoryList(), fetchCategoryParameters(), fetchCellProductPriceList(), fetchChannelAccount(), fetchChannelAgreementPrices(), fetchChannelAgreements() (+134 more)
### Community 1 - "Community 1"
Cohesion: 0.01
Nodes (11): fetchCreateCheckupInstitution(), fetchCreateCheckupInstitutionInvoice(), fetchDeleteProjectSystemItem(), fetchGetRoleList(), fetchNotDeletedRegions(), fetchRegionList(), fetchUpdateCheckupInstitution(), fetchUpdateCheckupInstitutionInvoice() (+3 more)
Cohesion: 0.02
Nodes (42): fetchAllConsumablePacks(), fetchAllConsumables(), fetchAllConsumableStockLogs(), fetchAllEquipments(), fetchAllOutputTypes(), fetchAllProcessCategories(), fetchAllProcesses(), fetchAllReagents() (+34 more)
### Community 2 - "Community 2"
Cohesion: 0.03
Nodes (62): fetchCheckupInstitutionInvoices(), fetchCheckupInstitutionList(), fetchCheckupInstitutionProjects(), fetchCreateCheckupInstitutionProject(), fetchUpdateCheckupInstitutionProject(), submitOutboundReleaseReview(), fetchConsumablePackDetail(), fetchConsumablePackList() (+54 more)
Nodes (76): batchSavePilotCheckup(), deletePilotCheckupActualItem(), fetchCheckupInstitutionPackageDetail(), fetchCheckupInstitutionPackages(), fetchPilotCheckupDetail(), markPilotCheckupChecked(), savePilotCheckup(), savePilotCheckupActualItems() (+68 more)
### Community 3 - "Community 3"
Cohesion: 0.03
Nodes (78): batchSavePilotCheckup(), deletePilotCheckupActualItem(), fetchCheckupInstitutionPackageDetail(), fetchCheckupInstitutionPackages(), fetchPilotCheckupActualItems(), fetchPilotCheckupDetail(), fetchPilotCheckupReserveItems(), markPilotCheckupChecked() (+70 more)
Nodes (33): fetchGetMenuList(), ComponentLoader, IframeRouteManager, MenuProcessor, RouteRegistry, RouteTransformer, useAppMode(), useAuth() (+25 more)
### Community 4 - "Community 4"
Cohesion: 0.03
Nodes (32): fetchGetMenuList(), ComponentLoader, IframeRouteManager, MenuProcessor, RouteRegistry, RouteTransformer, useAppMode(), useAuth() (+24 more)
Nodes (44): handleBlur(), handleFocus(), handleInput(), formatAmount(), formatAmount(), formatProtocolAmount(), fmtMoney(), buildBaseFields() (+36 more)
### Community 5 - "Community 5"
Cohesion: 0.04
Nodes (51): fetchCreateCustomer(), fetchCustomerList(), fetchDeleteCustomer(), fetchUpdateCustomer(), updateInfusionScheduleStatus(), fetchProductionTaskList(), handleDelete(), handleDropdownCommand() (+43 more)
Cohesion: 0.03
Nodes (52): fetchCheckupInstitutionInvoices(), fetchCheckupInstitutionList(), fetchCheckupInstitutionProjects(), fetchCreateCheckupInstitution(), fetchCreateCheckupInstitutionInvoice(), fetchCreateCheckupInstitutionProject(), fetchUpdateCheckupInstitution(), fetchUpdateCheckupInstitutionInvoice() (+44 more)
### Community 6 - "Community 6"
Cohesion: 0.05
Nodes (60): fetchUploadAttachment(), reload(), handleReportUpload(), handleReportUpload(), walk(), handleMenuJump(), openExternalLink(), async() (+52 more)
Cohesion: 0.04
Nodes (61): fetchUploadAttachment(), reload(), handleReportUpload(), handleReportUpload(), walk(), handleMenuJump(), openExternalLink(), async() (+53 more)
### Community 7 - "Community 7"
Cohesion: 0.04
Nodes (42): fetchMyProductionTasks(), fetchMyQcTaskList(), fetchQcTaskDetail(), fetchQcTaskList(), for(), set(), annotateForkEdges(), chainApiToElements() (+34 more)
Nodes (51): fetchCreateCustomer(), fetchCustomerList(), fetchDeleteCustomer(), fetchUpdateCustomer(), updateInfusionScheduleStatus(), fetchProductionTaskList(), handleDelete(), handleDropdownCommand() (+43 more)
### Community 8 - "Community 8"
Cohesion: 0.05
Nodes (47): fetchCellProductSpecList(), fetchCellProductTypeList(), fetchStorageSlotSelectOptions(), fetchMaxPassageProductSeq(), RoutePermissionValidator, handleAdd(), resetForm(), applyProductCodeToLines() (+39 more)
Cohesion: 0.04
Nodes (41): fetchMyProductionTasks(), fetchMyQcTaskList(), fetchQcTaskDetail(), fetchQcTaskList(), for(), set(), annotateForkEdges(), chainApiToElements() (+33 more)
### Community 9 - "Community 9"
Cohesion: 0.04
Nodes (44): handleBlur(), handleFocus(), handleInput(), fetchFullmoonTodoList(), fetchUpdateFullmoonTodoInsurance(), fetchCollectionProtocolDetail(), fetchInvoiceEligiblePayments(), formatAmount() (+36 more)
Nodes (40): fetchCreateMenu(), fetchDeleteMenu(), fetchMenuTree(), fetchRoleOptions(), fetchUpdateMenu(), collectIds(), buildInboundBasicSection(), buildInboundCellStorageViewSections() (+32 more)
### Community 10 - "Community 10"
Cohesion: 0.04
Nodes (37): fetchInfusionScheduleMgmtDetail(), fetchAttachmentDownloadUrl(), qcAttachmentFullUrl(), qcDownloadAttachment(), qcPreviewAttachment(), attachmentFullUrl(), handleAttachmentDownload(), handleAttachmentPreview() (+29 more)
Nodes (43): fetchFullmoonTodoList(), fetchUpdateFullmoonTodoInsurance(), fetchCollectionProtocolAuditList(), fetchCollectionProtocolDetail(), fetchCollectionProtocolList(), fetchCreateProtocolInvoiceRequest(), fetchInvoiceEligiblePayments(), fetchPaymentDetailList() (+35 more)
### Community 11 - "Community 11"
Cohesion: 0.04
Nodes (36): fetchAttachmentDownloadUrl(), qcAttachmentFullUrl(), qcDownloadAttachment(), qcPreviewAttachment(), handleDownloadAttachment(), attachmentFullUrl(), handleAttachmentDownload(), handleAttachmentPreview() (+28 more)
### Community 12 - "Community 12"
Cohesion: 0.05
Nodes (34): fetchClinicalPaymentDetail(), fetchClinicalPayments(), fetchClinicalReceiptConfirmed(), fetchClinicalReceiptPending(), fetchClinicalRefundConfirmed(), fetchClinicalRefundPending(), fetchOrderAdjusts(), fetchOrderDetail() (+26 more)
### Community 12 - "Community 12"
Cohesion: 0.06
Nodes (38): buildBaseFields(), buildFeeSection(), buildInboundBasicSection(), buildInboundCellStorageProductionViewSections(), buildInboundResearchDonationProductionViewSections(), buildOutboundBasicExperimentProductionViewSections(), buildOutboundClinicalProductionViewSections(), buildOutboundDetail() (+30 more)
### Community 13 - "Community 13"
Cohesion: 0.05
Nodes (38): fetchCellSampleTypeList(), fetchCreateCellSampleType(), fetchCreateMenu(), fetchDeleteCellSampleType(), fetchDeleteMenu(), fetchMenuTree(), fetchUpdateCellSampleType(), fetchUpdateMenu() (+30 more)
### Community 14 - "Community 14"
Cohesion: 0.06
Nodes (11): fetchGetLatestUpgradeLog(), getDefaultLanguage(), checkStorageCompatibility(), StorageConfig, getSystemStorage(), getSysVersion(), StorageKeyManager, StorageCompatibilityManager (+3 more)
### Community 15 - "Community 15"
Cohesion: 0.04
Nodes (28): fetchEthnicList(), formatNowDatetime(), formatHandoverUserLabel(), formatNowDatetime(), fullFileUrl(), handleDownloadAttachment(), handlePreviewAttachment(), isVideoFile() (+20 more)
### Community 16 - "Community 16"
### Community 14 - "Community 14"
Cohesion: 0.05
Nodes (26): fetchDeleteQcMaterialBatch(), fetchQcMaterialBatchList(), fetchQcMaterialBatchOptions(), fetchQcMaterialList(), fetchQcMaterialOptions(), fetchUpdateQcMaterialBatch(), fetchMarkQcMaterialUsageFullyUsed(), financeAttachmentsToUrlString() (+18 more)
### Community 17 - "Community 17"
### Community 15 - "Community 15"
Cohesion: 0.06
Nodes (13): fmtMoney(), auditorDisplay(), dash(), ensureUnitsInOptions(), expressName(), formatYm(), formatYmd(), sampleTypeName() (+5 more)
Nodes (25): useSettingsHandlers(), useSettingsPanel(), useSettingsState(), RoutePermissionValidator, useCeremony(), useTheme(), walk(), themeAnimation() (+17 more)
### Community 18 - "Community 18"
### Community 16 - "Community 16"
Cohesion: 0.07
Nodes (33): fetchUserList(), fetchAddTaskStep(), fetchCopyTaskStep(), fetchDeleteTaskStep(), fetchForwardProductionTask(), fetchProductionTaskDetail(), fetchReassignProductionTask(), fetchReorderTaskSteps() (+25 more)
### Community 17 - "Community 17"
Cohesion: 0.1
Nodes (2): WebSocketClient, TableCache
### Community 19 - "Community 19"
### Community 18 - "Community 18"
Cohesion: 0.08
Nodes (32): toLogin(), base64ToBytes(), bytesToBase64(), decryptJson(), deriveKey(), encryptJson(), fromBase64Url(), hexToBytes() (+24 more)
### Community 20 - "Community 20"
### Community 19 - "Community 19"
Cohesion: 0.08
Nodes (27): fetchUserOptions(), fetchSampleReceptionCheckItemList(), fetchSampleReceptionCheckItemsActive(), fetchAllocateLabStorageCodes(), fetchSampleReceptionBySampleCode(), fetchSampleReceptionDetail(), fetchSampleReceptionPendingList(), fetchSampleReceptionReceivedList() (+19 more)
### Community 21 - "Community 21"
### Community 20 - "Community 20"
Cohesion: 0.08
Nodes (29): fetchCreateUser(), fetchDeleteUser(), fetchDeptTree(), fetchPostBoundUserIds(), fetchResetPassword(), fetchRoleOptions(), fetchUpdateUser(), fetchUserDetail() (+21 more)
Nodes (20): maskIdCard(), buildBasicExperimentApplicationFields(), buildDefaultApplicationFields(), buildOutboundPilotContextSections(), applicationStatusLabel(), applicationStatusTagType(), cellProductStatusLabel(), cellProductStatusTagType() (+12 more)
### Community 21 - "Community 21"
Cohesion: 0.09
Nodes (28): completePilotApplication(), deletePilotApplication(), fetchPilotApplicationList(), startPilotApplication(), voidPilotApplication(), clearTableSelection(), handleBatchComplete(), handleBatchStart() (+20 more)
### Community 22 - "Community 22"
Cohesion: 0.07
Nodes (18): fetchDictDataOptions(), fetchDeleteMaterialBatch(), fetchMaterialBatchList(), fetchMaterialBatchOptions(), fetchMaterialList(), fetchMaterialOptions(), fetchUpdateMaterialBatch(), fetchMaterialUsageList() (+10 more)
Nodes (17): fetchEthnicList(), applyDonationBundleToForm(), createEmptyTransport(), ensureEthnicOptionInList(), handleOpenForAdd(), loadEthnicOptions(), normalizeSampleRow(), resetForm() (+9 more)
### Community 23 - "Community 23"
Cohesion: 0.09
Nodes (27): completePilotApplication(), deletePilotApplication(), fetchPilotApplicationList(), startPilotApplication(), voidPilotApplication(), handleBatchComplete(), handleBatchStart(), handleBatchVoid() (+19 more)
Cohesion: 0.07
Nodes (16): fetchDeleteMaterialBatch(), fetchMaterialBatchList(), fetchMaterialBatchOptions(), fetchMaterialList(), fetchMaterialOptions(), fetchUpdateMaterialBatch(), fetchMaterialUsageList(), fetchMyMaterialUsageList() (+8 more)
### Community 24 - "Community 24"
Cohesion: 0.1
Nodes (27): fetchUserList(), fetchAddTaskStep(), fetchCopyTaskStep(), fetchDeleteTaskStep(), fetchForwardProductionTask(), fetchProductionTaskDetail(), fetchReassignProductionTask(), fetchReorderTaskSteps() (+19 more)
Nodes (28): fetchCellProductSpecList(), fetchCellProductTypeList(), fetchMaxPassageProductSeq(), handleAdd(), resetForm(), applyProductCodeToLines(), calcExpiryFromFreeze(), createEmptyProductLine() (+20 more)
### Community 25 - "Community 25"
Cohesion: 0.11
@@ -194,11 +199,11 @@ Nodes (21): fetchGetMenuCodes(), fetchGetUserInfo(), fetchLogin(), fetchRefreshT
### Community 26 - "Community 26"
Cohesion: 0.12
Nodes (15): buildInboundBasicSection(), buildInboundCellStorageViewSections(), buildInboundResearchDonationViewSections(), buildReceptionSection(), buildTemporaryViewSections(), buildTransportSection(), formatCheckResults(), formatMetric() (+7 more)
Nodes (15): addCopyButton(), highlightCode(), insertLineNumbers(), isBlockProcessed(), markBlockAsProcessed(), processBlock(), setupHighlightDirective(), setupRippleDirective() (+7 more)
### Community 27 - "Community 27"
Cohesion: 0.12
Nodes (15): addCopyButton(), highlightCode(), insertLineNumbers(), isBlockProcessed(), markBlockAsProcessed(), processBlock(), setupHighlightDirective(), setupRippleDirective() (+7 more)
Cohesion: 0.13
Nodes (18): fetchCellSampleTypeList(), fetchCreateCellSampleType(), fetchDeleteCellSampleType(), fetchUpdateCellSampleType(), handleAdd(), handleDelete(), handleDropdownCommand(), handleEdit() (+10 more)
### Community 28 - "Community 28"
Cohesion: 0.11
@@ -206,36 +211,36 @@ Nodes (11): fetchOutboundReleaseMaterial(), fetchOutboundReleaseReviewDetail(),
### Community 29 - "Community 29"
Cohesion: 0.16
Nodes (14): fetchCreateEnvDetectItem(), fetchDeleteEnvDetectItem(), fetchEnvDetectItemDetail(), fetchEnvDetectItemList(), fetchEnvDetectItemsActive(), fetchUpdateEnvDetectItem(), handleAdd(), handleBatchDelete() (+6 more)
Nodes (13): handleChineseDatetimePaste(), parseChineseDatetimeText(), isMaternalBloodEmpty(), matchCellSampleType(), normalizeLine(), parseDatetime(), parseDeliveryMode(), parseDonationStandardImportText() (+5 more)
### Community 30 - "Community 30"
Cohesion: 0.12
Nodes (12): fetchApproveTask(), fetchBusinessAllTasks(), fetchCompletedTasks(), fetchDesignerData(), fetchInstanceDetail(), fetchMyInstances(), fetchPendingTasks(), fetchProcessDefList() (+4 more)
### Community 31 - "Community 31"
Cohesion: 0.16
Nodes (14): fetchCreateEnvDetectItem(), fetchDeleteEnvDetectItem(), fetchEnvDetectItemDetail(), fetchEnvDetectItemList(), fetchEnvDetectItemsActive(), fetchUpdateEnvDetectItem(), handleAdd(), handleBatchDelete() (+6 more)
### Community 32 - "Community 32"
Cohesion: 0.16
Nodes (10): useTable(), useTableImpl(), getColumnChecks(), useTableColumns(), createErrorHandler(), createSmartDebounce(), defaultResponseAdapter(), extractPagination() (+2 more)
### Community 31 - "Community 31"
### Community 33 - "Community 33"
Cohesion: 0.27
Nodes (14): useChart(), useChartComponent(), useChartOps(), colourBlend(), getCssVar(), getDarkColor(), getLightColor(), handleElementThemeColor() (+6 more)
### Community 32 - "Community 32"
Cohesion: 0.14
Nodes (8): useSettingsHandlers(), useSettingsPanel(), useSettingsState(), useCeremony(), useTheme(), themeAnimation(), toggleTheme(), toggleTransition()
### Community 33 - "Community 33"
### Community 34 - "Community 34"
Cohesion: 0.33
Nodes (13): buildProtocolPaymentFlowSteps(), dash(), financeReceiptTime(), formatAmount(), hasFinanceReceipt(), hasFinanceRefund(), hasReceiptSubmit(), hasRefundSubmit() (+5 more)
### Community 34 - "Community 34"
### Community 35 - "Community 35"
Cohesion: 0.19
Nodes (6): fetchServiceOrderTxnList(), handleReset(), handleSearch(), handleTabChange(), loadData(), switchTab()
### Community 36 - "Community 36"
### Community 37 - "Community 37"
Cohesion: 0.18
Nodes (3): normalizeStepSubTables(), parseEquipmentIds(), syncEquipmentNamesFromOptions()
### Community 37 - "Community 37"
Cohesion: 0.17
Nodes (3): fetchResearchDonationAuditList(), fetchResearchDonationDetail(), fetchResearchDonationList()
### Community 38 - "Community 38"
Cohesion: 0.24
Nodes (6): buildInboundMetaFields(), getCardMetaConfig(), getCardMetaConfigForLegacyTab(), parseReceptionTime(), receptionOver24HoursLabel(), receptionOver24HoursTagType()
@@ -245,94 +250,122 @@ Cohesion: 0.42
Nodes (9): buildPaymentFlowSteps(), dash(), formatAmount(), hasFinanceReceipt(), hasFinanceRefund(), hasReceiptSubmit(), hasRefundSubmit(), receiptSubmitTime() (+1 more)
### Community 40 - "Community 40"
Cohesion: 0.2
Nodes (3): fetchProductionWorkOrderCellProductOptions(), fetchProductionWorkOrderDetail(), fetchProductionWorkOrderList()
### Community 41 - "Community 41"
Cohesion: 0.25
Nodes (2): handleTouchEnd(), setTransition()
### Community 41 - "Community 41"
### Community 42 - "Community 42"
Cohesion: 0.28
Nodes (1): FireworkSystem
### Community 44 - "Community 44"
### Community 45 - "Community 45"
Cohesion: 0.39
Nodes (6): isIgnorableScriptError(), normalizeErrorMessage(), registerPromiseErrorHandler(), registerResourceErrorHandler(), scriptErrorHandler(), setupErrorHandle()
### Community 45 - "Community 45"
### Community 46 - "Community 46"
Cohesion: 0.36
Nodes (1): TableHeightCalculator
### Community 48 - "Community 48"
### Community 49 - "Community 49"
Cohesion: 0.33
Nodes (2): logApiCryptoBootInfo(), maskSecret()
### Community 49 - "Community 49"
### Community 50 - "Community 50"
Cohesion: 0.29
Nodes (2): fetchLeaveDetail(), fetchLeaveList()
### Community 51 - "Community 51"
Cohesion: 0.47
Nodes (3): isPaymentDueWithinWarnWindow(), parsePaymentDueYmd(), startOfLocalDay()
### Community 51 - "Community 51"
### Community 53 - "Community 53"
Cohesion: 0.33
Nodes (2): fetchQcThirdPartyCompanyList(), fetchQcThirdPartyCompanyOptions()
### Community 54 - "Community 54"
Cohesion: 0.33
Nodes (2): fetchQcLabTestItemList(), fetchQcLabTestItemsActive()
### Community 55 - "Community 55"
Cohesion: 0.5
Nodes (2): formatProtocolDocDeleteConfirm(), formatProtocolDocSubject()
### Community 52 - "Community 52"
### Community 56 - "Community 56"
Cohesion: 0.5
Nodes (2): focusInput(), handleKeydown()
### Community 53 - "Community 53"
### Community 57 - "Community 57"
Cohesion: 0.67
Nodes (2): if(), logSidebarMenu()
### Community 56 - "Community 56"
### Community 60 - "Community 60"
Cohesion: 0.5
Nodes (1): fetchStorageEntrySmsList()
### Community 61 - "Community 61"
Cohesion: 0.5
Nodes (1): fetchSampleSmsNotificationList()
### Community 62 - "Community 62"
Cohesion: 0.5
Nodes (1): fetchQcSmsList()
### Community 67 - "Community 67"
Cohesion: 1.0
Nodes (2): getSettingDefaults(), resetToDefaults()
### Community 63 - "Community 63"
### Community 69 - "Community 69"
Cohesion: 1.0
Nodes (2): copyTextToClipboard(), copyTextWithFallback()
### Community 64 - "Community 64"
Cohesion: 1.0
Nodes (2): handleChineseDatetimePaste(), parseChineseDatetimeText()
## Knowledge Gaps
- **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`
- **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`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 40`** (9 nodes): `cleanupEventListeners()`, `handleTouchEnd()`, `handleTouchMove()`, `handleTouchStart()`, `handleWheelScroll()`, `if()`, `setTransition()`, `setupEventListeners()`, `index.vue`
- **Thin community `Community 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 41`** (9 nodes): `FireworkSystem`, `.constructor()`, `.createFirework()`, `.createParticle()`, `.getAvailableParticle()`, `.initializePool()`, `.preloadAllImages()`, `.preloadImage()`, `index.vue`
- **Thin community `Community 42`** (9 nodes): `FireworkSystem`, `.constructor()`, `.createFirework()`, `.createParticle()`, `.getAvailableParticle()`, `.initializePool()`, `.preloadAllImages()`, `.preloadImage()`, `index.vue`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 45`** (8 nodes): `TableHeightCalculator`, `.calculate()`, `.calculateOffset()`, `.calculatePaginationOffset()`, `.constructor()`, `.getHeaderHeight()`, `useTableHeight()`, `useTableHeight.ts`
- **Thin community `Community 46`** (8 nodes): `TableHeightCalculator`, `.calculate()`, `.calculateOffset()`, `.calculatePaginationOffset()`, `.constructor()`, `.getHeaderHeight()`, `useTableHeight()`, `useTableHeight.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 48`** (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`** (5 nodes): `formatProtocolDocBatchDeleteConfirm()`, `formatProtocolDocDeleteConfirm()`, `formatProtocolDocSubject()`, `getProtocolDocTypeLabel()`, `protocol-doc-label.ts`
- **Thin community `Community 50`** (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`** (5 nodes): `focusInput()`, `handleKeydown()`, `if()`, `search()`, `index.vue`
- **Thin community `Community 53`** (6 nodes): `fetchCreateQcThirdPartyCompany()`, `fetchDeleteQcThirdPartyCompany()`, `fetchQcThirdPartyCompanyList()`, `fetchQcThirdPartyCompanyOptions()`, `fetchUpdateQcThirdPartyCompany()`, `qc-third-party-company.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 53`** (4 nodes): `if()`, `logSidebarMenu()`, `index.vue`, `SidebarSubmenu.vue`
- **Thin community `Community 54`** (6 nodes): `fetchCreateQcLabTestItem()`, `fetchDeleteQcLabTestItem()`, `fetchQcLabTestItemList()`, `fetchQcLabTestItemsActive()`, `fetchUpdateQcLabTestItem()`, `qc-lab-test-item.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 56`** (4 nodes): `fetchGenerateStorageEntrySms()`, `fetchStorageEntrySmsList()`, `fetchToggleStorageEntrySmsNotified()`, `storage-entry-sms-notification.ts`
- **Thin community `Community 55`** (5 nodes): `formatProtocolDocBatchDeleteConfirm()`, `formatProtocolDocDeleteConfirm()`, `formatProtocolDocSubject()`, `getProtocolDocTypeLabel()`, `protocol-doc-label.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 61`** (3 nodes): `getSettingDefaults()`, `resetToDefaults()`, `setting.ts`
- **Thin community `Community 56`** (5 nodes): `focusInput()`, `handleKeydown()`, `if()`, `search()`, `index.vue`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 63`** (3 nodes): `copyTextToClipboard()`, `copyTextWithFallback()`, `copy-text.ts`
- **Thin community `Community 57`** (4 nodes): `if()`, `logSidebarMenu()`, `index.vue`, `SidebarSubmenu.vue`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 64`** (3 nodes): `handleChineseDatetimePaste()`, `parseChineseDatetimeText()`, `chinese-datetime-parse.ts`
- **Thin community `Community 60`** (4 nodes): `fetchGenerateStorageEntrySms()`, `fetchStorageEntrySmsList()`, `fetchToggleStorageEntrySmsNotified()`, `storage-entry-sms-notification.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 61`** (4 nodes): `fetchGenerateSms()`, `fetchSampleSmsNotificationList()`, `fetchToggleSmsNotified()`, `sample-sms-notification.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 62`** (4 nodes): `fetchGenerateQcSms()`, `fetchQcSmsList()`, `fetchToggleQcSmsNotified()`, `qc-sms-notification.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 67`** (3 nodes): `getSettingDefaults()`, `resetToDefaults()`, `setting.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 69`** (3 nodes): `copyTextToClipboard()`, `copyTextWithFallback()`, `copy-text.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `get()` connect `Community 0` to `Community 1`, `Community 2`, `Community 3`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 13`, `Community 14`, `Community 15`, `Community 16`, `Community 20`, `Community 21`, `Community 22`, `Community 23`, `Community 24`, `Community 25`, `Community 26`, `Community 28`, `Community 29`, `Community 34`, `Community 37`, `Community 56`?**
_High betweenness centrality (0.374) - this node is a cross-community bridge._
- **Why does `push()` connect `Community 6` to `Community 1`, `Community 2`, `Community 3`, `Community 5`, `Community 38`, `Community 7`, `Community 8`, `Community 41`, `Community 9`, `Community 12`, `Community 14`, `Community 15`, `Community 17`, `Community 18`, `Community 19`, `Community 21`, `Community 23`, `Community 26`?**
_High betweenness centrality (0.163) - this node is a cross-community bridge._
- **Why does `handleSubmit()` connect `Community 9` to `Community 2`, `Community 6`?**
_High betweenness centrality (0.030) - this node is a cross-community bridge._
- **Are the 264 inferred relationships involving `get()` (e.g. with `buildNodeCodePathFromFlat()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
_`get()` has 264 INFERRED edges - model-reasoned connections that need verification._
- **Why does `get()` connect `Community 0` to `Community 1`, `Community 2`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 12`, `Community 13`, `Community 14`, `Community 15`, `Community 16`, `Community 19`, `Community 21`, `Community 22`, `Community 23`, `Community 24`, `Community 25`, `Community 27`, `Community 28`, `Community 30`, `Community 31`, `Community 35`, `Community 40`, `Community 50`, `Community 53`, `Community 54`, `Community 60`, `Community 61`, `Community 62`?**
_High betweenness centrality (0.367) - this node is a cross-community bridge._
- **Why does `push()` connect `Community 6` to `Community 0`, `Community 1`, `Community 2`, `Community 4`, `Community 5`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 13`, `Community 15`, `Community 16`, `Community 17`, `Community 18`, `Community 20`, `Community 21`, `Community 22`, `Community 24`, `Community 38`, `Community 42`?**
_High betweenness centrality (0.172) - this node is a cross-community bridge._
- **Why does `handleDynamicRoutes()` connect `Community 3` to `Community 25`, `Community 15`?**
_High betweenness centrality (0.036) - this node is a cross-community bridge._
- **Are the 267 inferred relationships involving `get()` (e.g. with `buildNodeCodePathFromFlat()` and `collectLeafFacilityNodesInTreeOrder()`) actually correct?**
_`get()` has 267 INFERRED edges - model-reasoned connections that need verification._
- **Are the 63 inferred relationships involving `push()` (e.g. with `collectLeafFacilityNodesInTreeOrder()` and `formatDetectMethods()`) actually correct?**
_`push()` has 63 INFERRED edges - model-reasoned connections that need verification._
- **Are the 26 inferred relationships involving `emit()` (e.g. with `handleSubmit()` and `handleBlur()`) actually correct?**
+4 -4
View File
@@ -57,12 +57,12 @@
</div>
<div id="legend"></div>
</div>
<div id="stats">2608 nodes &middot; 3626 edges &middot; 317 communities</div>
<div id="stats">2609 nodes &middot; 3608 edges &middot; 324 communities</div>
</div>
<script>
const RAW_NODES = [{"id": "app_vue", "label": "App.vue", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "App.vue", "community": 48, "community_name": "Community 48", "source_file": "App.vue", "file_type": "code", "degree": 3}, {"id": "src_app_refreshbuttonautoicons", "label": "refreshButtonAutoIcons()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshButtonAutoIcons()", "community": 48, "community_name": "Community 48", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "src_app_refreshpaneltitleicons", "label": "refreshPanelTitleIcons()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "refreshPanelTitleIcons()", "community": 48, "community_name": "Community 48", "source_file": "App.vue", "file_type": "code", "degree": 1}, {"id": "main_ts", "label": "main.ts", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "main.ts", "community": 48, "community_name": "Community 48", "source_file": "main.ts", "file_type": "code", "degree": 4}, {"id": "src_main_masksecret", "label": "maskSecret()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "maskSecret()", "community": 48, "community_name": "Community 48", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "src_main_logapicryptobootinfo", "label": "logApiCryptoBootInfo()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "logApiCryptoBootInfo()", "community": 48, "community_name": "Community 48", "source_file": "main.ts", "file_type": "code", "degree": 2}, {"id": "env_d_ts", "label": "env.d.ts", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "env.d.ts", "community": 103, "community_name": "Community 103", "source_file": "env.d.ts", "file_type": "code", "degree": 0}, {"id": "shims_loose_d_ts", "label": "shims-loose.d.ts", "color": {"background": "#59A14F", "border": "#59A14F", "highlight": {"background": "#ffffff", "border": "#59A14F"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "shims-loose.d.ts", "community": 104, "community_name": "Community 104", "source_file": "shims-loose.d.ts", "file_type": "code", "degree": 0}, {"id": "directives_index_ts", "label": "index.ts", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "index.ts", "community": 27, "community_name": "Community 27", "source_file": "directives/index.ts", "file_type": "code", "degree": 1}, {"id": "directives_index_setupglobdirectives", "label": "setupGlobDirectives()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.5, "font": {"size": 0, "color": "#ffffff"}, "title": "setupGlobDirectives()", "community": 27, "community_name": "Community 27", "source_file": "directives/index.ts", "file_type": "code", "degree": 5}, {"id": "directives_core_roles_ts", "label": "roles.ts", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "roles.ts", "community": 27, "community_name": "Community 27", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 3}, {"id": "core_roles_checkrolepermission", "label": "checkRolePermission()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "checkRolePermission()", "community": 27, "community_name": "Community 27", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_removeelement", "label": "removeElement()", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "removeElement()", "community": 27, "community_name": "Community 27", "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": 350}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 194}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 104}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 100}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 95}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 83}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 81}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 76}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 65}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 64}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 63}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 61}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 58}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 58}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 55}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 54}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 53}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 48}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 42}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 40}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 39}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 35}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 34}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 34}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 32}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 29}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 27}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 22}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 22}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 19}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 17}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 16}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 15}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 14}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 14}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 13}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 12}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 12}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 11}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 10}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 9}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 9}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 9}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 9}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 8}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 8}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 8}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 8}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 7}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 6}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 6}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 5}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 5}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 4}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 4}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 4}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 4}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 4}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 4}, {"cid": 59, "color": "#BAB0AC", "label": "Community 59", "count": 4}, {"cid": 60, "color": "#4E79A7", "label": "Community 60", "count": 4}, {"cid": 61, "color": "#F28E2B", "label": "Community 61", "count": 3}, {"cid": 62, "color": "#E15759", "label": "Community 62", "count": 3}, {"cid": 63, "color": "#76B7B2", "label": "Community 63", "count": 3}, {"cid": 64, "color": "#59A14F", "label": "Community 64", "count": 3}, {"cid": 65, "color": "#EDC948", "label": "Community 65", "count": 3}, {"cid": 66, "color": "#B07AA1", "label": "Community 66", "count": 3}, {"cid": 67, "color": "#FF9DA7", "label": "Community 67", "count": 3}, {"cid": 68, "color": "#9C755F", "label": "Community 68", "count": 3}, {"cid": 69, "color": "#BAB0AC", "label": "Community 69", "count": 3}, {"cid": 70, "color": "#4E79A7", "label": "Community 70", "cLine 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": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "env.d.ts", "community": 107, "community_name": "Community 107", "source_file": "env.d.ts", "file_type": "code", "degree": 0}, {"id": "shims_loose_d_ts", "label": "shims-loose.d.ts", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "shims-loose.d.ts", "community": 108, "community_name": "Community 108", "source_file": "shims-loose.d.ts", "file_type": "code", "degree": 0}, {"id": "directives_index_ts", "label": "index.ts", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "index.ts", "community": 26, "community_name": "Community 26", "source_file": "directives/index.ts", "file_type": "code", "degree": 1}, {"id": "directives_index_setupglobdirectives", "label": "setupGlobDirectives()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.5, "font": {"size": 0, "color": "#ffffff"}, "title": "setupGlobDirectives()", "community": 26, "community_name": "Community 26", "source_file": "directives/index.ts", "file_type": "code", "degree": 5}, {"id": "directives_core_roles_ts", "label": "roles.ts", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "roles.ts", "community": 26, "community_name": "Community 26", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 3}, {"id": "core_roles_checkrolepermission", "label": "checkRolePermission()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "checkRolePermission()", "community": 26, "community_name": "Community 26", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_removeelement", "label": "removeElement()", "color": {"background": "#B07AA1", "border": "#B07AA1", "highlight": {"background": "#ffffff", "border": "#B07AA1"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "removeElement()", "community": 26, "community_name": "Community 26", "source_file": "directives/core/roles.ts", "file_type": "code", "degree": 2}, {"id": "core_roles_setuprolesdirective",Line truncated
const RAW_EDGES = [{"from": "app_vue", "to": "src_app_refreshbuttonautoicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "src_app_refreshpaneltitleicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_vue", "to": "main_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "utils_sys_console_ts", "label": "imports_from", "title": "imports_from [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_masksecret", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "main_ts", "to": "src_main_logapicryptobootinfo", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "src_main_masksecret", "to": "src_main_logapicryptobootinfo", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_ts", "to": "directives_index_setupglobdirectives", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_index_setupglobdirectives", "to": "core_auth_setupauthdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "core_roles_setuprolesdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_highlight_setuphighlightdirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_index_setupglobdirectives", "to": "business_ripple_setuprippledirective", "label": "calls", "title": "calls [INFERRED]", "dashes": true, "width": 1, "color": {"opacity": 0.35}, "confidence": "INFERRED"}, {"from": "directives_core_roles_ts", "to": "core_roles_checkrolepermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_roles_ts", "to": "core_roles_setuprolesdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_roles_checkrolepermission", "to": "core_roles_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_checkauthpermission", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_removeelement", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_core_auth_ts", "to": "core_auth_setupauthdirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "core_auth_checkauthpermission", "to": "core_auth_removeelement", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_ripple_ts", "to": "business_ripple_setuprippledirective", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_highlightcode", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_insertlinenumbers", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "directives_business_highlight_ts", "to": "business_highlight_addcopybutton", "label": "contains", "title": "contains [EXTRACTED]", "dLine truncated
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 404}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 104}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 98}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 95}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 91}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 90}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 83}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 83}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 74}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 71}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 68}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 62}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 61}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 55}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 54}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 46}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 45}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 42}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 40}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 39}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 38}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 35}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 35}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 33}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 32}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 29}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 22}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 22}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 22}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 19}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 19}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 19}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 17}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 16}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 14}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 14}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 13}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 12}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 11}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 10}, {"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": 8}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 8}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 8}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 8}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 7}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 7}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 6}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 6}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 6}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 6}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 5}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 5}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 4}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 4}, {"cid": 59, "color": "#BAB0AC", "label": "Community 59", "count": 4}, {"cid": 60, "color": "#4E79A7", "label": "Community 60", "count": 4}, {"cid": 61, "color": "#F28E2B", "label": "Community 61", "count": 4}, {"cid": 62, "color": "#E15759", "label": "Community 62", "count": 4}, {"cid": 63, "color": "#76B7B2", "label": "Community 63", "count": 4}, {"cid": 64, "color": "#59A14F", "label": "Community 64", "count": 4}, {"cid": 65, "color": "#EDC948", "label": "Community 65", "count": 4}, {"cid": 66, "color": "#B07AA1", "label": "Community 66", "count": 4}, {"cid": 67, "color": "#FF9DA7", "label": "Community 67", "count": 3}, {"cid": 68, "color": "#9C755F", "label": "Community 68", "count": 3}, {"cid": 69, "color": "#BAB0AC", "label": "Community 69", "count": 3}, {"cid": 70, "color": "#4E79A7", "label": "Community 70", "coLine truncated
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
function esc(s) {
File diff suppressed because it is too large. Load diff
+21 -17
View File
@@ -8,7 +8,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/directives/core/auth.ts": 1781272556.3503833,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/directives/business/ripple.ts": 1781272556.3509357,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/directives/business/highlight.ts": 1781272556.3516848,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/api.d.ts": 1782122640.9491363,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/api.d.ts": 1782181894.0762684,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/index.ts": 1781272556.36091,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/config/index.ts": 1781272556.3566036,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/component/chart.ts": 1781272556.3575494,
@@ -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": 1782178449.6288671,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1782178436.4890232,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1782268402.1525922,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1782263710.8949757,
"/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": 1781272556.3652694,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/locales/index.ts": 1781272556.3657222,
@@ -61,6 +61,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/qc-work-order-groups.ts": 1781607964.911379,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/equipment-select.ts": 1781524048.96866,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/clinical-payment-flow-steps.ts": 1781566916.7893076,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts": 1782181911.7421873,
"/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,
@@ -193,7 +194,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/base/art-logo/index.vue": 1781272556.6201615,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/media/art-video-player/index.vue": 1781272556.6210992,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/core/media/art-cutter-img/index.vue": 1781272556.6223109,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue": 1782179027.9725292,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue": 1782206210.4586368,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/protocol-finance-confirm-fields/index.vue": 1781585388.6311953,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/protocol-finance-confirm-fields/finance-attachments.ts": 1781272556.6256514,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue": 1781590356.7882614,
@@ -244,19 +245,20 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task-result.ts": 1781272556.6589992,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/protocol-sample-collection.ts": 1781272556.659353,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts": 1781517319.838243,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts": 1782204427.8344586,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-third-party-company.ts": 1781415389.1483624,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts": 1781750452.7497737,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/chinaRegion.ts": 1781272556.6606348,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts": 1781272556.660898,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/business.ts": 1781750847.0646322,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts": 1781747662.4420574,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts": 1782198350.2141385,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/ethnic.ts": 1781272556.6658764,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation-sample-collection.ts": 1781272556.6660974,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-lab-test-item.ts": 1781272556.666375,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/cell-product.ts": 1781605170.2572234,
"/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": 1781592190.7764218,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts": 1782182859.3901165,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts": 1781581101.6134424,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-item-param.ts": 1781272556.6680455,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/api/env-detect-item.ts": 1781272556.668322,
@@ -275,9 +277,9 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/my-material-usage/index.vue": 1781518736.690082,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/index.vue": 1781600343.1604354,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolStatusChangeDialog.vue": 1781440943.514069,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue": 1781601583.3978057,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue": 1782195651.116649,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolAttachmentReadonly.vue": 1781585388.6583154,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolFormDialog.vue": 1781748532.6439545,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolFormDialog.vue": 1782195650.450516,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolAuditDialog.vue": 1781440939.3081548,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/sample-info/index.vue": 1781599990.94571,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/sample-reception-info/index.vue": 1781272556.6985002,
@@ -311,8 +313,8 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/sample-info/DonationSampleCollectionInfoTab.vue": 1781272556.7362974,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/index.vue": 1781600353.1619346,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationAuditDialog.vue": 1781563767.3746796,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue": 1781600869.955432,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue": 1782179350.20062,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue": 1782194387.9262445,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue": 1782206197.9865716,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationStatusChangeDialog.vue": 1781563767.3753123,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/dashboard/console/index.vue": 1781272556.7480726,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/tenant/index.vue": 1781563767.3820128,
@@ -322,7 +324,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/post/index.vue": 1781563767.37969,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/category/index.vue": 1781563806.3563867,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/express/index.vue": 1781585388.6823208,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue": 1781563767.3833387,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue": 1782268402.8856475,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/detail.vue": 1781563806.885495,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/modules/user-dialog.vue": 1781272556.7718394,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/modules/user-search.vue": 1781272556.7723653,
@@ -392,7 +394,7 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/consumable-pack/index.vue": 1781272556.8373108,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/consumable/index.vue": 1781563767.346933,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/consumable/ConsumablePackTab.vue": 1781563767.3461943,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cleanroom-garment/index.vue": 1781563767.345632,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cleanroom-garment/index.vue": 1782265247.376364,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/index.vue": 1781519269.9141352,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/MaterialConsumptionTab.vue": 1781502903.0563822,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-material/ProductionMaterialConfiguredCatalogDialog.vue": 1781498587.3288593,
@@ -447,7 +449,9 @@
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material/QcMaterialStockCheckTab.vue": 1781563767.3635929,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material/QcMaterialUsageTab.vue": 1782120970.241405,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-material/QcMaterialBatchAttachmentDialog.vue": 1781690342.0885053,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue": 1781600467.5571728,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/index.vue": 1782206029.583706,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue": 1782263777.2928922,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue": 1782198775.9162123,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/SampleReceptionCardList.vue": 1781585388.7346976,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/my-qc-task/index.vue": 1781582341.1215634,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/env-detect-record/index.vue": 1781585388.736309,
@@ -521,23 +525,23 @@
"/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/user.ts": 1782120935.860329,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/store/modules/user.ts": 1782190001.5644245,
"/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,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/RouteTransformer.ts": 1781272559.268035,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/RouteValidator.ts": 1781272559.27879,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/ComponentLoader.ts": 1781272559.4059796,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts": 1781496625.5996523,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts": 1782189941.444193,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/RouteRegistry.ts": 1781272559.4170945,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/RoutePermissionValidator.ts": 1781272559.4235668,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/index.ts": 1781272559.424284,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/IframeRouteManager.ts": 1781272559.425215,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts": 1781749943.2463017,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts": 1782203479.9824018,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/index.ts": 1781272559.5419338,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/exception.ts": 1781272559.549901,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/routes/staticRoutes.ts": 1781272559.596198,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/routes/asyncRoutes.ts": 1781272559.619745,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts": 1782120939.084683,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts": 1782190002.5828512,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/afterEach.ts": 1781272559.7019026,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/assets/svg/my-copy.svg": 1778582067.9349968,
"/Users/wuzilong/work/00code/zkxw/web-admin/src/assets/svg/search.svg": 1778582067.9393654,
+9 -2
View File
@@ -23,9 +23,10 @@ export function fetchGetRoleList() {
}
/** 流程设计器:用户下拉选项(label=昵称,value=用户ID) */
export function fetchUserOptions() {
export function fetchUserOptions(params?: { roleName?: string }) {
return request.get<Array<{ label: string; value: string }>>({
url: '/web/admin/users/options'
url: '/web/admin/users/options',
params
})
}
@@ -984,6 +985,12 @@ export function fetchHospitalList(
params
})
}
export function fetchSearchCollectionHospitals(params: { keyword: string; limit?: number }) {
return request.get<{ list: Api.BizCollectionHospital.HospitalItem[] }>({
url: '/web/admin/collection-hospitals/search',
params
})
}
export function fetchCreateHospital(
regionId: string,
data: { hospitalName: string; orderNum?: number; remark?: string }
+43
View File
@@ -0,0 +1,43 @@
import request from '@/utils/http'
type PageList<T> = {
list: T[]
total: number
page: number
pageSize: number
totalPages: number
}
export type PreTransitProtocolRow = Record<string, unknown>
export function fetchPreTransitInTransitList(params?: {
page?: number
pageSize?: number
keyword?: string
sourceType?: string
createTimeStart?: string
createTimeEnd?: string
sampleCollectTimeStart?: string
sampleCollectTimeEnd?: string
}) {
return request.get<PageList<PreTransitProtocolRow>>({
url: '/web/admin/pre-transit-samples/in-transit',
params
})
}
export function fetchPreTransitPreDeliveryList(params?: {
page?: number
pageSize?: number
keyword?: string
sourceType?: string
createTimeStart?: string
createTimeEnd?: string
sampleCollectTimeStart?: string
sampleCollectTimeEnd?: string
}) {
return request.get<PageList<PreTransitProtocolRow>>({
url: '/web/admin/pre-transit-samples/pre-delivery',
params
})
}
+8
View File
@@ -27,6 +27,14 @@ export function fetchResearchDonationList(params?: {
})
}
// 下一捐赠样本编码(KYJZ+YYYYMMDD+0001 递增)
export function fetchNextDonationSampleCode(params?: { pendingCodes?: string }) {
return request.get<{ sampleCode: string }>({
url: '/web/admin/research-donations/next-sample-code',
params
})
}
// 详情
export function fetchResearchDonationDetail(id: string) {
return request.get<{
@@ -90,7 +90,7 @@
</el-table-column>
<el-table-column label="目的站点" min-width="120" show-overflow-tooltip>
<template #default="{ row }">{{
siteName(String(row.transport?.destSiteId || ''))
siteName(String(row.transport?.destSiteId || ''), row.transport)
}}</template>
</el-table-column>
<el-table-column label="预计到达" min-width="150" show-overflow-tooltip>
@@ -164,7 +164,14 @@
</el-select>
</el-form-item>
<el-form-item label="样本编码">
<el-input
v-if="autoGenerateSampleCode"
:model-value="sampleDraft.sampleCode"
disabled
placeholder="系统自动生成"
/>
<el-select
v-else
v-model="sampleDraft.sampleCodeId"
placeholder="输入编码检索"
filterable
@@ -186,7 +193,10 @@
/>
</el-select>
</el-form-item>
<el-form-item v-if="!hideCollectDetailFields" label="采集量">
<el-form-item
v-if="!hideCollectDetailFields && !hideDialogCollectAmountUnit"
label="采集量"
>
<el-input
v-model="sampleDraft.collectAmount"
type="number"
@@ -195,7 +205,10 @@
style="width: 100%"
/>
</el-form-item>
<el-form-item v-if="!hideCollectDetailFields" label="单位">
<el-form-item
v-if="!hideCollectDetailFields && !hideDialogCollectAmountUnit"
label="单位"
>
<el-select
v-model="sampleDraft.unitId"
placeholder="输入单位检索"
@@ -412,6 +425,10 @@
expressCompanyOptions: Api.ExpressCompany.ExpressCompanyItem[]
showPrice?: boolean
hideCollectDetailFields?: boolean
/** 添加/编辑样本弹窗内隐藏采集量、单位(不影响列表列与存储年限) */
hideDialogCollectAmountUnit?: boolean
autoGenerateSampleCode?: boolean
reserveSampleCode?: () => Promise<string>
sampleCodeUsedKey?: 'usedInProtocol'
sampleCodeOptionsLoading?: boolean
sampleTypeOptionsLoading?: boolean
@@ -422,6 +439,8 @@
{
showPrice: false,
hideCollectDetailFields: false,
hideDialogCollectAmountUnit: false,
autoGenerateSampleCode: false,
sampleCodeUsedKey: 'usedInProtocol',
sampleCodeOptionsLoading: false,
sampleTypeOptionsLoading: false,
@@ -497,6 +516,7 @@
expressCompanyId: transportRaw.expressCompanyId || '',
waybillNo: transportRaw.waybillNo || '',
destSiteId: transportRaw.destSiteId || '',
destSiteName: transportRaw.destSiteName || '',
expressFee: transportRaw.expressFee ?? null,
etaTime: transportRaw.etaTime || '',
carrierName: transportRaw.carrierName || '',
@@ -544,9 +564,13 @@
return name
}
function siteName(id: string) {
function siteName(id: string, transport?: Record<string, any>) {
if (!id) return '—'
return props.siteOptions.find((x) => x.id === id)?.siteName || '—'
const fromOpt = props.siteOptions.find((x) => x.id === id)?.siteName
if (fromOpt && fromOpt !== id) return fromOpt
const fromTransport = String(transport?.destSiteName || '').trim()
if (fromTransport && fromTransport !== id) return fromTransport
return '—'
}
function expressName(id: string) {
@@ -638,7 +662,9 @@
function refreshSampleDialogOptions() {
emit('search-sample-type', '')
emit('search-sample-code', '', sampleCodeFilterForRow(sampleDraft))
if (!props.autoGenerateSampleCode) {
emit('search-sample-code', '', sampleCodeFilterForRow(sampleDraft))
}
emit('search-unit', '')
}
@@ -664,6 +690,7 @@
}
row.storageYears = st.storageYears
}
if (props.autoGenerateSampleCode) return
row.sampleCodeId = ''
row.sampleCode = ''
emit('search-sample-code', '', sampleCodeFilterForRow(row))
@@ -694,6 +721,10 @@
return
}
Object.assign(batchTransport, createEmptyTransport())
const firstWithTransport = selectedSamples.value.find((row) => row.transport?.destSiteId)
if (firstWithTransport?.transport) {
Object.assign(batchTransport, { ...firstWithTransport.transport })
}
batchTransportVisible.value = true
refreshBatchTransportOptions()
}
@@ -715,7 +746,7 @@
ElMessage.success(`已为 ${selectedSamples.value.length} 个样本应用运输信息`)
}
function openAddSampleDialog() {
async function openAddSampleDialog() {
sampleDialogMode.value = 'add'
sampleDialogIndex.value = -1
Object.assign(
@@ -735,6 +766,15 @@
props.samples.length
)
)
if (props.autoGenerateSampleCode && props.reserveSampleCode) {
try {
sampleDraft.sampleCode = await props.reserveSampleCode()
sampleDraft.sampleCodeId = ''
} catch {
ElMessage.error('样本编码生成失败,请稍后重试')
return
}
}
sampleDialogVisible.value = true
refreshSampleDialogOptions()
}
@@ -758,7 +798,21 @@
ElMessage.warning('请选择样本类型')
return
}
if (!sampleDraft.sampleCodeId) {
if (props.autoGenerateSampleCode) {
const code = String(sampleDraft.sampleCode || '').trim()
if (!code) {
ElMessage.warning('样本编码生成失败,请关闭后重试')
return
}
const dup = props.samples.some(
(s, i) =>
i !== sampleDialogIndex.value && String(s.sampleCode || '').trim() === code
)
if (dup) {
ElMessage.warning('样本编码重复,请重新添加')
return
}
} else if (!sampleDraft.sampleCodeId) {
ElMessage.warning('请选择样本编码')
return
}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_pre_transit_sample_ts", "label": "pre-transit-sample.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L1"}, {"id": "api_pre_transit_sample_fetchpretransitintransitlist", "label": "fetchPreTransitInTransitList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L13"}, {"id": "api_pre_transit_sample_fetchpretransitpredeliverylist", "label": "fetchPreTransitPreDeliveryList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L29"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_pre_transit_sample_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/pre-transit-sample.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_pre_transit_sample_ts", "target": "api_pre_transit_sample_fetchpretransitintransitlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_pre_transit_sample_ts", "target": "api_pre_transit_sample_fetchpretransitpredeliverylist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L29", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_pre_transit_sample_fetchpretransitintransitlist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L23"}, {"caller_nid": "api_pre_transit_sample_fetchpretransitpredeliverylist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L39"}]}
@@ -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_quality_inspection_sample_reception_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "label": "DonationFormDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L1"}, {"id": "list_donationformdialog_createemptytransport", "label": "createEmptyTransport()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L778"}, {"id": "list_donationformdialog_fullfileurl", "label": "fullFileUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L796"}, {"id": "list_donationformdialog_loadethnicoptions", "label": "loadEthnicOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L803"}, {"id": "list_donationformdialog_ensureethnicoptioninlist", "label": "ensureEthnicOptionInList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L814"}, {"id": "list_donationformdialog_resetform", "label": "resetForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L915"}, {"id": "list_donationformdialog_scrolltosection", "label": "scrollToSection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L974"}, {"id": "list_donationformdialog_normalizesamplerow", "label": "normalizeSampleRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L982"}, {"id": "list_donationformdialog_handleopenforadd", "label": "handleOpenForAdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L1005"}, {"id": "list_donationformdialog_applydonationbundletoform", "label": "applyDonationBundleToForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L1052"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_transport_form_section_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L672", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L673", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L674", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L685", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_business", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L691", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_download_attachment", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L692", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_weLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocoltable_vue", "label": "PreTransitProtocolTable.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolTable.vue", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocoltable_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_pre_transit_sample", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolTable.vue", "source_location": "L185", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocoltable_vue", "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/quality-inspection/pre-transit-sample/PreTransitProtocolTable.vue", "source_location": "L186", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocoltable_vue", "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/quality-inspection/pre-transit-sample/PreTransitProtocolTable.vue", "source_location": "L194", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "label": "research-donation.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L1"}, {"id": "api_research_donation_fetchresearchdonationlist", "label": "fetchResearchDonationList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L14"}, {"id": "api_research_donation_fetchnextdonationsamplecode", "label": "fetchNextDonationSampleCode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L31"}, {"id": "api_research_donation_fetchresearchdonationdetail", "label": "fetchResearchDonationDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L39"}, {"id": "api_research_donation_fetchcreateresearchdonation", "label": "fetchCreateResearchDonation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L52"}, {"id": "api_research_donation_fetchupdateresearchdonation", "label": "fetchUpdateResearchDonation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L61"}, {"id": "api_research_donation_fetchdeleteresearchdonation", "label": "fetchDeleteResearchDonation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L70"}, {"id": "api_research_donation_fetchbatchdeleteresearchdonation", "label": "fetchBatchDeleteResearchDonation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L78"}, {"id": "api_research_donation_fetchresearchdonationauditlist", "label": "fetchResearchDonationAuditList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L87"}, {"id": "api_research_donation_fetchsubmitdonationaudit", "label": "fetchSubmitDonationAudit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L101"}, {"id": "api_research_donation_fetchdonationstatuschange", "label": "fetchDonationStatusChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L114"}, {"id": "api_research_donation_fetchconvertfromstorage", "label": "fetchConvertFromStorage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L126"}, {"id": "api_research_donation_fetchconverttostorage", "label": "fetchConvertToStorage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L135"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_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/research-donation.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "api_research_donation_fetchresearchdonationlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "api_research_donation_fetchnextdonationsamplecode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L31", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "api_research_donation_fetchresearchdonationdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L39", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "api_research_donation_fetchcreateresearchdonation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L52", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "api_research_donation_fetchupdateresearchdonation", "relation": "contains", "confidence": "EXTRACTED"Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_router_guards_beforeeach_ts", "label": "beforeEach.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L1"}, {"id": "guards_beforeeach_getpendingloading", "label": "getPendingLoading()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L75"}, {"id": "guards_beforeeach_resetpendingloading", "label": "resetPendingLoading()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L82"}, {"id": "guards_beforeeach_getrouteinitfailed", "label": "getRouteInitFailed()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L89"}, {"id": "guards_beforeeach_resetrouteinitstate", "label": "resetRouteInitState()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L96"}, {"id": "guards_beforeeach_setupbeforeeachguard", "label": "setupBeforeEachGuard()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L104"}, {"id": "guards_beforeeach_closeloading", "label": "closeLoading()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L128"}, {"id": "guards_beforeeach_handlerouteguard", "label": "handleRouteGuard()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L140"}, {"id": "guards_beforeeach_handleloginstatus", "label": "handleLoginStatus()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L204"}, {"id": "guards_beforeeach_isstaticroute", "label": "isStaticRoute()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L232"}, {"id": "guards_beforeeach_handledynamicroutes", "label": "handleDynamicRoutes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L262"}, {"id": "guards_beforeeach_fetchuserinfo", "label": "fetchUserInfo()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L381"}, {"id": "guards_beforeeach_resetrouterstate", "label": "resetRouterState()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L406"}, {"id": "guards_beforeeach_handlerootpathredirect", "label": "handleRootPathRedirect()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L424"}, {"id": "guards_beforeeach_isunauthorizederror", "label": "isUnauthorizedError()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L441"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_guards_beforeeach_ts", "target": "vue_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L38", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_guards_beforeeach_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L39", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_guards_beforeeach_ts", "target": "nprogress", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L40", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_guards_beforeeach_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_setting", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L41", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_guards_beforeeach_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_user", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L42", "weight": 1.0}, {"source": "users_wuzilong_work_00Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationviewdialog_vue", "label": "DonationViewDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L1"}, {"id": "list_donationviewdialog_dash", "label": "dash()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L786"}, {"id": "list_donationviewdialog_formatmetric", "label": "formatMetric()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L791"}, {"id": "list_donationviewdialog_formatymd", "label": "formatYmd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L797"}, {"id": "list_donationviewdialog_formatym", "label": "formatYm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L803"}, {"id": "list_donationviewdialog_auditordisplay", "label": "auditorDisplay()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L809"}, {"id": "list_donationviewdialog_sampletypename", "label": "sampleTypeName()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L815"}, {"id": "list_donationviewdialog_unitname", "label": "unitName()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L819"}, {"id": "list_donationviewdialog_ensureunitsinoptions", "label": "ensureUnitsInOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L827"}, {"id": "list_donationviewdialog_sitename", "label": "siteName()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L845"}, {"id": "list_donationviewdialog_expressname", "label": "expressName()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L849"}, {"id": "list_donationviewdialog_samplereceptionchecklist", "label": "sampleReceptionCheckList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L853"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationviewdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_money_format", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L614", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationviewdialog_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L615", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationviewdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_protocol_protocolattachmentreadonly_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L616", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationviewdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_qc_info_grouped_panel_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue", "source_location": "L617", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationviewdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_production_info_cards_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "label": "DonationFormDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L1"}, {"id": "list_donationformdialog_createemptytransport", "label": "createEmptyTransport()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L788"}, {"id": "list_donationformdialog_fullfileurl", "label": "fullFileUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L806"}, {"id": "list_donationformdialog_loadethnicoptions", "label": "loadEthnicOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L813"}, {"id": "list_donationformdialog_ensureethnicoptioninlist", "label": "ensureEthnicOptionInList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L824"}, {"id": "list_donationformdialog_resetform", "label": "resetForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L925"}, {"id": "list_donationformdialog_scrolltosection", "label": "scrollToSection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L984"}, {"id": "list_donationformdialog_normalizesamplerow", "label": "normalizeSampleRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L992"}, {"id": "list_donationformdialog_handleopenforadd", "label": "handleOpenForAdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L1015"}, {"id": "list_donationformdialog_applydonationbundletoform", "label": "applyDonationBundleToForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L1062"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_transport_form_section_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L682", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L683", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L684", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L695", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_business", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L701", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_download_attachment", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L702", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_weLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "label": "PreTransitProtocolCardList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L1"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_statuslabel", "label": "statusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L238"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_statustagtype", "label": "statusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L245"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_sourcetypetagtype", "label": "sourceTypeTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L252"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L238", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_statustagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L245", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_sourcetypetagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L252", "weight": 1.0}], "raw_calls": [{"caller_nid": "pre_transit_sample_pretransitprotocolcardlist_statuslabel", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L239"}, {"caller_nid": "pre_transit_sample_pretransitprotocolcardlist_statuslabel", "callee": "donationStatusLabel", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L241"}, {"caller_nid": "pre_transit_sample_pretransitprotocolcardlist_statuslabel", "callee": "protocolStatusLabel", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L242"}, {"caller_nid": "pre_transit_sample_pretransitprotocolcardlist_statustagtype", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L246"}, {"caller_nid": "pre_transit_sample_pretransitprotocolcardlist_statustagtype", "callee": "donationStatusTagType", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L248"}, {"caller_nid": "pre_transit_sample_pretransitprotocolcardlist_statustagtype", "callee": "protocolStatusTagType", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L249"}]}
@@ -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": "L375"}], "edges": [{"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": "L345", "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": "L346", "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": "L359", "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": "L360", "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": "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_user_avatar", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/user/index.vue", "source_location": "L371", "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": "L375", "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": "L377"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_transport_form_section_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue", "source_location": "L1"}, {"id": "sample_transport_form_section_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue", "source_location": "L673"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_transport_form_section_index_vue", "target": "sample_transport_form_section_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue", "source_location": "L673", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_transport_form_section_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue", "source_location": "L1"}, {"id": "sample_transport_form_section_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue", "source_location": "L687"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_transport_form_section_index_vue", "target": "sample_transport_form_section_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue", "source_location": "L687", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/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_research_donation_list_donationformdialog_vue", "label": "DonationFormDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L1"}, {"id": "list_donationformdialog_createemptytransport", "label": "createEmptyTransport()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L785"}, {"id": "list_donationformdialog_fullfileurl", "label": "fullFileUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L803"}, {"id": "list_donationformdialog_loadethnicoptions", "label": "loadEthnicOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L810"}, {"id": "list_donationformdialog_ensureethnicoptioninlist", "label": "ensureEthnicOptionInList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L821"}, {"id": "list_donationformdialog_resetform", "label": "resetForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L922"}, {"id": "list_donationformdialog_scrolltosection", "label": "scrollToSection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L981"}, {"id": "list_donationformdialog_normalizesamplerow", "label": "normalizeSampleRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L989"}, {"id": "list_donationformdialog_handleopenforadd", "label": "handleOpenForAdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L1012"}, {"id": "list_donationformdialog_applydonationbundletoform", "label": "applyDonationBundleToForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L1059"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_transport_form_section_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L680", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L681", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L682", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L693", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_business", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L698", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_donationformdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_download_attachment", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue", "source_location": "L699", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_weLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "label": "PreTransitProtocolCardList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_protocol_protocolviewdialog_vue", "label": "ProtocolViewDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1"}, {"id": "protocol_protocolviewdialog_fullmoontodostatuslabel", "label": "fullmoonTodoStatusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1332"}, {"id": "protocol_protocolviewdialog_fullmoontodostatustagtype", "label": "fullmoonTodoStatusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1336"}, {"id": "protocol_protocolviewdialog_insurancesubscribedlabel", "label": "insuranceSubscribedLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1340"}, {"id": "protocol_protocolviewdialog_insurancesubscribedtagtype", "label": "insuranceSubscribedTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1344"}, {"id": "protocol_protocolviewdialog_fmtmoney", "label": "fmtMoney()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1349"}, {"id": "protocol_protocolviewdialog_storagecertmakestatuslabel", "label": "storageCertMakeStatusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1354"}, {"id": "protocol_protocolviewdialog_storagecertmakestatustagtype", "label": "storageCertMakeStatusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1358"}, {"id": "protocol_protocolviewdialog_dash", "label": "dash()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1418"}, {"id": "protocol_protocolviewdialog_formatmetric", "label": "formatMetric()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1423"}, {"id": "protocol_protocolviewdialog_formatymd", "label": "formatYmd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1429"}, {"id": "protocol_protocolviewdialog_formatinstallmentamounts", "label": "formatInstallmentAmounts()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1435"}, {"id": "protocol_protocolviewdialog_formatym", "label": "formatYm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1440"}, {"id": "protocol_protocolviewdialog_paydetailcolorclass", "label": "payDetailColorClass()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1446"}, {"id": "protocol_protocolviewdialog_isreceiptfinanceconfirmed", "label": "isReceiptFinanceConfirmed()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1454"}, {"id": "protocol_protocolviewdialog_financeconfirmattachmentfiles", "label": "financeConfirmAttachmentFiles()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1721"}, {"id": "protocol_protocolviewdialog_refundattachmentfiles", "label": "refundAttachmentFiles()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1728"}, {"id": "protocol_protocolviewdialog_refundfinanceconfirmattachmentfiles", "label": "refundFinanceConfirmAttachmentFiles()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue", "source_location": "L1735"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_protocol_protocolviewdialog_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/weLine 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_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "label": "PreTransitProtocolCardList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L1"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_rowkey", "label": "rowKey()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L296"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_isexpanded", "label": "isExpanded()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L301"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_expandrow", "label": "expandRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L305"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_collapserow", "label": "collapseRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L310"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_statuslabel", "label": "statusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L316"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_statustagtype", "label": "statusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L323"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_sourcetypetagtype", "label": "sourceTypeTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L330"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_rowkey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L296", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_isexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L301", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_expandrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L305", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_collapserow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L310", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L316", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_statustagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L323", "weight": 1.0}, {Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_donation_standard_import_parse_ts", "label": "donation-standard-import-parse.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L1"}, {"id": "utils_donation_standard_import_parse_normalizeline", "label": "normalizeLine()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L47"}, {"id": "utils_donation_standard_import_parse_splitkeyvalue", "label": "splitKeyValue()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L53"}, {"id": "utils_donation_standard_import_parse_parsesex", "label": "parseSex()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L59"}, {"id": "utils_donation_standard_import_parse_parsedeliverymode", "label": "parseDeliveryMode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L67"}, {"id": "utils_donation_standard_import_parse_parseweightgram", "label": "parseWeightGram()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L75"}, {"id": "utils_donation_standard_import_parse_parsescore", "label": "parseScore()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L84"}, {"id": "utils_donation_standard_import_parse_parsedatetime", "label": "parseDatetime()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L93"}, {"id": "utils_donation_standard_import_parse_ismaternalbloodempty", "label": "isMaternalBloodEmpty()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L102"}, {"id": "utils_donation_standard_import_parse_parsedonationstandardimporttext", "label": "parseDonationStandardImportText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L109"}, {"id": "utils_donation_standard_import_parse_matchcellsampletype", "label": "matchCellSampleType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L203"}, {"id": "utils_donation_standard_import_parse_matchexpresscompany", "label": "matchExpressCompany()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L234"}, {"id": "utils_donation_standard_import_parse_isblankstring", "label": "isBlankString()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L256"}, {"id": "utils_donation_standard_import_parse_isemptynumber", "label": "isEmptyNumber()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L260"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_donation_standard_import_parse_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_chinese_datetime_parse", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_donation_standard_import_parse_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_numeric_input_parse", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_donation_standard_import_parse_ts", "target": "utils_donation_standard_import_parse_normalizeline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "source_location": "L47", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_donation_standard_import_parse_ts", "target": "utils_donation_standard_import_parse_splitkeyvalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/donation-standard-import-parse.ts", "souLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "label": "PreTransitProtocolCardList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "label": "PreTransitProtocolCardList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_api_d_ts", "label": "api.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/api.d.ts", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_types_api_d_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/api.d.ts", "source_location": "L801", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_sample_reception_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/sample-reception/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_router_core_menuprocessor_ts", "label": "MenuProcessor.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L1"}, {"id": "core_menuprocessor_menuprocessor", "label": "MenuProcessor", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L18"}, {"id": "core_menuprocessor_menuprocessor_normalizemenucode", "label": ".normalizeMenuCode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L23"}, {"id": "core_menuprocessor_menuprocessor_getmenulist", "label": ".getMenuList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L39"}, {"id": "core_menuprocessor_menuprocessor_processfrontendmenu", "label": ".processFrontendMenu()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L59"}, {"id": "core_menuprocessor_menuprocessor_processbackendmenu", "label": ".processBackendMenu()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L88"}, {"id": "core_menuprocessor_menuprocessor_filtermenubyroles", "label": ".filterMenuByRoles()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L96"}, {"id": "core_menuprocessor_menuprocessor_filtermenubycodes", "label": ".filterMenuByCodes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L116"}, {"id": "core_menuprocessor_menuprocessor_filteremptymenus", "label": ".filterEmptyMenus()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L142"}, {"id": "core_menuprocessor_menuprocessor_validatemenulist", "label": ".validateMenuList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L184"}, {"id": "core_menuprocessor_menuprocessor_normalizemenupaths", "label": ".normalizeMenuPaths()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L192"}, {"id": "core_menuprocessor_menuprocessor_resolvedefaultredirect", "label": ".resolveDefaultRedirect()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L216"}, {"id": "core_menuprocessor_menuprocessor_isnavigableroute", "label": ".isNavigableRoute()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L238"}, {"id": "core_menuprocessor_menuprocessor_validatemenupaths", "label": ".validateMenuPaths()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L258"}, {"id": "core_menuprocessor_menuprocessor_isvalidabsolutepath", "label": ".isValidAbsolutePath()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L284"}, {"id": "core_menuprocessor_menuprocessor_logpatherror", "label": ".logPathError()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L295"}, {"id": "core_menuprocessor_menuprocessor_buildfullpath", "label": ".buildFullPath()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L317"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_core_menuprocessor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_types_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_core_menuprocessor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_user", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/core/MenuProcessor.ts", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_core_menuprocessor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_hooks_core_useappmode", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00cLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_transport_form_section_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue", "source_location": "L1"}, {"id": "sample_transport_form_section_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue", "source_location": "L682"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_transport_form_section_index_vue", "target": "sample_transport_form_section_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-transport-form-section/index.vue", "source_location": "L682", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "label": "PreTransitProtocolCardList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L1"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_rowkey", "label": "rowKey()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L296"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_isexpanded", "label": "isExpanded()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L301"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_expandrow", "label": "expandRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L305"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_collapserow", "label": "collapseRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L310"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_statuslabel", "label": "statusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L316"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_statustagtype", "label": "statusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L323"}, {"id": "pre_transit_sample_pretransitprotocolcardlist_sourcetypetagtype", "label": "sourceTypeTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L330"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_rowkey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L296", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_isexpanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L301", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_expandrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L305", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_collapserow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L310", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_statuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L316", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "pre_transit_sample_pretransitprotocolcardlist_statustagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L323", "weight": 1.0}, {Line 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_router_guards_beforeeach_ts", "label": "beforeEach.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L1"}, {"id": "guards_beforeeach_getpendingloading", "label": "getPendingLoading()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L76"}, {"id": "guards_beforeeach_resetpendingloading", "label": "resetPendingLoading()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L83"}, {"id": "guards_beforeeach_getrouteinitfailed", "label": "getRouteInitFailed()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L90"}, {"id": "guards_beforeeach_resetrouteinitstate", "label": "resetRouteInitState()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L97"}, {"id": "guards_beforeeach_setupbeforeeachguard", "label": "setupBeforeEachGuard()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L105"}, {"id": "guards_beforeeach_closeloading", "label": "closeLoading()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L129"}, {"id": "guards_beforeeach_handlerouteguard", "label": "handleRouteGuard()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L141"}, {"id": "guards_beforeeach_handleloginstatus", "label": "handleLoginStatus()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L205"}, {"id": "guards_beforeeach_isstaticroute", "label": "isStaticRoute()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L233"}, {"id": "guards_beforeeach_handledynamicroutes", "label": "handleDynamicRoutes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L263"}, {"id": "guards_beforeeach_fetchuserinfo", "label": "fetchUserInfo()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L384"}, {"id": "guards_beforeeach_resetrouterstate", "label": "resetRouterState()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L409"}, {"id": "guards_beforeeach_handlerootpathredirect", "label": "handleRootPathRedirect()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L427"}, {"id": "guards_beforeeach_isunauthorizederror", "label": "isUnauthorizedError()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L444"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_guards_beforeeach_ts", "target": "vue_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L38", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_guards_beforeeach_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L39", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_guards_beforeeach_ts", "target": "nprogress", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L40", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_guards_beforeeach_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_setting", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L41", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_guards_beforeeach_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store_modules_user", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/guards/beforeEach.ts", "source_location": "L42", "weight": 1.0}, {"source": "users_wuzilong_work_00Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_pre_transit_sample_ts", "label": "pre-transit-sample.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L1"}, {"id": "api_pre_transit_sample_fetchpretransitintransitlist", "label": "fetchPreTransitInTransitList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L13"}, {"id": "api_pre_transit_sample_fetchpretransitpredeliverylist", "label": "fetchPreTransitPreDeliveryList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L27"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_pre_transit_sample_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/pre-transit-sample.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_pre_transit_sample_ts", "target": "api_pre_transit_sample_fetchpretransitintransitlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_pre_transit_sample_ts", "target": "api_pre_transit_sample_fetchpretransitpredeliverylist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L27", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_pre_transit_sample_fetchpretransitintransitlist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L21"}, {"caller_nid": "api_pre_transit_sample_fetchpretransitpredeliverylist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/pre-transit-sample.ts", "source_location": "L35"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "label": "PreTransitProtocolCardList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_router_modules_sqxp_ts", "label": "sqxp.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_modules_sqxp_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_types_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
Loaded 100 of 129 files, more files were not shown because too many files have changed in this diff. Show more