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
+
+
+
+
+
+
+
+
+
+
+ 问题:居中放置、字号偏小、灰底与白底对比弱,首次进入容易被忽略。
+
+
✓ 与全站 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
+
+
+
+
+
+
+
+
+
+
+ 强烈推荐:双 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
+
+
+
+
+
+
+
+
+
+ 我的物料领用记录
+
+
+
+
+
+
+ 推荐:副标题帮助用户理解两个 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
+
+
+
+
+
+
+
+
+
+ 我的物料领用记录
+
+
+
+
+
+
+ 经典方案:左对齐 + 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
+
+
+
+
+
+
+
+
+
+
+ 渐进改良:在现有胶囊风格基础上左对齐、加大按钮尺寸,并增加一行引导提示。改动最小,适合不想大改布局的场景。
+
+
✓ 改动量小、与全站胶囊风格兼容、引导文案降低学习成本
+
✗ 引导文案可能显得冗余(用户熟悉后可考虑隐藏)
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+ 我的物料领用记录
+
+
+
+
+
+
+ 推荐:与 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、灰底轨道,
+ 夹在标题与筛选区之间视觉权重低,用户容易把它当成静态标签而非可切换的视图。
+
+
+
+
+
+
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 @@
-
我的物料领用记录
+ 我的物料领用记录
-
-
+
+