diff --git a/backend/scripts/reset_process_categories.py b/backend/scripts/reset_process_categories.py new file mode 100644 index 00000000..f909ffdd --- /dev/null +++ b/backend/scripts/reset_process_categories.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +"""重置工艺工序分类(biz_process_category):清空指定租户数据后插入 5 条初始数据。 + +用法(在 backend 目录): + source venv/bin/activate + python scripts/reset_process_categories.py + python scripts/reset_process_categories.py --tenant-no zkxw + +注意:biz_process / biz_process_route_step / biz_production_task_step 等表 +通过 category_id 引用本表,重置后上述关联 id 会失效(字段可空,不会阻断脚本)。 +""" +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +if str(ROOT) not in sys.path: + sys.path.insert(0, str(ROOT)) + +from sqlalchemy import text + +from app.core.database import SessionLocal, engine +from app.crud import process_category as process_category_svc + +ADMIN_ID = "d3000000000000000000000000000001" + +# (category_code, category_name, order_num, remark) +PROCESS_CATEGORIES = [ + ("PC-XBYP", "细胞培养", 1, "细胞扩增与培养相关工序"), + ("PC-YBJS", "样本接收", 2, "样本接收、登记与初检"), + ("PC-ZJJC", "质检检测", 3, "过程质控与放行检测"), + ("PC-DCGL", "冻存管理", 4, "冻存、复苏与出入库"), + ("PC-BZZF", "包装发运", 5, "成品包装与发运"), +] + + +def reset_process_categories(tenant_no: str = "zkxw", user_id: str = ADMIN_ID) -> None: + with engine.begin() as conn: + result = conn.execute( + text("DELETE FROM `biz_process_category` WHERE `tenant_no` = :tenant_no"), + {"tenant_no": tenant_no}, + ) + deleted = result.rowcount or 0 + + db = SessionLocal() + created = 0 + try: + for code, name, order_num, remark in PROCESS_CATEGORIES: + process_category_svc.create_process_category( + db, + category_code=code, + category_name=name, + tenant_no=tenant_no, + order_num=order_num, + remark=remark, + user_id=user_id, + ) + created += 1 + print( + f"工艺工序分类重置完成(租户 {tenant_no}):" + f"删除 {deleted} 条,新增 {created} 条。" + ) + for code, name, _, _ in PROCESS_CATEGORIES: + print(f" - {code} / {name}") + finally: + db.close() + + +def main() -> None: + parser = argparse.ArgumentParser(description="重置 biz_process_category 表数据") + parser.add_argument("--tenant-no", default="zkxw", help="租户编号,默认 zkxw") + parser.add_argument("--user-id", default=ADMIN_ID, help="create_by / update_by 用户 id") + args = parser.parse_args() + reset_process_categories(tenant_no=args.tenant_no, user_id=args.user_id) + + +if __name__ == "__main__": + main() diff --git a/backend/scripts/seed_processes.py b/backend/scripts/seed_processes.py new file mode 100644 index 00000000..c04d5fef --- /dev/null +++ b/backend/scripts/seed_processes.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python3 +"""批量初始化工艺库测试数据(biz_process),已存在工序代码则跳过。 + +用法(在 backend 目录): + source venv/bin/activate + python scripts/seed_processes.py + python scripts/seed_processes.py --tenant-no zkxw + +依赖:biz_process_category 中已有对应分类编码(可先运行 reset_process_categories.py)。 +""" +from __future__ import annotations + +import argparse +import sys +from pathlib import Path +from typing import Dict, Optional + +ROOT = Path(__file__).resolve().parents[1] +if str(ROOT) not in sys.path: + sys.path.insert(0, str(ROOT)) + +from app.core.database import SessionLocal +from app.crud import process as process_svc +from app.models.models import BizProcessCategory + +ADMIN_ID = "d3000000000000000000000000000001" + +# (process_code, process_name, category_code, description, equipment_name, estimated_duration_min, order_num, remark) +SAMPLE_PROCESSES = [ + ( + "PR-YBJS-001", + "样本接收登记", + "PC-YBJS", + "核对样本信息、登记条码并分配接收批次", + "样本接收台", + "30", + 1, + "样本接收首道工序", + ), + ( + "PR-YBJS-002", + "样本初检", + "PC-YBJS", + "外观检查、温度记录及初筛不合格样本隔离", + "生物安全柜", + "45", + 2, + None, + ), + ( + "PR-XBYP-001", + "外周血分离", + "PC-XBYP", + "密度梯度离心分离单个核细胞", + "台式离心机", + "60", + 3, + None, + ), + ( + "PR-XBYP-002", + "细胞培养扩增", + "PC-XBYP", + "接种至培养体系并进行扩增培养", + "CO2培养箱", + "480", + 4, + "长周期工序", + ), + ( + "PR-XBYP-003", + "换液传代", + "PC-XBYP", + "更换培养基并按密度传代", + "生物安全柜", + "90", + 5, + None, + ), + ( + "PR-ZJJC-001", + "细胞活性检测", + "PC-ZJJC", + "台盼蓝染色法检测细胞活率", + "倒置显微镜", + "30", + 6, + None, + ), + ( + "PR-ZJJC-002", + "支原体检测", + "PC-ZJJC", + "PCR法检测支原体污染", + "PCR仪", + "180", + 7, + None, + ), + ( + "PR-DCGL-001", + "程序降温冻存", + "PC-DCGL", + "按程序降温曲线完成细胞冻存", + "程序降温仪", + "150", + 8, + None, + ), + ( + "PR-DCGL-002", + "冻存管入库", + "PC-DCGL", + "扫码登记并转入液氮罐指定位置", + "扫码枪", + "20", + 9, + None, + ), + ( + "PR-BZZF-001", + "成品包装发运", + "PC-BZZF", + "成品核对、冷链包装及发运交接", + "包装台", + "45", + 10, + "末道工序", + ), +] + + +def _load_category_map(db, tenant_no: str) -> Dict[str, str]: + rows = ( + db.query(BizProcessCategory) + .filter(BizProcessCategory.tenant_no == tenant_no, BizProcessCategory.del_flag == 0) + .all() + ) + return {row.category_code: row.id for row in rows} + + +def seed(tenant_no: str = "zkxw", user_id: str = ADMIN_ID) -> None: + db = SessionLocal() + created = 0 + skipped = 0 + missing_categories: set[str] = set() + try: + category_map = _load_category_map(db, tenant_no) + for ( + code, + name, + category_code, + description, + equipment_name, + estimated_duration, + order_num, + remark, + ) in SAMPLE_PROCESSES: + if process_svc.process_code_exists(db, code, tenant_no): + skipped += 1 + continue + category_id: Optional[str] = category_map.get(category_code) + if category_code and not category_id: + missing_categories.add(category_code) + process_svc.create_process( + db, + process_code=code, + process_name=name, + category_id=category_id, + description=description, + equipment_name=equipment_name, + estimated_duration=estimated_duration, + tenant_no=tenant_no, + order_num=order_num, + remark=remark, + user_id=user_id, + ) + created += 1 + print( + f"工艺库测试数据初始化完成(租户 {tenant_no}):" + f"新增 {created} 条,跳过 {skipped} 条(工序代码已存在)。" + ) + if missing_categories: + print( + "以下工序分类编码未找到,对应工艺已写入但 category_id 为空:" + f" {', '.join(sorted(missing_categories))}" + ) + print("可先执行:python scripts/reset_process_categories.py") + finally: + db.close() + + +def main() -> None: + parser = argparse.ArgumentParser(description="初始化 biz_process 测试数据") + parser.add_argument("--tenant-no", default="zkxw", help="租户编号,默认 zkxw") + parser.add_argument("--user-id", default=ADMIN_ID, help="create_by / update_by 用户 id") + args = parser.parse_args() + seed(tenant_no=args.tenant_no, user_id=args.user_id) + + +if __name__ == "__main__": + main() diff --git a/docs/my-material-usage-tab-demos/01-current-baseline.html b/docs/my-material-usage-tab-demos/01-current-baseline.html new file mode 100644 index 00000000..64f73e94 --- /dev/null +++ b/docs/my-material-usage-tab-demos/01-current-baseline.html @@ -0,0 +1,54 @@ + + + + + + 01 现状基线 · 我的物料领用记录 Tab Demo + + + + + +
+
+

01 现状基线 我的物料领用记录 · Tab 样式 Demo

+

居中胶囊 Tab,与当前 panel-pill-tabs 线上一致 · 点击下方 Tab 可切换

+
+
+ ← 选型索引 + 02 全宽滑轨 → +
+
+ +
+
+

我的物料领用记录

+
+ +
+
+
+

+ 问题:居中放置、字号偏小、灰底与白底对比弱,首次进入容易被忽略。 +

+
✓ 与全站 panel-pill-tabs 风格统一
+
✗ 双 Tab 场景下辨识度不足,用户不易发现可点击
+
+

+
+ + + + + diff --git a/docs/my-material-usage-tab-demos/02-full-width-track.html b/docs/my-material-usage-tab-demos/02-full-width-track.html new file mode 100644 index 00000000..da6d1ef8 --- /dev/null +++ b/docs/my-material-usage-tab-demos/02-full-width-track.html @@ -0,0 +1,58 @@ + + + + + + 02 全宽双轨滑块 · 我的物料领用记录 Tab Demo + + + + + +
+
+

02 全宽双轨滑块 我的物料领用记录 · Tab 样式 Demo

+

50/50 等分全宽轨道,白色滑块随 Tab 平滑移动 · 点击区域最大

+
+
+ ← 选型索引 + 01 基线 + 03 图标卡片 → +
+
+ +
+
+

我的物料领用记录

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

+ 强烈推荐:双 Tab 场景下全宽等分最协调,滑块动画提供明确的「选中」反馈,用户一眼就能看出这是可切换的控制器。 +

+
✓ 点击区域大、视觉权重高、动画反馈好
+
✗ 占用约 48px 纵向空间,与三 Tab 以上场景需调整 grid
+
+

+
+ + + + + diff --git a/docs/my-material-usage-tab-demos/03-icon-cards.html b/docs/my-material-usage-tab-demos/03-icon-cards.html new file mode 100644 index 00000000..ffa44abb --- /dev/null +++ b/docs/my-material-usage-tab-demos/03-icon-cards.html @@ -0,0 +1,68 @@ + + + + + + 03 图标信息卡片 · 我的物料领用记录 Tab Demo + + + + + +
+
+

03 图标信息卡片 我的物料领用记录 · Tab 样式 Demo

+

图标 + 标题 + 副标题说明,双列大卡片 · 业务含义一目了然

+
+
+ ← 选型索引 + 02 全宽滑轨 +
+
+ +
+
+

我的物料领用记录

+
+ +
+
+
+

+ 推荐:副标题帮助用户理解两个 Tab 的区别,图标增强模块识别度。落地时图标可用 Element Plus Icons(如 Document / DataLine)。 +

+
✓ 信息量大、可发现性最强、适合业务含义不易区分的场景
+
✗ 占用约 72px 纵向空间,横向在小屏需考虑换行
+
+

+
+ + + + + diff --git a/docs/my-material-usage-tab-demos/04-left-underline.html b/docs/my-material-usage-tab-demos/04-left-underline.html new file mode 100644 index 00000000..e91ea8dd --- /dev/null +++ b/docs/my-material-usage-tab-demos/04-left-underline.html @@ -0,0 +1,51 @@ + + + + + + 04 左对齐下划线 · 我的物料领用记录 Tab Demo + + + + + +
+
+

04 左对齐下划线 我的物料领用记录 · Tab 样式 Demo

+

加大字号 + 左对齐 + 绿色底边指示 · 经典 Tab 模式

+
+
+ ← 选型索引 +
+
+ +
+
+

我的物料领用记录

+
+ +
+
+
+

+ 经典方案:左对齐 + 15px 字号 + 3px 绿色底边,符合用户对 Tab 的认知习惯。改动适中,可与 Element Plus 默认 tabs 风格接近。 +

+
✓ 用户认知成本低、实现简单、纵向占用适中
+
✗ 相比全宽滑轨/图标卡片,视觉冲击力略弱
+
+

+
+ + + + + diff --git a/docs/my-material-usage-tab-demos/05-inline-header.html b/docs/my-material-usage-tab-demos/05-inline-header.html new file mode 100644 index 00000000..5e57c780 --- /dev/null +++ b/docs/my-material-usage-tab-demos/05-inline-header.html @@ -0,0 +1,52 @@ + + + + + + 05 标题行内嵌 Tab · 我的物料领用记录 Tab Demo + + + + + +
+
+

05 标题行内嵌 Tab 我的物料领用记录 · Tab 样式 Demo

+

Tab 放在标题右侧同一行 · 节省纵向空间

+
+
+ ← 选型索引 +
+
+ +
+
+
+

我的物料领用记录

+ +
+
+
+

+ 紧凑方案:Tab 与标题同行,形成「页面名 + 视图切换」的组合,减少 Tab 被筛选区「淹没」的风险。 +

+
✓ 不额外占用纵向空间、Tab 与标题关联紧密
+
✗ 窄屏下可能换行;标题较长时右侧空间紧张
+
+

+
+ + + + + diff --git a/docs/my-material-usage-tab-demos/06-pill-with-hint.html b/docs/my-material-usage-tab-demos/06-pill-with-hint.html new file mode 100644 index 00000000..55add52f --- /dev/null +++ b/docs/my-material-usage-tab-demos/06-pill-with-hint.html @@ -0,0 +1,58 @@ + + + + + + 06 左对齐胶囊 + 引导提示 · 我的物料领用记录 Tab Demo + + + + + +
+
+

06 左对齐胶囊 + 引导 我的物料领用记录 · Tab 样式 Demo

+

保留胶囊风格但左对齐加大,上方加引导文案 · 渐进改良方案

+
+
+ ← 选型索引 + 01 基线对比 +
+
+ +
+
+

我的物料领用记录

+
+
+
+ + 点击下方切换查看不同记录类型 +
+ +
+
+
+
+

+ 渐进改良:在现有胶囊风格基础上左对齐、加大按钮尺寸,并增加一行引导提示。改动最小,适合不想大改布局的场景。 +

+
✓ 改动量小、与全站胶囊风格兼容、引导文案降低学习成本
+
✗ 引导文案可能显得冗余(用户熟悉后可考虑隐藏)
+
+

+
+ + + + + diff --git a/docs/my-material-usage-tab-demos/07-bar-accent.html b/docs/my-material-usage-tab-demos/07-bar-accent.html new file mode 100644 index 00000000..6e01cbcd --- /dev/null +++ b/docs/my-material-usage-tab-demos/07-bar-accent.html @@ -0,0 +1,52 @@ + + + + + + 07 竖条强调 · 我的物料领用记录 Tab Demo + + + + + +
+
+

07 竖条强调 我的物料领用记录 · Tab 样式 Demo

+

激活 Tab 左侧主色竖条 + 浅绿渐变底 · 与标题竖条视觉统一

+
+
+ ← 选型索引 + 04 下划线 +
+
+ +
+
+

我的物料领用记录

+
+ +
+
+
+

+ 推荐:与 Fresh Mint「标题前竖条」同一视觉语言,品牌感连贯;左对齐 + 浅绿底让激活态更醒目。 +

+
✓ 与全站标题竖条统一、左对齐辨识度高、适合作为 panel-tabs 升级方向
+
✗ 需新增 CSS class,与现有 panel-pill-tabs 结构不同
+
+

+
+ + + + + diff --git a/docs/my-material-usage-tab-demos/_demo-shell.js b/docs/my-material-usage-tab-demos/_demo-shell.js new file mode 100644 index 00000000..f0fa11b8 --- /dev/null +++ b/docs/my-material-usage-tab-demos/_demo-shell.js @@ -0,0 +1,123 @@ +/** 我的物料领用记录 · 双 Tab Demo 通用交互 */ +function initPanelTabs(rootId) { + const root = document.getElementById(rootId) + if (!root) return + + const tabBtns = root.querySelectorAll('[data-tab]') + const panels = root.querySelectorAll('[data-panel]') + const track = root.querySelector('.tabs-02') + const singleContent = root.querySelector('#content') + + function activate(name, index) { + tabBtns.forEach((btn) => { + btn.classList.toggle('is-active', btn.dataset.tab === name) + }) + panels.forEach((panel) => { + panel.classList.toggle('is-active', panel.dataset.panel === name) + }) + if (track) { + track.dataset.active = String(index) + } + if (singleContent && typeof mockContent === 'function') { + singleContent.innerHTML = mockContent(name) + } + } + + tabBtns.forEach((btn, index) => { + btn.addEventListener('click', () => activate(btn.dataset.tab, index)) + }) +} + +function mockContent(tabName) { + if (tabName === 'consumption') { + return ` +
+
+
+
+ +
物料编码/名称/批次号
+
+
+ +
全部
+
+
+ +
开始日期 至 结束日期
+
+
+
+ 查看配制消耗的子物料明细,关联配制单可跳转查看。 +
+ + +
+
+
+
+
+
+ 序号物料编码物料名称消耗数量配制单号消耗时间 +
+
+ 1WL-001DMEM培养基2 瓶PZ-20260610-0032026-06-10 14:30 +
+
+ 2WL-012胎牛血清0.5 瓶PZ-20260609-0012026-06-09 09:15 +
+
+
+
+ ` + } + + return ` +
+
+
+
+ +
物料编码/名称/入库编号/批号/货号
+
+
+ +
输入物料名称检索
+
+
+ +
全部
+
+
+ +
全部
+
+
+ +
开始日期 至 结束日期
+
+
+
+ 查看本人物料领用记录,可按物料、批号、类型与时间范围筛选。 +
+ + +
+
+
+
+
+
+ 序号物料编码物料名称变动类型数量领用时间 +
+
+ 1WL-001DMEM培养基出库5 瓶2026-06-08 10:20 +
+
+ 2WL-012胎牛血清任务使用1 瓶2026-06-07 16:45 +
+
+
+
+ ` +} diff --git a/docs/my-material-usage-tab-demos/_shared.css b/docs/my-material-usage-tab-demos/_shared.css new file mode 100644 index 00000000..243498d1 --- /dev/null +++ b/docs/my-material-usage-tab-demos/_shared.css @@ -0,0 +1,726 @@ +/* 我的物料领用记录 · 双 Tab 样式 Demo 共享样式(Fresh Mint Token) */ +:root { + --primary: #10b981; + --primary-dark: #059669; + --primary-bg: #ecfdf5; + --text: #1e293b; + --text-muted: #64748b; + --border: #e2e8f0; + --bg-page: #f8fafc; + --surface: #fff; + --radius: 10px; + --radius-sm: 8px; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + min-height: 100vh; + font-family: Inter, -apple-system, BlinkMacSystemFont, sans-serif; + font-size: 14px; + line-height: 1.5; + color: var(--text); + background: var(--bg-page); +} + +/* ── 顶栏说明 ── */ +.demo-banner { + position: sticky; + top: 0; + z-index: 200; + padding: 12px 24px; + background: var(--surface); + border-bottom: 1px solid var(--border); + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + flex-wrap: wrap; + box-shadow: 0 1px 3px rgba(15, 23, 42, 0.04); +} + +.demo-banner h1 { + margin: 0; + font-size: 15px; + font-weight: 600; +} + +.demo-banner p { + margin: 4px 0 0; + font-size: 12px; + color: var(--text-muted); +} + +.demo-banner__actions { + display: flex; + gap: 8px; + flex-wrap: wrap; + align-items: center; +} + +.demo-banner a { + padding: 6px 12px; + border-radius: 6px; + font-size: 12px; + font-weight: 500; + text-decoration: none; + color: var(--text-muted); + border: 1px solid var(--border); + background: var(--surface); +} + +.demo-banner a:hover { + border-color: var(--primary); + color: var(--primary-dark); +} + +.demo-banner a.is-current { + background: var(--primary-bg); + border-color: var(--primary); + color: var(--primary-dark); +} + +.demo-badge { + display: inline-block; + padding: 2px 8px; + border-radius: 6px; + font-size: 11px; + font-weight: 600; + background: var(--primary-bg); + color: var(--primary-dark); +} + +/* ── 页面骨架 ── */ +.page-wrap { + padding: 24px; + max-width: 1280px; + margin: 0 auto; +} + +.panel { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius); + overflow: hidden; +} + +.panel-top { + padding: 16px 24px 0; +} + +.panel-top h2 { + margin: 0; + font-size: 16px; + font-weight: 600; + display: flex; + align-items: center; + gap: 10px; +} + +.panel-top h2::before { + content: ''; + width: 4px; + height: 16px; + border-radius: 2px; + background: var(--primary); + flex-shrink: 0; +} + +.panel-tab-zone { + padding: 0 24px; +} + +.mock-content { + border-top: 1px solid var(--border); +} + +.filter-block { + padding: 16px 24px; +} + +.filter-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 12px 16px; +} + +.filter-item label { + display: block; + font-size: 11px; + font-weight: 500; + color: var(--text-muted); + margin-bottom: 6px; +} + +.filter-item .fake-input { + height: 36px; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + padding: 0 12px; + background: var(--surface); + color: var(--text-muted); + font-size: 13px; + display: flex; + align-items: center; +} + +.filter-actions-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + margin-top: 12px; + flex-wrap: wrap; +} + +.filter-hint { + font-size: 12px; + color: var(--text-muted); +} + +.filter-actions-end { + display: flex; + gap: 8px; +} + +.list-body { + padding: 0 24px 24px; +} + +.fake-table { + border: 1px solid var(--border); + border-radius: var(--radius-sm); + overflow: hidden; +} + +.fake-table-head, +.fake-table-row { + display: grid; + gap: 8px; + padding: 10px 16px; + font-size: 13px; + align-items: center; +} + +.fake-table-head { + background: #f1f5f9; + font-weight: 600; + color: var(--text-muted); + font-size: 12px; +} + +.fake-table-row { + border-top: 1px solid var(--border); + color: var(--text); +} + +.fake-table-row:nth-child(even) { + background: #fafafa; +} + +.tab-panel { + display: none; +} + +.tab-panel.is-active { + display: block; +} + +.style-note { + margin: 24px 0 0; + padding: 14px 18px; + background: #fffbeb; + border: 1px solid #fde68a; + border-radius: var(--radius-sm); + font-size: 13px; + color: #92400e; +} + +.style-note strong { + color: #78350f; +} + +.pros-cons { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + margin-top: 12px; +} + +.pros-cons div { + padding: 10px 12px; + border-radius: var(--radius-sm); + font-size: 12px; + line-height: 1.5; +} + +.pros-cons .pro { + background: var(--primary-bg); + color: var(--primary-dark); +} + +.pros-cons .con { + background: #f8fafc; + color: var(--text-muted); +} + +/* ══════════════════════════════════════════ + 01 · 现状基线(居中胶囊,与线上一致) + ══════════════════════════════════════════ */ +.tabs-01 { + display: flex; + justify-content: center; + margin: 12px 0 4px; +} + +.tabs-01__track { + display: inline-flex; + gap: 4px; + padding: 4px; + background: #f1f5f9; + border: 1px solid var(--border); + border-radius: 8px; +} + +.tabs-01 .tab-btn { + min-width: 108px; + padding: 8px 20px; + border: none; + border-radius: 6px; + background: transparent; + font-size: 13px; + font-weight: 500; + color: var(--text-muted); + cursor: pointer; + transition: background 0.15s, color 0.15s, box-shadow 0.15s; +} + +.tabs-01 .tab-btn:hover:not(.is-active) { + color: var(--text); + background: rgba(255, 255, 255, 0.6); +} + +.tabs-01 .tab-btn.is-active { + background: #fff; + color: var(--primary-dark); + box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08); + font-weight: 600; +} + +/* ══════════════════════════════════════════ + 02 · 全宽双轨滑块(50/50 等分) + ══════════════════════════════════════════ */ +.tabs-02 { + margin: 16px 0 8px; +} + +.tabs-02-inner { + position: relative; +} + +.tabs-02-track { + display: grid; + grid-template-columns: 1fr 1fr; + background: #f1f5f9; + border-radius: var(--radius-sm); + padding: 4px; + border: 1px solid var(--border); +} + +.tabs-02 .tab-btn { + padding: 12px 16px; + border: none; + border-radius: 6px; + background: transparent; + font-size: 14px; + font-weight: 500; + color: var(--text-muted); + cursor: pointer; + text-align: center; + z-index: 1; + transition: color 0.2s; +} + +.tabs-02 .tab-btn.is-active { + color: var(--primary-dark); + font-weight: 600; +} + +.tabs-02-slider { + position: absolute; + top: 4px; + left: 4px; + width: calc((100% - 8px) / 2); + height: calc(100% - 8px); + background: var(--surface); + border-radius: 6px; + box-shadow: 0 1px 4px rgba(15, 23, 42, 0.1); + transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); + pointer-events: none; +} + +.tabs-02[data-active='1'] .tabs-02-slider { + transform: translateX(100%); +} + +/* ══════════════════════════════════════════ + 03 · 图标信息卡片(双列大按钮) + ══════════════════════════════════════════ */ +.tabs-03 { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + margin: 16px 0 8px; +} + +.tabs-03 .tab-btn { + display: flex; + align-items: center; + gap: 14px; + padding: 14px 18px; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--surface); + font-size: 14px; + font-weight: 500; + color: var(--text-muted); + cursor: pointer; + text-align: left; + transition: border-color 0.15s, background 0.15s, color 0.15s, box-shadow 0.15s; +} + +.tabs-03 .tab-icon { + width: 40px; + height: 40px; + border-radius: 10px; + background: #f1f5f9; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + color: var(--text-muted); + transition: background 0.15s, color 0.15s; +} + +.tabs-03 .tab-text { + display: flex; + flex-direction: column; + gap: 2px; +} + +.tabs-03 .tab-title { + font-weight: 600; + font-size: 14px; +} + +.tabs-03 .tab-desc { + font-size: 12px; + font-weight: 400; + color: var(--text-muted); +} + +.tabs-03 .tab-btn:hover:not(.is-active) { + border-color: #a7f3d0; + background: #f8fafc; +} + +.tabs-03 .tab-btn.is-active { + border-color: var(--primary); + background: var(--primary-bg); + color: var(--primary-dark); + box-shadow: 0 2px 8px rgba(16, 185, 129, 0.12); +} + +.tabs-03 .tab-btn.is-active .tab-icon { + background: var(--primary); + color: #fff; +} + +.tabs-03 .tab-btn.is-active .tab-desc { + color: var(--primary-dark); + opacity: 0.85; +} + +/* ══════════════════════════════════════════ + 04 · 左对齐下划线(加大字号) + ══════════════════════════════════════════ */ +.tabs-04 { + display: flex; + gap: 0; + margin: 12px 0 0; + border-bottom: 2px solid var(--border); +} + +.tabs-04 .tab-btn { + padding: 14px 28px; + margin-bottom: -2px; + border: none; + background: transparent; + font-size: 15px; + font-weight: 500; + color: var(--text-muted); + cursor: pointer; + border-bottom: 3px solid transparent; + transition: color 0.15s, border-color 0.15s; +} + +.tabs-04 .tab-btn:hover:not(.is-active) { + color: var(--text); + background: #f8fafc; +} + +.tabs-04 .tab-btn.is-active { + color: var(--primary-dark); + font-weight: 600; + border-bottom-color: var(--primary); +} + +/* ══════════════════════════════════════════ + 05 · 标题行内嵌 Tab(标题右侧) + ══════════════════════════════════════════ */ +.panel-top--inline { + display: flex; + align-items: center; + justify-content: space-between; + gap: 24px; + padding-bottom: 16px; + border-bottom: 1px solid var(--border); + flex-wrap: wrap; +} + +.tabs-05 { + display: inline-flex; + gap: 4px; + padding: 4px; + background: #f1f5f9; + border: 1px solid var(--border); + border-radius: 8px; + flex-shrink: 0; +} + +.tabs-05 .tab-btn { + min-width: 96px; + padding: 8px 18px; + border: none; + border-radius: 6px; + background: transparent; + font-size: 13px; + font-weight: 500; + color: var(--text-muted); + cursor: pointer; + transition: background 0.15s, color 0.15s, box-shadow 0.15s; +} + +.tabs-05 .tab-btn.is-active { + background: #fff; + color: var(--primary-dark); + box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08); + font-weight: 600; +} + +/* ══════════════════════════════════════════ + 06 · 左对齐胶囊 + 引导提示 + ══════════════════════════════════════════ */ +.tab-zone-06 { + margin: 12px 0 4px; +} + +.tab-zone-06__hint { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 10px; + font-size: 12px; + color: var(--text-muted); +} + +.tab-zone-06__hint svg { + flex-shrink: 0; + color: var(--primary); +} + +.tabs-06 { + display: inline-flex; + gap: 4px; + padding: 5px; + background: #f1f5f9; + border: 1px solid var(--border); + border-radius: 10px; +} + +.tabs-06 .tab-btn { + min-width: 140px; + padding: 10px 24px; + border: none; + border-radius: 8px; + background: transparent; + font-size: 14px; + font-weight: 500; + color: var(--text-muted); + cursor: pointer; + transition: background 0.15s, color 0.15s, box-shadow 0.15s; +} + +.tabs-06 .tab-btn:hover:not(.is-active) { + color: var(--text); + background: rgba(255, 255, 255, 0.7); +} + +.tabs-06 .tab-btn.is-active { + background: #fff; + color: var(--primary-dark); + box-shadow: 0 2px 6px rgba(15, 23, 42, 0.1); + font-weight: 600; +} + +/* ══════════════════════════════════════════ + 07 · 竖条强调 + 浅绿底(与标题竖条统一) + ══════════════════════════════════════════ */ +.tabs-07 { + display: flex; + gap: 0; + margin: 12px 0 0; + border-bottom: 1px solid var(--border); +} + +.tabs-07 .tab-btn { + padding: 14px 28px; + border: none; + background: transparent; + font-size: 14px; + font-weight: 500; + color: var(--text-muted); + cursor: pointer; + position: relative; + transition: color 0.15s, background 0.15s; +} + +.tabs-07 .tab-btn::before { + content: ''; + position: absolute; + left: 16px; + top: 50%; + transform: translateY(-50%); + width: 3px; + height: 0; + border-radius: 2px; + background: var(--primary); + transition: height 0.15s; +} + +.tabs-07 .tab-btn.is-active::before { + height: 18px; +} + +.tabs-07 .tab-btn:hover:not(.is-active) { + color: var(--text); + background: #f8fafc; +} + +.tabs-07 .tab-btn.is-active { + color: var(--primary-dark); + font-weight: 600; + background: linear-gradient(180deg, var(--primary-bg) 0%, transparent 100%); +} + +/* ── 索引页 ── */ +.index-hero { + max-width: 960px; + margin: 0 auto; + padding: 32px 24px 16px; +} + +.index-hero h1 { + margin: 0 0 8px; + font-size: 22px; +} + +.index-hero p { + margin: 0; + color: var(--text-muted); + max-width: 720px; + line-height: 1.6; +} + +.index-problem { + margin-top: 16px; + padding: 12px 16px; + background: #fef2f2; + border: 1px solid #fecaca; + border-radius: var(--radius-sm); + font-size: 13px; + color: #991b1b; + max-width: 720px; +} + +.index-grid { + max-width: 960px; + margin: 0 auto; + padding: 16px 24px 48px; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 16px; +} + +.index-card { + background: var(--surface); + border: 1px solid var(--border); + border-radius: 12px; + padding: 18px; + text-decoration: none; + color: inherit; + transition: border-color 0.2s, box-shadow 0.2s; +} + +.index-card:hover { + border-color: #a7f3d0; + box-shadow: 0 4px 12px rgba(16, 185, 129, 0.08); +} + +.index-card h2 { + margin: 0 0 6px; + font-size: 15px; + font-weight: 600; + color: var(--primary-dark); +} + +.index-card p { + margin: 0; + font-size: 13px; + color: var(--text-muted); + line-height: 1.5; +} + +.index-card .tag { + display: inline-block; + margin-top: 12px; + padding: 2px 8px; + border-radius: 6px; + font-size: 11px; + font-weight: 600; + background: #f1f5f9; + color: var(--text-muted); +} + +.index-card .tag--rec { + background: var(--primary-bg); + color: var(--primary-dark); +} + +.index-card .tag--baseline { + background: #fef3c7; + color: #92400e; +} + +.preview-strip { + margin-top: 14px; + padding: 10px; + background: #f8fafc; + border-radius: 8px; + border: 1px solid var(--border); + font-size: 12px; + color: var(--text-muted); +} diff --git a/docs/my-material-usage-tab-demos/index.html b/docs/my-material-usage-tab-demos/index.html new file mode 100644 index 00000000..088d8c2b --- /dev/null +++ b/docs/my-material-usage-tab-demos/index.html @@ -0,0 +1,77 @@ + + + + + + 我的物料领用记录 · 双 Tab 样式选型 + + + + +
+

我的物料领用记录 · 双 Tab 样式 Demo

+

+ 针对【生产管理 → 我的物料领用记录】页面中【领用记录】【消耗明细】两个 Tab + 不够醒目、首次进入不易发现可点击的问题,提供 7 套可选样式。色值对齐 Fresh Mint(#10b981)。 +

+
+ 现状问题:当前使用居中胶囊 Tab(panel-pill-tabs),字号 13px、灰底轨道, + 夹在标题与筛选区之间视觉权重低,用户容易把它当成静态标签而非可切换的视图。 +
+
+ +
+ +

01 · 现状基线

+

与线上一致的居中胶囊 Tab,作为对比参照。

+ 当前线上 +
   [ 领用记录 | 消耗明细 ]
+
+ + +

02 · 全宽双轨滑块

+

50/50 等分全宽轨道,白色滑块平滑移动。点击区域最大,辨识度最高。

+ 强烈推荐 +
┌────────领用记录────────┬────────消耗明细────────┐
+
+ + +

03 · 图标信息卡片

+

图标 + 标题 + 副标题说明,双列大卡片。业务含义一目了然。

+ 推荐 +
[📋 领用记录] [📊 消耗明细]
+
+ + +

04 · 左对齐下划线

+

加大字号(15px)+ 左对齐 + 绿色底边指示。经典 Tab 模式,改动适中。

+ 经典 +
领用记录 消耗明细 ———
+
+ + +

05 · 标题行内嵌 Tab

+

Tab 放在标题右侧同一行,节省纵向空间,与标题形成视觉组合。

+ 紧凑 +
| 我的物料领用记录    [ 领用记录 | 消耗明细 ]
+
+ + +

06 · 左对齐胶囊 + 引导提示

+

保留胶囊风格但左对齐、加大尺寸,上方加一行「切换视图」引导文案。

+ 渐进改良 +
↕ 点击下方切换查看不同记录 [ 领用记录 | 消耗明细 ]
+
+ + +

07 · 竖条强调 + 浅绿底

+

激活 Tab 左侧主色竖条 + 浅绿渐变底,与列表标题竖条视觉统一。

+ 推荐 +
|领用记录 消耗明细
+
+
+ + diff --git a/web-admin/graphify-out/.graphify_extract.json b/web-admin/graphify-out/.graphify_extract.json index b5a1aab0..d973a17e 100644 --- a/web-admin/graphify-out/.graphify_extract.json +++ b/web-admin/graphify-out/.graphify_extract.json @@ -12990,21 +12990,21 @@ "label": "if()", "file_type": "code", "source_file": "views/production/process/ProcessRouteTab.vue", - "source_location": "L1471" + "source_location": "L1473" }, { "id": "process_processroutetab_get", "label": "get()", "file_type": "code", "source_file": "views/production/process/ProcessRouteTab.vue", - "source_location": "L1680" + "source_location": "L1682" }, { "id": "process_processroutetab_set", "label": "set()", "file_type": "code", "source_file": "views/production/process/ProcessRouteTab.vue", - "source_location": "L1690" + "source_location": "L1692" }, { "id": "views_production_process_category_index_vue", @@ -38471,7 +38471,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "views/production/process/ProcessRouteTab.vue", - "source_location": "L1471", + "source_location": "L1473", "weight": 1.0 }, { @@ -38480,7 +38480,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "views/production/process/ProcessRouteTab.vue", - "source_location": "L1591", + "source_location": "L1593", "weight": 1.0 }, { @@ -38489,7 +38489,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "views/production/process/ProcessRouteTab.vue", - "source_location": "L1680", + "source_location": "L1682", "weight": 1.0 }, { @@ -38498,7 +38498,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "views/production/process/ProcessRouteTab.vue", - "source_location": "L1690", + "source_location": "L1692", "weight": 1.0 }, { diff --git a/web-admin/graphify-out/GRAPH_REPORT.md b/web-admin/graphify-out/GRAPH_REPORT.md index 66c56a97..7d966935 100644 --- a/web-admin/graphify-out/GRAPH_REPORT.md +++ b/web-admin/graphify-out/GRAPH_REPORT.md @@ -1,7 +1,7 @@ # Graph Report - src (2026-06-15) ## Corpus Check -- Large corpus: 729 files · ~509,555 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only. +- Large corpus: 729 files · ~509,887 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only. ## Summary - 2373 nodes · 3234 edges · 50 communities detected diff --git a/web-admin/graphify-out/manifest.json b/web-admin/graphify-out/manifest.json index 1fd3d597..a6d2cdf9 100644 --- a/web-admin/graphify-out/manifest.json +++ b/web-admin/graphify-out/manifest.json @@ -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": 1781511787.87359, - "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1781510903.3424032, + "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1781517220.3789933, + "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1781513914.3254542, "/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, @@ -228,7 +228,7 @@ "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts": 1781337826.360091, "/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": 1781503317.6165462, + "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts": 1781517319.838243, "/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": 1781272556.6603115, "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/chinaRegion.ts": 1781272556.6606348, @@ -323,7 +323,7 @@ "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/dept/index.vue": 1781272556.7969062, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/dict/index.vue": 1781272556.7987096, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/system/leave/index.vue": 1781272556.7999136, - "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/output-type/index.vue": 1781272556.800664, + "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/output-type/index.vue": 1781515464.8433418, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/index.vue": 1781435058.7246752, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/SourceChainGraph.vue": 1781272556.804776, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/source-chain/ChainLinkEdge.vue": 1781272556.8054333, @@ -333,7 +333,7 @@ "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/source-chain/ChainNodeCard.vue": 1781272556.8073688, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/source-chain/SampleCustomerViewDialog.vue": 1781272556.8079684, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/cell-product/source-chain/chainToFlow.ts": 1781272556.808583, - "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/my-production-material-usage/index.vue": 1781502903.1109588, + "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/my-production-material-usage/index.vue": 1781517868.2039423, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-route/index.vue": 1781272556.8092766, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/sop/index.vue": 1781272556.8117788, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-task/index.vue": 1781272556.812188, @@ -345,7 +345,7 @@ "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskInputEnhancedTable.vue": 1781272556.8264909, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue": 1781272556.8274932, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderViewDialogHost.vue": 1781447171.0946243, - "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue": 1781496401.5875661, + "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue": 1781515183.5041866, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskExecutionDialog.vue": 1781435123.291646, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useProductionWorkOrderViewDialog.ts": 1781447123.1291173, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/EditTaskInfoDialog.vue": 1781272556.829831, @@ -368,10 +368,10 @@ "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/sample-reception-completion/index.vue": 1781272556.844081, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/my-production-task/index.vue": 1781496526.058609, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/equipment/index.vue": 1781333185.7518337, - "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/index.vue": 1781428200.5972042, - "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue": 1781434724.8148994, - "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/index.vue": 1781428200.6930432, - "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/OutputTypeTab.vue": 1781272556.8543935, + "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/index.vue": 1781516298.8619206, + "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue": 1781516299.031787, + "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/index.vue": 1781515447.833402, + "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/OutputTypeTab.vue": 1781515476.20538, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/index/index.vue": 1781272556.8548205, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue": 1781428530.1744778, "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSingleCard.vue": 1781444865.1974108, diff --git a/web-admin/src/App.vue b/web-admin/src/App.vue index 7ddb42d2..35a183fc 100644 --- a/web-admin/src/App.vue +++ b/web-admin/src/App.vue @@ -80,12 +80,15 @@ [/(接收|检查项|样本|编码)/, 'auto-title-file'], [/(审核|记录)/, 'auto-title-file'], [/(客户|公司|机构|医院)/, 'auto-title-user'], + [/(洁净服)/, 'auto-title-garment'], [/(采集|地区|洁净|库位)/, 'auto-title-location'], [/(预约)/, 'auto-title-operation'], [/(工单)/, 'auto-title-receipt'], [/(流程|待办|已办|申请|请假|执行|计划)/, 'auto-title-operation'], - [/(耗材|试剂|设备)/, 'auto-title-box'], + [/(耗材|试剂|设备|物料库)/, 'auto-title-box'], [/(路线)/, 'auto-title-route'], + [/(工艺库)/, 'auto-title-process'], + [/(工艺基础)/, 'auto-title-category'], [/(工艺)/, 'auto-title-settings'], [/(规格|价格|体系|渠道|项目)/, 'auto-title-category'], [/(类型)/, 'auto-title-category'], diff --git a/web-admin/src/api/material-usage.ts b/web-admin/src/api/material-usage.ts index 70ffcdf9..771a9ee1 100644 --- a/web-admin/src/api/material-usage.ts +++ b/web-admin/src/api/material-usage.ts @@ -71,5 +71,8 @@ export function fetchMyMaterialUsageList(params: { startTime?: string endTime?: string }): Promise<{ list: MaterialUsage[]; total: number }> { - return request.get('/web/admin/my-material-usages', { params }) + return request.get>({ + url: '/web/admin/my-material-usages', + params + }) } diff --git a/web-admin/src/assets/styles/core/app.scss b/web-admin/src/assets/styles/core/app.scss index 22d6e992..580eb3b5 100755 --- a/web-admin/src/assets/styles/core/app.scss +++ b/web-admin/src/assets/styles/core/app.scss @@ -426,6 +426,10 @@ body { margin: 12px 24px 4px; } + &--start:not(.el-tabs) { + justify-content: flex-start; + } + &__track { display: inline-flex; gap: 4px; @@ -568,6 +572,119 @@ body { } } +// 面板级左对齐下划线 Tab(对齐 docs/my-material-usage-tab-demos/04-left-underline) +.panel-underline-tabs { + &:not(.el-tabs) { + margin: 12px 24px 0; + border-bottom: 2px solid var(--mint-border, #e2e8f0); + } + + &__track { + display: flex; + gap: 0; + } + + &__btn { + padding: 14px 28px; + margin-bottom: -2px; + border: none; + background: transparent; + font-size: 15px; + font-weight: 500; + line-height: 1.4; + color: var(--mint-text-muted, #64748b); + cursor: pointer; + border-bottom: 3px solid transparent; + transition: + color 0.15s, + border-color 0.15s, + background 0.15s; + + &:hover:not(.is-active) { + color: var(--mint-text, #1e293b); + background: #f8fafc; + } + + &.is-active { + color: var(--primary-dark, #059669); + font-weight: 600; + border-bottom-color: var(--primary, #10b981); + } + } + + // el-tabs 结构 + &.el-tabs { + > .el-tabs__header { + display: flex; + justify-content: flex-start; + margin: 12px 24px 0; + padding: 0; + border: none; + border-bottom: 2px solid var(--mint-border, #e2e8f0); + } + + .el-tabs__nav-wrap { + flex: 0 1 auto; + + &::after { + display: none; + } + } + + .el-tabs__nav-scroll { + display: flex; + justify-content: flex-start; + } + + .el-tabs__nav { + float: none; + gap: 0; + padding: 0; + border: none; + background: transparent; + } + + .el-tabs__active-bar { + display: none; + } + + .el-tabs__item { + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; + box-sizing: border-box; + height: auto !important; + margin: 0 0 -2px !important; + padding: 14px 28px !important; + border: none !important; + border-bottom: 3px solid transparent !important; + border-radius: 0; + background: transparent; + font-size: 15px; + font-weight: 500; + line-height: 1.4; + text-align: center !important; + color: var(--mint-text-muted, #64748b); + transition: + color 0.15s, + border-color 0.15s, + background 0.15s; + + &:hover:not(.is-active) { + color: var(--mint-text, #1e293b); + background: #f8fafc; + } + + &.is-active { + color: var(--primary-dark, #059669); + font-weight: 600; + border-bottom-color: var(--primary, #10b981) !important; + background: transparent; + } + } + } +} + .page-container :is( .panel-top h2, @@ -722,6 +839,17 @@ body { .console-container .panel-top h2.auto-title-location { --panel-title-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 21s-7-4.5-7-11a7 7 0 1 1 14 0c0 6.5-7 11-7 11z'/%3E%3Ccircle cx='12' cy='10' r='2.5'/%3E%3C/svg%3E"); } +.page-container + :is( + .panel-top h2, + .panel-top h3, + .storage-content-header h3, + .storage-aside__head h2, + .user-dept-aside__head h2 + ).auto-title-garment, +.console-container .panel-top h2.auto-title-garment { + --panel-title-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20.38 3.46 16 2a4 4 0 0 1-8 0L3.62 3.46a2 2 0 0 0-1.34 2.23l.58 3.47a1 1 0 0 0 .99.84H6v10c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V10h2.15a1 1 0 0 0 .99-.84l.58-3.47a2 2 0 0 0-1.34-2.23z'/%3E%3C/svg%3E"); +} .page-container :is( .panel-top h2, @@ -744,6 +872,17 @@ body { .console-container .panel-top h2.auto-title-route { --panel-title-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='6' cy='19' r='3'/%3E%3Cpath d='M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15'/%3E%3Ccircle cx='18' cy='5' r='3'/%3E%3C/svg%3E"); } +.page-container + :is( + .panel-top h2, + .panel-top h3, + .storage-content-header h3, + .storage-aside__head h2, + .user-dept-aside__head h2 + ).auto-title-process, +.console-container .panel-top h2.auto-title-process { + --panel-title-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z'/%3E%3Cpath d='m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65'/%3E%3Cpath d='m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65'/%3E%3C/svg%3E"); +} .page-container :is( .panel-top h2, diff --git a/web-admin/src/graphify-out/cache/ast/021ac45cbaf04b17ea17ac90f9651c31b1074afc7384878627ad93c248c74202.json b/web-admin/src/graphify-out/cache/ast/021ac45cbaf04b17ea17ac90f9651c31b1074afc7384878627ad93c248c74202.json new file mode 100644 index 00000000..4509a58b --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/021ac45cbaf04b17ea17ac90f9651c31b1074afc7384878627ad93c248c74202.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_processroutetab_vue", "label": "ProcessRouteTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1"}, {"id": "process_processroutetab_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1473"}, {"id": "process_processroutetab_get", "label": "get()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1682"}, {"id": "process_processroutetab_set", "label": "set()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1692"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_processroutetab_vue", "target": "process_processroutetab_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1473", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_processroutetab_vue", "target": "process_processroutetab_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1593", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_processroutetab_vue", "target": "process_processroutetab_get", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1682", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_processroutetab_vue", "target": "process_processroutetab_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1692", "weight": 1.0}], "raw_calls": [{"caller_nid": "process_processroutetab_if", "callee": "some", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1474"}, {"caller_nid": "process_processroutetab_if", "callee": "mapReagentOptionLabel", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1476"}, {"caller_nid": "process_processroutetab_if", "callee": "some", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1594"}, {"caller_nid": "process_processroutetab_if", "callee": "mapConsumableOptionLabel", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1596"}, {"caller_nid": "process_processroutetab_get", "callee": "isArray", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1686"}, {"caller_nid": "process_processroutetab_get", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1686"}, {"caller_nid": "process_processroutetab_get", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1687"}, {"caller_nid": "process_processroutetab_get", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1687"}, {"caller_nid": "process_processroutetab_get", "callee": "split", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1687"}, {"caller_nid": "process_processroutetab_get", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1687"}, {"caller_nid": "process_processroutetab_set", "callee": "join", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/ProcessRouteTab.vue", "source_location": "L1694"}]} \ No newline at end of file diff --git a/web-admin/src/graphify-out/cache/ast/18a5f3b0cded4431bb43e4952a42bf842c9f8ef2f954a08337f91d304cbfbf63.json b/web-admin/src/graphify-out/cache/ast/18a5f3b0cded4431bb43e4952a42bf842c9f8ef2f954a08337f91d304cbfbf63.json new file mode 100644 index 00000000..1196d964 --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/18a5f3b0cded4431bb43e4952a42bf842c9f8ef2f954a08337f91d304cbfbf63.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_category_outputtypetab_vue", "label": "OutputTypeTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/OutputTypeTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/web-admin/src/graphify-out/cache/ast/195ceef3fa9fc30908886f48acda49ee96003c2f9e9101b7e830f9ae8576f3f6.json b/web-admin/src/graphify-out/cache/ast/195ceef3fa9fc30908886f48acda49ee96003c2f9e9101b7e830f9ae8576f3f6.json new file mode 100644 index 00000000..be28ad12 --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/195ceef3fa9fc30908886f48acda49ee96003c2f9e9101b7e830f9ae8576f3f6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/web-admin/src/graphify-out/cache/ast/2990d6021bb3098b3f06030bd47efb8a97a728629b4b865b86b2a39526ef739c.json b/web-admin/src/graphify-out/cache/ast/2990d6021bb3098b3f06030bd47efb8a97a728629b4b865b86b2a39526ef739c.json new file mode 100644 index 00000000..a50dc133 --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/2990d6021bb3098b3f06030bd47efb8a97a728629b4b865b86b2a39526ef739c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_my_production_material_usage_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/my-production-material-usage/index.vue", "source_location": "L1"}, {"id": "my_production_material_usage_index_handletabchange", "label": "handleTabChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/my-production-material-usage/index.vue", "source_location": "L47"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_my_production_material_usage_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_material_productionmaterialusagetab_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/my-production-material-usage/index.vue", "source_location": "L35", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_my_production_material_usage_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_material_materialconsumptiontab_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/my-production-material-usage/index.vue", "source_location": "L36", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_my_production_material_usage_index_vue", "target": "my_production_material_usage_index_handletabchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/my-production-material-usage/index.vue", "source_location": "L47", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/web-admin/src/graphify-out/cache/ast/422e18aaf73c8116f7a508857e18caef8b3f78f87f88dc79228453e9e287b8d3.json b/web-admin/src/graphify-out/cache/ast/422e18aaf73c8116f7a508857e18caef8b3f78f87f88dc79228453e9e287b8d3.json new file mode 100644 index 00000000..8e6996c3 --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/422e18aaf73c8116f7a508857e18caef8b3f78f87f88dc79228453e9e287b8d3.json @@ -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": []} \ No newline at end of file diff --git a/web-admin/src/graphify-out/cache/ast/591fee48dae891f848b36ff28d4c82abda99fec9472a6caab067f45e6691a409.json b/web-admin/src/graphify-out/cache/ast/591fee48dae891f848b36ff28d4c82abda99fec9472a6caab067f45e6691a409.json new file mode 100644 index 00000000..43565a4a --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/591fee48dae891f848b36ff28d4c82abda99fec9472a6caab067f45e6691a409.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "label": "SampleReceptionDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L1"}, {"id": "production_work_order_samplereceptiondialog_protocolstatuslabelbysource", "label": "protocolStatusLabelBySource()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L378"}, {"id": "production_work_order_samplereceptiondialog_protocolstatustagtypebysource", "label": "protocolStatusTagTypeBySource()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L382"}, {"id": "production_work_order_samplereceptiondialog_scrollreceivetosection", "label": "scrollReceiveToSection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L386"}, {"id": "production_work_order_samplereceptiondialog_getcurrentuserhandler", "label": "getCurrentUserHandler()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L394"}, {"id": "production_work_order_samplereceptiondialog_ensurecurrentuserinoptions", "label": "ensureCurrentUserInOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L401"}, {"id": "production_work_order_samplereceptiondialog_onhandlerchange", "label": "onHandlerChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L409"}, {"id": "production_work_order_samplereceptiondialog_formatnowdatetime", "label": "formatNowDatetime()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L414"}, {"id": "production_work_order_samplereceptiondialog_extractreceptiondate", "label": "extractReceptionDate()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L420"}, {"id": "production_work_order_samplereceptiondialog_allocatelabstoragecodes", "label": "allocateLabStorageCodes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L425"}, {"id": "production_work_order_samplereceptiondialog_refreshreceivelabstoragecode", "label": "refreshReceiveLabStorageCode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L432"}, {"id": "production_work_order_samplereceptiondialog_onlabstoragecodemanualinput", "label": "onLabStorageCodeManualInput()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L452"}, {"id": "production_work_order_samplereceptiondialog_onreceivereceptiontimechange", "label": "onReceiveReceptionTimeChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L456"}, {"id": "production_work_order_samplereceptiondialog_onreceiveacceptconclusionchange", "label": "onReceiveAcceptConclusionChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L464"}, {"id": "production_work_order_samplereceptiondialog_resetcheckvalues", "label": "resetCheckValues()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L475"}, {"id": "production_work_order_samplereceptiondialog_applycheckresultsfromdetail", "label": "applyCheckResultsFromDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L482"}, {"id": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "label": "populateReceiveFormFromDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L489"}, {"id": "production_work_order_samplereceptiondialog_resetreceiveform", "label": "resetReceiveForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L529"}, {"id": "production_work_order_samplereceptiondialog_loaduseroptions", "label": "loadUserOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L545"}, {"id": "production_work_order_samplereceptiondialog_loadactivecheckitems", "label": "loadActiveCheckItems()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L559"}, {"id": "production_work_order_samplereceptiondialog_tooptionalmetric", "label": "toOptionalMetric()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L570"}, {"id": "production_work_order_samplereceptiondialog_initdialog", "label": "initDialog()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L576"}, {"id": "production_work_order_samplereceptiondialog_handleclosed", "label": "handleClosed()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L619"}, {"id": "production_work_order_samplereceptiondialog_submitreceive", "label": "submitReceive()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L626"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_protocolstatuslabelbysource", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L378", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_protocolstatustagtypebysource", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L382", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_scrollreceivetosection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L386", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_getcurrentuserhandler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L394", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_ensurecurrentuserinoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L401", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_onhandlerchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L409", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_formatnowdatetime", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L414", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_extractreceptiondate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L420", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_allocatelabstoragecodes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L425", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_refreshreceivelabstoragecode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L432", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_onlabstoragecodemanualinput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L452", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_onreceivereceptiontimechange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L456", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_onreceiveacceptconclusionchange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L464", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_resetcheckvalues", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L475", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_applycheckresultsfromdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L482", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L489", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_resetreceiveform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L529", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_loaduseroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L545", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_loadactivecheckitems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L559", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_tooptionalmetric", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L570", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_initdialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L576", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_handleclosed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L619", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_samplereceptiondialog_vue", "target": "production_work_order_samplereceptiondialog_submitreceive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L626", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_ensurecurrentuserinoptions", "target": "production_work_order_samplereceptiondialog_getcurrentuserhandler", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L402", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_allocatelabstoragecodes", "target": "production_work_order_samplereceptiondialog_extractreceptiondate", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L426", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_refreshreceivelabstoragecode", "target": "production_work_order_samplereceptiondialog_extractreceptiondate", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L438", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_refreshreceivelabstoragecode", "target": "production_work_order_samplereceptiondialog_allocatelabstoragecodes", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L443", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_onreceivereceptiontimechange", "target": "production_work_order_samplereceptiondialog_extractreceptiondate", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L457", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_onreceivereceptiontimechange", "target": "production_work_order_samplereceptiondialog_refreshreceivelabstoragecode", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L461", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_onreceiveacceptconclusionchange", "target": "production_work_order_samplereceptiondialog_refreshreceivelabstoragecode", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L472", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "target": "production_work_order_samplereceptiondialog_extractreceptiondate", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L503", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "target": "production_work_order_samplereceptiondialog_applycheckresultsfromdetail", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L505", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_resetreceiveform", "target": "production_work_order_samplereceptiondialog_formatnowdatetime", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L530", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_resetreceiveform", "target": "production_work_order_samplereceptiondialog_getcurrentuserhandler", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L531", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_loaduseroptions", "target": "production_work_order_samplereceptiondialog_ensurecurrentuserinoptions", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L552", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_loadactivecheckitems", "target": "production_work_order_samplereceptiondialog_resetcheckvalues", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L563", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_initdialog", "target": "production_work_order_samplereceptiondialog_loaduseroptions", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L580", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_initdialog", "target": "production_work_order_samplereceptiondialog_loadactivecheckitems", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L581", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_initdialog", "target": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L593", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_initdialog", "target": "production_work_order_samplereceptiondialog_resetreceiveform", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L607", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_initdialog", "target": "production_work_order_samplereceptiondialog_resetcheckvalues", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L608", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_initdialog", "target": "production_work_order_samplereceptiondialog_refreshreceivelabstoragecode", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L609", "weight": 1.0}, {"source": "production_work_order_samplereceptiondialog_submitreceive", "target": "production_work_order_samplereceptiondialog_tooptionalmetric", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L644", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_work_order_samplereceptiondialog_protocolstatuslabelbysource", "callee": "donationStatusLabel", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L379"}, {"caller_nid": "production_work_order_samplereceptiondialog_protocolstatuslabelbysource", "callee": "protocolStatusLabel", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L379"}, {"caller_nid": "production_work_order_samplereceptiondialog_protocolstatustagtypebysource", "callee": "donationStatusTagType", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L383"}, {"caller_nid": "production_work_order_samplereceptiondialog_protocolstatustagtypebysource", "callee": "protocolStatusTagType", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L383"}, {"caller_nid": "production_work_order_samplereceptiondialog_scrollreceivetosection", "callee": "getElementById", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L388"}, {"caller_nid": "production_work_order_samplereceptiondialog_scrollreceivetosection", "callee": "scrollIntoView", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L390"}, {"caller_nid": "production_work_order_samplereceptiondialog_getcurrentuserhandler", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L396"}, {"caller_nid": "production_work_order_samplereceptiondialog_getcurrentuserhandler", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L397"}, {"caller_nid": "production_work_order_samplereceptiondialog_ensurecurrentuserinoptions", "callee": "some", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L404"}, {"caller_nid": "production_work_order_samplereceptiondialog_onhandlerchange", "callee": "find", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L410"}, {"caller_nid": "production_work_order_samplereceptiondialog_formatnowdatetime", "callee": "getFullYear", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"caller_nid": "production_work_order_samplereceptiondialog_formatnowdatetime", "callee": "pad", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"caller_nid": "production_work_order_samplereceptiondialog_formatnowdatetime", "callee": "getMonth", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"caller_nid": "production_work_order_samplereceptiondialog_formatnowdatetime", "callee": "pad", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"caller_nid": "production_work_order_samplereceptiondialog_formatnowdatetime", "callee": "getDate", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"caller_nid": "production_work_order_samplereceptiondialog_formatnowdatetime", "callee": "pad", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"caller_nid": "production_work_order_samplereceptiondialog_formatnowdatetime", "callee": "getHours", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"caller_nid": "production_work_order_samplereceptiondialog_formatnowdatetime", "callee": "pad", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"caller_nid": "production_work_order_samplereceptiondialog_formatnowdatetime", "callee": "getMinutes", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"caller_nid": "production_work_order_samplereceptiondialog_formatnowdatetime", "callee": "pad", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"caller_nid": "production_work_order_samplereceptiondialog_formatnowdatetime", "callee": "getSeconds", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L417"}, {"caller_nid": "production_work_order_samplereceptiondialog_extractreceptiondate", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L421"}, {"caller_nid": "production_work_order_samplereceptiondialog_extractreceptiondate", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L421"}, {"caller_nid": "production_work_order_samplereceptiondialog_extractreceptiondate", "callee": "slice", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L422"}, {"caller_nid": "production_work_order_samplereceptiondialog_allocatelabstoragecodes", "callee": "fetchAllocateLabStorageCodes", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L428"}, {"caller_nid": "production_work_order_samplereceptiondialog_refreshreceivelabstoragecode", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L448"}, {"caller_nid": "production_work_order_samplereceptiondialog_resetcheckvalues", "callee": "forEach", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L476"}, {"caller_nid": "production_work_order_samplereceptiondialog_resetcheckvalues", "callee": "keys", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L476"}, {"caller_nid": "production_work_order_samplereceptiondialog_applycheckresultsfromdetail", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L483"}, {"caller_nid": "production_work_order_samplereceptiondialog_applycheckresultsfromdetail", "callee": "has", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L485"}, {"caller_nid": "production_work_order_samplereceptiondialog_applycheckresultsfromdetail", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L485"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L490"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L491"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L492"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L493"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "Number", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L495"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "Number", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L498"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L499"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L500"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L501"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "isArray", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L506"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "isArray", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L508"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L509"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L518"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L518"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "split", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L518"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L518"}, {"caller_nid": "production_work_order_samplereceptiondialog_populatereceiveformfromdetail", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L522"}, {"caller_nid": "production_work_order_samplereceptiondialog_loaduseroptions", "callee": "fetchUserOptions", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L547"}, {"caller_nid": "production_work_order_samplereceptiondialog_loaduseroptions", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L548"}, {"caller_nid": "production_work_order_samplereceptiondialog_loadactivecheckitems", "callee": "fetchSampleReceptionCheckItemsActive", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L561"}, {"caller_nid": "production_work_order_samplereceptiondialog_tooptionalmetric", "callee": "Number", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L572"}, {"caller_nid": "production_work_order_samplereceptiondialog_tooptionalmetric", "callee": "isFinite", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L573"}, {"caller_nid": "production_work_order_samplereceptiondialog_initdialog", "callee": "fetchSampleReceptionBySampleCode", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L583"}, {"caller_nid": "production_work_order_samplereceptiondialog_initdialog", "callee": "fetchSampleReceptionDetail", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L592"}, {"caller_nid": "production_work_order_samplereceptiondialog_initdialog", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L595"}, {"caller_nid": "production_work_order_samplereceptiondialog_initdialog", "callee": "some", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L596"}, {"caller_nid": "production_work_order_samplereceptiondialog_initdialog", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L598"}, {"caller_nid": "production_work_order_samplereceptiondialog_initdialog", "callee": "error", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L612"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "catch", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L628"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "validate", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L628"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "some", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L630"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L631"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L635"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L646"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "financeAttachmentsToUrlString", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L653"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "fetchSampleReceptionUpdate", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L658"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "success", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L659"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "fetchSampleReceptionSubmit", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L661"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L664"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L669"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "success", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L672"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "emit", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L674"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "emit", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L675"}, {"caller_nid": "production_work_order_samplereceptiondialog_submitreceive", "callee": "error", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/SampleReceptionDialog.vue", "source_location": "L677"}]} \ No newline at end of file diff --git a/web-admin/src/graphify-out/cache/ast/94134ffbe39ad939427fb924de3700926ac0727583ad88dc46cf46a68caba438.json b/web-admin/src/graphify-out/cache/ast/94134ffbe39ad939427fb924de3700926ac0727583ad88dc46cf46a68caba438.json new file mode 100644 index 00000000..bfe7adab --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/94134ffbe39ad939427fb924de3700926ac0727583ad88dc46cf46a68caba438.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_category_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/web-admin/src/graphify-out/cache/ast/9e16682a821819196f321f7f474753bb34308d9926a2438ff92bba899fb6e403.json b/web-admin/src/graphify-out/cache/ast/9e16682a821819196f321f7f474753bb34308d9926a2438ff92bba899fb6e403.json new file mode 100644 index 00000000..8e6996c3 --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/9e16682a821819196f321f7f474753bb34308d9926a2438ff92bba899fb6e403.json @@ -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": []} \ No newline at end of file diff --git a/web-admin/src/graphify-out/cache/ast/c9f57eb08209ebac085325fa49702d2da83ea4cdd49afac729a6356f527091d3.json b/web-admin/src/graphify-out/cache/ast/c9f57eb08209ebac085325fa49702d2da83ea4cdd49afac729a6356f527091d3.json new file mode 100644 index 00000000..2d0559c1 --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/c9f57eb08209ebac085325fa49702d2da83ea4cdd49afac729a6356f527091d3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_output_type_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/output-type/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/web-admin/src/graphify-out/cache/ast/d1a37e024f217848981c2ef23af67fa6b56463a6a1f502c40ffaa40deefef33a.json b/web-admin/src/graphify-out/cache/ast/d1a37e024f217848981c2ef23af67fa6b56463a6a1f502c40ffaa40deefef33a.json new file mode 100644 index 00000000..1196d964 --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/d1a37e024f217848981c2ef23af67fa6b56463a6a1f502c40ffaa40deefef33a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_process_category_outputtypetab_vue", "label": "OutputTypeTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/process-category/OutputTypeTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/web-admin/src/graphify-out/cache/ast/e2498813516768e7f555269cef080facde799a10eb36ccf5ae07ca0b8c06ba93.json b/web-admin/src/graphify-out/cache/ast/e2498813516768e7f555269cef080facde799a10eb36ccf5ae07ca0b8c06ba93.json new file mode 100644 index 00000000..25a23480 --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/e2498813516768e7f555269cef080facde799a10eb36ccf5ae07ca0b8c06ba93.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_material_usage_ts", "label": "material-usage.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts", "source_location": "L1"}, {"id": "api_material_usage_fetchmaterialusagelist", "label": "fetchMaterialUsageList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts", "source_location": "L41"}, {"id": "api_material_usage_fetchmarkmaterialusagefullyused", "label": "fetchMarkMaterialUsageFullyUsed()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts", "source_location": "L58"}, {"id": "api_material_usage_fetchmymaterialusagelist", "label": "fetchMyMaterialUsageList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts", "source_location": "L64"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_material_usage_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/material-usage.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_material_usage_ts", "target": "api_material_usage_fetchmaterialusagelist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts", "source_location": "L41", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_material_usage_ts", "target": "api_material_usage_fetchmarkmaterialusagefullyused", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts", "source_location": "L58", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_material_usage_ts", "target": "api_material_usage_fetchmymaterialusagelist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts", "source_location": "L64", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_material_usage_fetchmaterialusagelist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts", "source_location": "L52"}, {"caller_nid": "api_material_usage_fetchmarkmaterialusagefullyused", "callee": "post", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts", "source_location": "L59"}, {"caller_nid": "api_material_usage_fetchmymaterialusagelist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/material-usage.ts", "source_location": "L74"}]} \ No newline at end of file diff --git a/web-admin/src/views/cell-storage/my-material-usage/index.vue b/web-admin/src/views/cell-storage/my-material-usage/index.vue index 9b716beb..447856ff 100644 --- a/web-admin/src/views/cell-storage/my-material-usage/index.vue +++ b/web-admin/src/views/cell-storage/my-material-usage/index.vue @@ -3,7 +3,7 @@
-

我的物料领用记录

+

我的物料领用记录

diff --git a/web-admin/src/views/cell-storage/payment-confirm/index.vue b/web-admin/src/views/cell-storage/payment-confirm/index.vue index 7f6b787f..065b9e3d 100644 --- a/web-admin/src/views/cell-storage/payment-confirm/index.vue +++ b/web-admin/src/views/cell-storage/payment-confirm/index.vue @@ -4,7 +4,7 @@
-

缴退费财务确认

+

缴退费财务确认

diff --git a/web-admin/src/views/pilot-service/cell-product-type/cell-product-kanban.scss b/web-admin/src/views/pilot-service/cell-product-type/cell-product-kanban.scss index 40e17c4f..a1fb4954 100644 --- a/web-admin/src/views/pilot-service/cell-product-type/cell-product-kanban.scss +++ b/web-admin/src/views/pilot-service/cell-product-type/cell-product-kanban.scss @@ -42,7 +42,7 @@ font-size: 14px; font-weight: 600; line-height: 1.4; - color: var(--mint-text, #1e293b); + color: var(--primary, #10b981); word-break: break-word; display: -webkit-box; -webkit-line-clamp: 2; diff --git a/web-admin/src/views/pilot-service/cell-product-type/index.vue b/web-admin/src/views/pilot-service/cell-product-type/index.vue index 017298c9..970098e4 100644 --- a/web-admin/src/views/pilot-service/cell-product-type/index.vue +++ b/web-admin/src/views/pilot-service/cell-product-type/index.vue @@ -4,7 +4,7 @@
-

细胞产品基础信息维护

+

细胞产品基础信息维护

diff --git a/web-admin/src/views/pilot-service/clinical-payment-confirm/index.vue b/web-admin/src/views/pilot-service/clinical-payment-confirm/index.vue index 39b36798..67572943 100644 --- a/web-admin/src/views/pilot-service/clinical-payment-confirm/index.vue +++ b/web-admin/src/views/pilot-service/clinical-payment-confirm/index.vue @@ -4,7 +4,7 @@
-

缴退费财务确认

+

缴退费财务确认

diff --git a/web-admin/src/views/production/cleanroom-garment/index.vue b/web-admin/src/views/production/cleanroom-garment/index.vue index 9469fe27..24b4f80d 100644 --- a/web-admin/src/views/production/cleanroom-garment/index.vue +++ b/web-admin/src/views/production/cleanroom-garment/index.vue @@ -4,7 +4,7 @@
-

洁净服管理

+

洁净服管理

diff --git a/web-admin/src/views/production/my-production-material-usage/index.vue b/web-admin/src/views/production/my-production-material-usage/index.vue index cc431096..805e3666 100644 --- a/web-admin/src/views/production/my-production-material-usage/index.vue +++ b/web-admin/src/views/production/my-production-material-usage/index.vue @@ -3,17 +3,17 @@
-

我的物料领用记录

+

我的物料领用记录

-
-
+
+