From 453fece707fc1e611554fbb10125383eba01449a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 18 九月 2026 14:39:09 +0800
Subject: [PATCH] feat(mes): 添加产品检验单Word导出功能
---
docs/project-business/data/flows.json | 4
.playwright-mcp/page-2026-09-18T06-17-38-106Z.yml | 170 ++
docs/project-business/mermaid/05-quality-flow.mmd | 1
.playwright-mcp/page-2026-09-18T06-20-02-132Z.yml | 437 ++++++
.playwright-mcp/page-2026-09-18T06-22-24-743Z.yml | 504 +++++++
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/MesQcIndicatorResultController.java | 28
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcReportServiceImpl.java | 4
.playwright-mcp/page-2026-09-18T06-18-24-102Z.yml | 437 ++++++
.playwright-mcp/page-2026-09-18T06-19-31-080Z.yml | 701 ++++++++++
yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilderTest.java | 124 +
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/vo/MesQcQcReportRespVO.java | 6
.image/09bc21b456252f6d27b9b9ef43252019.jpg | 0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilder.java | 326 ++++
.playwright-mcp/IQC-20260917001-产品质量检验单.docx | 0
.playwright-mcp/page-2026-09-18T06-13-00-160Z.yml | 1
.playwright-mcp/page-2026-09-18T06-17-54-686Z.yml | 701 ++++++++++
docs/project-business/index.html | 6
.playwright-mcp/page-2026-09-18T06-13-24-852Z.yml | 190 ++
.playwright-mcp/page-2026-09-18T06-22-49-485Z.yml | 437 ++++++
yudao-server/src/main/resources/application-local.yaml | 4
20 files changed, 4,074 insertions(+), 7 deletions(-)
diff --git a/.image/09bc21b456252f6d27b9b9ef43252019.jpg b/.image/09bc21b456252f6d27b9b9ef43252019.jpg
new file mode 100644
index 0000000..522be1e
--- /dev/null
+++ b/.image/09bc21b456252f6d27b9b9ef43252019.jpg
Binary files differ
diff --git "a/.playwright-mcp/IQC-20260917001-\344\272\247\345\223\201\350\264\250\351\207\217\346\243\200\351\252\214\345\215\225.docx" "b/.playwright-mcp/IQC-20260917001-\344\272\247\345\223\201\350\264\250\351\207\217\346\243\200\351\252\214\345\215\225.docx"
new file mode 100644
index 0000000..7e05412
--- /dev/null
+++ "b/.playwright-mcp/IQC-20260917001-\344\272\247\345\223\201\350\264\250\351\207\217\346\243\200\351\252\214\345\215\225.docx"
Binary files differ
diff --git a/.playwright-mcp/page-2026-09-18T06-13-00-160Z.yml b/.playwright-mcp/page-2026-09-18T06-13-00-160Z.yml
new file mode 100644
index 0000000..6adf37e
--- /dev/null
+++ b/.playwright-mcp/page-2026-09-18T06-13-00-160Z.yml
@@ -0,0 +1 @@
+- generic [active]: 宸ヤ笟AI鏅洪�犲钩鍙�
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-09-18T06-13-24-852Z.yml b/.playwright-mcp/page-2026-09-18T06-13-24-852Z.yml
new file mode 100644
index 0000000..87261a9
--- /dev/null
+++ b/.playwright-mcp/page-2026-09-18T06-13-24-852Z.yml
@@ -0,0 +1,190 @@
+- generic [ref=e7]:
+ - complementary [ref=e8]:
+ - generic [ref=e9]:
+ - generic [ref=e10] [cursor=pointer]
+ - link "宸ヤ笟AI鏅洪�犲钩鍙� 宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e15] [cursor=pointer]:
+ - /url: javascript:void 0
+ - img "宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e18]
+ - generic [ref=e19]: 宸ヤ笟AI鏅洪�犲钩鍙�
+ - menu [ref=e22]:
+ - menuitem "棣栭〉" [ref=e23] [cursor=pointer]
+ - listitem [ref=e30]:
+ - generic [ref=e31] [cursor=pointer]: 鍩虹鏁版嵁
+ - listitem [ref=e39]:
+ - generic [ref=e40] [cursor=pointer]: 閲囪喘绠$悊
+ - listitem [ref=e46]:
+ - generic [ref=e47] [cursor=pointer]: 钀ラ攢绠$悊
+ - listitem [ref=e53]:
+ - generic [ref=e54] [cursor=pointer]: 璁惧绠$悊
+ - listitem [ref=e61]:
+ - generic [ref=e62] [cursor=pointer]: 浠撳偍鐗╂祦
+ - listitem [ref=e70]:
+ - generic [ref=e71] [cursor=pointer]: 宸ヨ壓璁捐
+ - listitem [ref=e78]:
+ - generic [ref=e79] [cursor=pointer]: 浜у搧璁捐
+ - listitem [ref=e85]:
+ - generic [ref=e86] [cursor=pointer]: 鐢熶骇绠℃帶
+ - listitem [ref=e93]:
+ - generic [ref=e94] [cursor=pointer]: 璐ㄩ噺绠$悊
+ - list [ref=e593]:
+ - menuitem "妫�娴嬮」璁剧疆" [ref=e594] [cursor=pointer]
+ - menuitem "璐ㄦ鏂规" [ref=e599] [cursor=pointer]
+ - menuitem "寰呮浠诲姟" [ref=e604] [cursor=pointer]
+ - menuitem "鏉ユ枡妫�楠�" [ref=e611] [cursor=pointer]
+ - menuitem "杩囩▼妫�楠�" [ref=e616] [cursor=pointer]
+ - menuitem "閫�鏂欐楠�" [ref=e621] [cursor=pointer]
+ - menuitem "鍑鸿揣妫�楠�" [ref=e626] [cursor=pointer]
+ - menuitem "鎵规杩芥函" [ref=e631] [cursor=pointer]
+ - menuitem "涓嶅悎鏍煎搧澶勭悊" [ref=e637] [cursor=pointer]
+ - menuitem "甯歌缂洪櫡" [ref=e642] [cursor=pointer]
+ - listitem [ref=e100]:
+ - generic [ref=e101] [cursor=pointer]: 鎶ヨ〃绠$悊
+ - listitem [ref=e108]:
+ - generic [ref=e109] [cursor=pointer]: 鍐崇瓥BI澶у睆
+ - listitem [ref=e115]:
+ - generic [ref=e116] [cursor=pointer]: 鍗忓悓鍔炲叕
+ - listitem [ref=e122]:
+ - generic [ref=e123] [cursor=pointer]: 浜哄姏璧勬簮
+ - listitem [ref=e129]:
+ - generic [ref=e130] [cursor=pointer]: 鍞悗绠$悊
+ - listitem [ref=e136]:
+ - generic [ref=e137] [cursor=pointer]: 鍩虹璁炬柦
+ - listitem [ref=e143]:
+ - generic [ref=e144] [cursor=pointer]: 绯荤粺绠$悊
+ - generic [ref=e151] [cursor=pointer]
+ - generic [ref=e156]:
+ - generic [ref=e157]:
+ - banner [ref=e158]:
+ - button [ref=e159] [cursor=pointer]
+ - button [ref=e162] [cursor=pointer]
+ - navigation "breadcrumb" [ref=e167]:
+ - list [ref=e168]:
+ - listitem [ref=e169]:
+ - link "棣栭〉" [disabled] [ref=e170]
+ - generic [ref=e177]:
+ - generic [ref=e179] [cursor=pointer]:
+ - generic [ref=e183]: 鎼滅储
+ - generic [ref=e184]: Ctrl K
+ - button [ref=e186] [cursor=pointer]
+ - button "dark" [ref=e191] [cursor=pointer]
+ - button [ref=e200] [cursor=pointer]
+ - button [ref=e206] [cursor=pointer]
+ - button [ref=e209] [cursor=pointer]
+ - button [ref=e215] [cursor=pointer]:
+ - button [ref=e217]
+ - button "宸ヤ綔鍙�" [ref=e221] [cursor=pointer]
+ - button [ref=e225] [cursor=pointer]:
+ - img "瓒呯骇绠$悊鍛�" [ref=e230]
+ - generic [ref=e232]:
+ - generic [ref=e233]: 棣栭〉
+ - generic [ref=e254]:
+ - button [ref=e255] [cursor=pointer]
+ - generic [ref=e262] [cursor=pointer]
+ - generic [ref=e266] [cursor=pointer]
+ - main [ref=e273]:
+ - generic [ref=e276]:
+ - generic [ref=e277]:
+ - generic [ref=e278]:
+ - heading "涓嬪崍濂斤紝娆㈣繋鍥炴潵" [level=1] [ref=e279]
+ - paragraph [ref=e280]: 2026骞�9鏈�18鏃� 鏄熸湡浜�
+ - generic [ref=e281]: 绯荤粺杩愯涓�
+ - generic [ref=e286]:
+ - generic [ref=e295] [cursor=pointer]:
+ - generic [ref=e296]: 鐢熶骇璁㈠崟
+ - generic [ref=e297]:
+ - generic [ref=e298]: "0"
+ - generic [ref=e300]: 杩涜涓�
+ - generic [ref=e301]:
+ - text: 寰呮帓浜� 0
+ - generic [ref=e303]: "|"
+ - text: 宸插畬鎴� 0
+ - generic [ref=e315] [cursor=pointer]:
+ - generic [ref=e316]: 浠婃棩浜ч噺
+ - generic [ref=e317]:
+ - generic [ref=e318]: "0"
+ - generic [ref=e320]: 浠�
+ - generic [ref=e321]: 鏄ㄦ棩 0 浠�
+ - generic [ref=e332] [cursor=pointer]:
+ - generic [ref=e333]: 璐ㄩ噺鍚堟牸鐜�
+ - generic [ref=e334]:
+ - generic [ref=e335]: "0.0"
+ - generic [ref=e337]: "%"
+ - generic [ref=e338]: 鍚堟牸 0 | 涓嶈壇 0
+ - generic [ref=e350] [cursor=pointer]:
+ - generic [ref=e351]: 璁惧杩愯鐜�
+ - generic [ref=e352]:
+ - generic [ref=e353]: "100.0"
+ - generic [ref=e355]: "%"
+ - generic [ref=e356]:
+ - generic [ref=e357]: 鍋滄満 0
+ - generic [ref=e358]: "|"
+ - generic [ref=e359]: 缁存姢 0
+ - generic [ref=e362]:
+ - generic [ref=e373] [cursor=pointer]:
+ - generic [ref=e374]: 閲囪喘璁㈠崟
+ - generic [ref=e375]:
+ - generic [ref=e376]: "1"
+ - generic [ref=e378]: 绗�
+ - generic [ref=e379]: ERP 閲囪喘绠$悊
+ - generic [ref=e390] [cursor=pointer]:
+ - generic [ref=e391]: 閿�鍞鍗�
+ - generic [ref=e392]:
+ - generic [ref=e393]: "1"
+ - generic [ref=e395]: 绗�
+ - generic [ref=e396]: ERP 閿�鍞鐞�
+ - generic [ref=e408] [cursor=pointer]:
+ - generic [ref=e409]: 鐗╂枡搴撳瓨
+ - generic [ref=e410]:
+ - generic [ref=e411]: "0"
+ - generic [ref=e413]: 鏉�
+ - generic [ref=e414]: MES 搴撳瓨鍙拌处
+ - generic [ref=e426] [cursor=pointer]:
+ - generic [ref=e427]: 鎴戠殑寰呭姙
+ - generic [ref=e428]:
+ - generic [ref=e429]: "0"
+ - generic [ref=e431]: 椤�
+ - generic [ref=e432]: BPM 寰呭鎵�
+ - generic [ref=e435]:
+ - generic [ref=e436]:
+ - heading "AI 鏅鸿兘鍒嗘瀽" [level=3] [ref=e437]
+ - generic [ref=e438]: 0 涓伐鍗曞彲鍒嗘瀽
+ - generic [ref=e439]:
+ - generic [ref=e447] [cursor=pointer]:
+ - generic [ref=e448]: AI 鐗╂枡棰勬祴
+ - generic [ref=e449]: 棰勬祴鐗╂枡闇�姹備笌鐭己椋庨櫓
+ - generic [ref=e458] [cursor=pointer]:
+ - generic [ref=e459]: AI 鏃堕暱棰勬祴
+ - generic [ref=e460]: 棰勬祴鍚勫伐搴忕敓浜ц�楁椂
+ - generic [ref=e467] [cursor=pointer]:
+ - generic [ref=e468]: AI 椋庨櫓棰勬祴
+ - generic [ref=e469]: 璇嗗埆娼滃湪鐢熶骇椋庨櫓骞剁粰鍑哄缓璁�
+ - generic [ref=e479] [cursor=pointer]:
+ - generic [ref=e480]: AI 浜や粯璇勪及
+ - generic [ref=e481]: 璇勪及璁㈠崟浜や粯鍑嗘椂鐜囦笌寤舵湡鍥犵礌
+ - generic [ref=e484]:
+ - heading "鐢熶骇瓒嬪娍锛堣繎7澶╋級" [level=3] [ref=e487]
+ - generic [ref=e492]:
+ - generic [ref=e493]:
+ - generic [ref=e499] [cursor=pointer]:
+ - generic [ref=e500]: 瀹夌伅鍛煎彨
+ - generic [ref=e501]:
+ - generic [ref=e502]: "0"
+ - generic [ref=e504]: 鏈缃�
+ - generic [ref=e510] [cursor=pointer]:
+ - generic [ref=e511]: 缁翠慨宸ュ崟
+ - generic [ref=e512]:
+ - generic [ref=e513]: "0"
+ - generic [ref=e515]: 寰呭鐞�
+ - heading "宸ュ崟鐘舵�佸垎甯�" [level=4] [ref=e517]
+ - generic [ref=e525]:
+ - heading "蹇嵎鎿嶄綔" [level=3] [ref=e526]
+ - generic [ref=e527]:
+ - generic [ref=e528] [cursor=pointer]: 鐢熶骇宸ュ崟
+ - generic [ref=e535] [cursor=pointer]: 鐢熶骇鎶ュ伐
+ - generic [ref=e542] [cursor=pointer]: 璐ㄦ绠$悊
+ - generic [ref=e550] [cursor=pointer]: 璁惧鐐规
+ - generic [ref=e557] [cursor=pointer]: 鐢熶骇鎺掔▼
+ - generic [ref=e564] [cursor=pointer]: 瀹夌伅鍛煎彨
+ - generic [ref=e569] [cursor=pointer]: 鐗╂枡搴撳瓨
+ - generic [ref=e577] [cursor=pointer]: 宸ヨ壓璺嚎
+ - generic [ref=e585] [cursor=pointer]: 鏁版嵁鎶ヨ〃
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-09-18T06-17-38-106Z.yml b/.playwright-mcp/page-2026-09-18T06-17-38-106Z.yml
new file mode 100644
index 0000000..2d458dd
--- /dev/null
+++ b/.playwright-mcp/page-2026-09-18T06-17-38-106Z.yml
@@ -0,0 +1,170 @@
+- generic [ref=e7]:
+ - complementary [ref=e8]:
+ - generic [ref=e9]:
+ - generic [ref=e10] [cursor=pointer]
+ - link "宸ヤ笟AI鏅洪�犲钩鍙� 宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e15] [cursor=pointer]:
+ - /url: javascript:void 0
+ - img "宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e18]
+ - generic [ref=e19]: 宸ヤ笟AI鏅洪�犲钩鍙�
+ - menu [ref=e22]:
+ - menuitem "棣栭〉" [ref=e23] [cursor=pointer]
+ - listitem [ref=e30]:
+ - generic [ref=e31] [cursor=pointer]: 鍩虹鏁版嵁
+ - listitem [ref=e39]:
+ - generic [ref=e40] [cursor=pointer]: 閲囪喘绠$悊
+ - listitem [ref=e46]:
+ - generic [ref=e47] [cursor=pointer]: 钀ラ攢绠$悊
+ - listitem [ref=e53]:
+ - generic [ref=e54] [cursor=pointer]: 璁惧绠$悊
+ - listitem [ref=e61]:
+ - generic [ref=e62] [cursor=pointer]: 浠撳偍鐗╂祦
+ - listitem [ref=e70]:
+ - generic [ref=e71] [cursor=pointer]: 宸ヨ壓璁捐
+ - listitem [ref=e78]:
+ - generic [ref=e79] [cursor=pointer]: 浜у搧璁捐
+ - listitem [ref=e85]:
+ - generic [ref=e86] [cursor=pointer]: 鐢熶骇绠℃帶
+ - listitem [ref=e93]:
+ - generic [ref=e94] [cursor=pointer]: 璐ㄩ噺绠$悊
+ - list [ref=e593]:
+ - menuitem "妫�娴嬮」璁剧疆" [ref=e594] [cursor=pointer]
+ - menuitem "璐ㄦ鏂规" [ref=e599] [cursor=pointer]
+ - menuitem "寰呮浠诲姟" [ref=e604] [cursor=pointer]
+ - menuitem "鏉ユ枡妫�楠�" [active] [ref=e611] [cursor=pointer]
+ - menuitem "杩囩▼妫�楠�" [ref=e616] [cursor=pointer]
+ - menuitem "閫�鏂欐楠�" [ref=e621] [cursor=pointer]
+ - menuitem "鍑鸿揣妫�楠�" [ref=e626] [cursor=pointer]
+ - menuitem "鎵规杩芥函" [ref=e631] [cursor=pointer]
+ - menuitem "涓嶅悎鏍煎搧澶勭悊" [ref=e637] [cursor=pointer]
+ - menuitem "甯歌缂洪櫡" [ref=e642] [cursor=pointer]
+ - listitem [ref=e100]:
+ - generic [ref=e101] [cursor=pointer]: 鎶ヨ〃绠$悊
+ - listitem [ref=e108]:
+ - generic [ref=e109] [cursor=pointer]: 鍐崇瓥BI澶у睆
+ - listitem [ref=e115]:
+ - generic [ref=e116] [cursor=pointer]: 鍗忓悓鍔炲叕
+ - listitem [ref=e122]:
+ - generic [ref=e123] [cursor=pointer]: 浜哄姏璧勬簮
+ - listitem [ref=e129]:
+ - generic [ref=e130] [cursor=pointer]: 鍞悗绠$悊
+ - listitem [ref=e136]:
+ - generic [ref=e137] [cursor=pointer]: 鍩虹璁炬柦
+ - listitem [ref=e143]:
+ - generic [ref=e144] [cursor=pointer]: 绯荤粺绠$悊
+ - generic [ref=e151] [cursor=pointer]
+ - generic [ref=e156]:
+ - generic [ref=e157]:
+ - banner [ref=e158]:
+ - button [ref=e159] [cursor=pointer]
+ - button [ref=e162] [cursor=pointer]
+ - navigation "breadcrumb" [ref=e167]:
+ - list [ref=e168]:
+ - listitem [ref=e649]:
+ - link "璐ㄩ噺绠$悊" [ref=e650] [cursor=pointer]:
+ - /url: javascript:void 0
+ - listitem [ref=e654]
+ - listitem [ref=e657]:
+ - link "鏉ユ枡妫�楠�" [disabled] [ref=e658]
+ - generic [ref=e177]:
+ - generic [ref=e179] [cursor=pointer]:
+ - generic [ref=e183]: 鎼滅储
+ - generic [ref=e184]: Ctrl K
+ - button [ref=e186] [cursor=pointer]
+ - button "dark" [ref=e191] [cursor=pointer]
+ - button [ref=e200] [cursor=pointer]
+ - button [ref=e206] [cursor=pointer]
+ - button [ref=e209] [cursor=pointer]
+ - button [ref=e215] [cursor=pointer]:
+ - button [ref=e217]
+ - button "宸ヤ綔鍙�" [ref=e221] [cursor=pointer]
+ - button [ref=e225] [cursor=pointer]:
+ - img "瓒呯骇绠$悊鍛�" [ref=e230]
+ - generic [ref=e232]:
+ - generic [ref=e237]:
+ - generic [ref=e238] [cursor=pointer]: 棣栭〉
+ - generic [ref=e664] [cursor=pointer]: 鏉ユ枡妫�楠�
+ - generic [ref=e254]:
+ - button [ref=e255] [cursor=pointer]
+ - generic [ref=e262] [cursor=pointer]
+ - generic [ref=e266] [cursor=pointer]
+ - main [ref=e273]:
+ - generic [ref=e684]:
+ - generic [ref=e689]:
+ - generic [ref=e690]: 妫�楠屽崟缂栧彿
+ - generic [ref=e693]:
+ - generic [ref=e694]: 渚涘簲鍟�
+ - generic [ref=e700] [cursor=pointer]:
+ - combobox "渚涘簲鍟�" [ref=e702]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e703]: 渚涘簲鍟嗘壒娆�
+ - generic [ref=e706]:
+ - generic [ref=e707]: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [ref=e714]
+ - generic [ref=e717]:
+ - generic [ref=e718]: 妫�娴嬬粨鏋�
+ - generic [ref=e724] [cursor=pointer]:
+ - combobox "妫�娴嬬粨鏋�" [ref=e726]
+ - generic: 璇烽�夋嫨妫�娴嬬粨鏋�
+ - generic [ref=e727]: 鏉ユ枡鏃ユ湡
+ - generic [ref=e730]: 妫�娴嬫棩鏈�
+ - generic [ref=e733]:
+ - generic [ref=e734]: 妫�娴嬩汉鍛�
+ - generic [ref=e740] [cursor=pointer]:
+ - combobox "妫�娴嬩汉鍛�" [ref=e742]
+ - generic: 璇烽�夋嫨妫�娴嬩汉鍛�
+ - generic [ref=e743]: 鏀惰捣
+ - generic [ref=e751]:
+ - generic [ref=e753]:
+ - generic [ref=e754]: 鏉ユ枡妫�楠屽崟鍒楄〃
+ - generic [ref=e758]:
+ - generic [ref=e760]:
+ - button "鏂板鏉ユ枡妫�楠屽崟" [ref=e762] [cursor=pointer]
+ - button "瀵煎嚭" [ref=e766] [cursor=pointer]
+ - button "顫�" [ref=e769] [cursor=pointer]
+ - generic [ref=e771]:
+ - button "瞟�" [ref=e772] [cursor=pointer]
+ - button "顪�" [ref=e774] [cursor=pointer]
+ - button "顦�" [ref=e776] [cursor=pointer]
+ - generic [ref=e783]:
+ - generic [ref=e784]:
+ - table [ref=e788]:
+ - rowgroup [ref=e805]:
+ - row [ref=e806]:
+ - columnheader "鏉ユ枡妫�楠屽崟缂栧彿" [ref=e807]
+ - columnheader "鏉ユ枡妫�楠屽崟鍚嶇О" [ref=e812]
+ - columnheader "渚涘簲鍟嗙畝绉�" [ref=e817]
+ - columnheader "渚涘簲鍟嗘壒娆″彿" [ref=e822]
+ - columnheader "浜у搧鐗╂枡缂栫爜" [ref=e827]
+ - columnheader "浜у搧鐗╂枡鍚嶇О" [ref=e832]
+ - columnheader "鎺ユ敹鏁伴噺" [ref=e837]
+ - columnheader "妫�娴嬫暟閲�" [ref=e842]
+ - columnheader "涓嶅悎鏍兼暟" [ref=e847]
+ - columnheader "妫�娴嬬粨鏋�" [ref=e852]
+ - columnheader "鏉ユ枡鏃ユ湡" [ref=e857]
+ - columnheader "妫�娴嬫棩鏈�" [ref=e862]
+ - columnheader "妫�娴嬩汉鍛�" [ref=e867]
+ - columnheader "鍗曟嵁鐘舵��" [ref=e872]
+ - generic [ref=e878]:
+ - table:
+ - rowgroup
+ - generic [ref=e880]:
+ - table [ref=e883]:
+ - rowgroup [ref=e900]:
+ - row [ref=e901]:
+ - columnheader "鎿嶄綔" [ref=e902]
+ - generic [ref=e908]:
+ - table:
+ - rowgroup
+ - generic [ref=e921]:
+ - generic [ref=e922]: 鍏� 0 鏉¤褰�
+ - generic [ref=e924] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e925]:
+ - textbox "璇烽�夋嫨" [ref=e926]: 20鏉�/椤�
+ - generic [ref=e927]: 睿�
+ - button "飱�" [ref=e930]
+ - button "顧�" [ref=e932]
+ - button "顫�" [ref=e934]
+ - button "1" [ref=e937] [cursor=pointer]
+ - button "顫�" [ref=e938]
+ - button "顧�" [ref=e940]
+ - button "顦�" [ref=e942]
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-09-18T06-17-54-686Z.yml b/.playwright-mcp/page-2026-09-18T06-17-54-686Z.yml
new file mode 100644
index 0000000..b61975b
--- /dev/null
+++ b/.playwright-mcp/page-2026-09-18T06-17-54-686Z.yml
@@ -0,0 +1,701 @@
+- generic [ref=e4]:
+ - generic [ref=e7]:
+ - complementary [ref=e8]:
+ - generic [ref=e9]:
+ - generic [ref=e10] [cursor=pointer]
+ - link "宸ヤ笟AI鏅洪�犲钩鍙� 宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e15] [cursor=pointer]:
+ - /url: javascript:void 0
+ - img "宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e18]
+ - generic [ref=e19]: 宸ヤ笟AI鏅洪�犲钩鍙�
+ - menu [ref=e22]:
+ - menuitem "棣栭〉" [ref=e23] [cursor=pointer]
+ - listitem [ref=e30]:
+ - generic [ref=e31] [cursor=pointer]: 鍩虹鏁版嵁
+ - listitem [ref=e39]:
+ - generic [ref=e40] [cursor=pointer]: 閲囪喘绠$悊
+ - listitem [ref=e46]:
+ - generic [ref=e47] [cursor=pointer]: 钀ラ攢绠$悊
+ - listitem [ref=e53]:
+ - generic [ref=e54] [cursor=pointer]: 璁惧绠$悊
+ - listitem [ref=e61]:
+ - generic [ref=e62] [cursor=pointer]: 浠撳偍鐗╂祦
+ - listitem [ref=e70]:
+ - generic [ref=e71] [cursor=pointer]: 宸ヨ壓璁捐
+ - listitem [ref=e78]:
+ - generic [ref=e79] [cursor=pointer]: 浜у搧璁捐
+ - listitem [ref=e85]:
+ - generic [ref=e86] [cursor=pointer]: 鐢熶骇绠℃帶
+ - listitem [ref=e93]:
+ - generic [ref=e94] [cursor=pointer]: 璐ㄩ噺绠$悊
+ - list [ref=e593]:
+ - menuitem "妫�娴嬮」璁剧疆" [ref=e594] [cursor=pointer]
+ - menuitem "璐ㄦ鏂规" [ref=e599] [cursor=pointer]
+ - menuitem "寰呮浠诲姟" [ref=e604] [cursor=pointer]
+ - menuitem "鏉ユ枡妫�楠�" [ref=e611] [cursor=pointer]
+ - menuitem "杩囩▼妫�楠�" [ref=e616] [cursor=pointer]
+ - menuitem "閫�鏂欐楠�" [ref=e621] [cursor=pointer]
+ - menuitem "鍑鸿揣妫�楠�" [ref=e626] [cursor=pointer]
+ - menuitem "鎵规杩芥函" [ref=e631] [cursor=pointer]
+ - menuitem "涓嶅悎鏍煎搧澶勭悊" [ref=e637] [cursor=pointer]
+ - menuitem "甯歌缂洪櫡" [ref=e642] [cursor=pointer]
+ - listitem [ref=e100]:
+ - generic [ref=e101] [cursor=pointer]: 鎶ヨ〃绠$悊
+ - listitem [ref=e108]:
+ - generic [ref=e109] [cursor=pointer]: 鍐崇瓥BI澶у睆
+ - listitem [ref=e115]:
+ - generic [ref=e116] [cursor=pointer]: 鍗忓悓鍔炲叕
+ - listitem [ref=e122]:
+ - generic [ref=e123] [cursor=pointer]: 浜哄姏璧勬簮
+ - listitem [ref=e129]:
+ - generic [ref=e130] [cursor=pointer]: 鍞悗绠$悊
+ - listitem [ref=e136]:
+ - generic [ref=e137] [cursor=pointer]: 鍩虹璁炬柦
+ - listitem [ref=e143]:
+ - generic [ref=e144] [cursor=pointer]: 绯荤粺绠$悊
+ - generic [ref=e151] [cursor=pointer]
+ - generic [ref=e156]:
+ - generic [ref=e157]:
+ - banner [ref=e158]:
+ - button [ref=e159] [cursor=pointer]
+ - button [ref=e162] [cursor=pointer]
+ - navigation "breadcrumb" [ref=e167]:
+ - list [ref=e168]:
+ - listitem [ref=e649]:
+ - link "璐ㄩ噺绠$悊" [ref=e650] [cursor=pointer]:
+ - /url: javascript:void 0
+ - listitem [ref=e654]
+ - listitem [ref=e657]:
+ - link "鏉ユ枡妫�楠�" [disabled] [ref=e658]
+ - generic [ref=e177]:
+ - generic [ref=e179] [cursor=pointer]:
+ - generic [ref=e183]: 鎼滅储
+ - generic [ref=e184]: Ctrl K
+ - button [ref=e186] [cursor=pointer]
+ - button "dark" [ref=e191] [cursor=pointer]
+ - button [ref=e200] [cursor=pointer]
+ - button [ref=e206] [cursor=pointer]
+ - button [ref=e209] [cursor=pointer]
+ - button [ref=e215] [cursor=pointer]:
+ - button [ref=e217]
+ - button "宸ヤ綔鍙�" [ref=e221] [cursor=pointer]
+ - button [ref=e225] [cursor=pointer]:
+ - img "瓒呯骇绠$悊鍛�" [ref=e230]
+ - generic [ref=e232]:
+ - generic [ref=e237]:
+ - generic [ref=e238] [cursor=pointer]: 棣栭〉
+ - generic [ref=e664] [cursor=pointer]: 鏉ユ枡妫�楠�
+ - generic [ref=e254]:
+ - button [ref=e255] [cursor=pointer]
+ - generic [ref=e262] [cursor=pointer]
+ - generic [ref=e266] [cursor=pointer]
+ - main [ref=e273]:
+ - generic [ref=e684]:
+ - generic [ref=e689]:
+ - generic [ref=e690]:
+ - generic [ref=e691]: 妫�楠屽崟缂栧彿
+ - textbox "妫�楠屽崟缂栧彿" [ref=e948]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - generic [ref=e693]:
+ - generic [ref=e694]: 渚涘簲鍟�
+ - generic [ref=e700] [cursor=pointer]:
+ - combobox "渚涘簲鍟�" [ref=e702]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e703]:
+ - generic [ref=e704]: 渚涘簲鍟嗘壒娆�
+ - textbox "渚涘簲鍟嗘壒娆�" [ref=e954]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - generic [ref=e706]:
+ - generic [ref=e707]: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [ref=e714]
+ - generic [ref=e717]:
+ - generic [ref=e718]: 妫�娴嬬粨鏋�
+ - generic [ref=e724] [cursor=pointer]:
+ - combobox "妫�娴嬬粨鏋�" [ref=e726]
+ - generic: 璇烽�夋嫨妫�娴嬬粨鏋�
+ - generic [ref=e727]:
+ - generic [ref=e728]: 鏉ユ枡鏃ユ湡
+ - generic [ref=e962]:
+ - textbox "鏉ユ枡鏃ユ湡" [ref=e964]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e966]:
+ - img "swap-right" [ref=e967]
+ - textbox "缁撴潫鏃堕棿" [ref=e971]
+ - generic:
+ - img "calendar"
+ - generic [ref=e730]:
+ - generic [ref=e731]: 妫�娴嬫棩鏈�
+ - generic [ref=e975]:
+ - textbox "妫�娴嬫棩鏈�" [ref=e977]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e979]:
+ - img "swap-right" [ref=e980]
+ - textbox "缁撴潫鏃堕棿" [ref=e984]
+ - generic:
+ - img "calendar"
+ - generic [ref=e733]:
+ - generic [ref=e734]: 妫�娴嬩汉鍛�
+ - generic [ref=e740] [cursor=pointer]:
+ - combobox "妫�娴嬩汉鍛�" [ref=e742]
+ - generic: 璇烽�夋嫨妫�娴嬩汉鍛�
+ - generic [ref=e743]:
+ - button "閲� 缃�" [ref=e985] [cursor=pointer]
+ - button "鎼� 绱�" [ref=e987] [cursor=pointer]
+ - generic [ref=e744] [cursor=pointer]: 鏀惰捣
+ - generic [ref=e751]:
+ - generic [ref=e753]:
+ - generic [ref=e754]: 鏉ユ枡妫�楠屽崟鍒楄〃
+ - generic [ref=e758]:
+ - generic [ref=e760]:
+ - button "鏂板鏉ユ枡妫�楠屽崟" [ref=e762] [cursor=pointer]
+ - button "瀵煎嚭" [ref=e766] [cursor=pointer]
+ - button "顫�" [ref=e769] [cursor=pointer]
+ - generic [ref=e771]:
+ - button "瞟�" [ref=e772] [cursor=pointer]
+ - button "顪�" [ref=e774] [cursor=pointer]
+ - button "顦�" [ref=e776] [cursor=pointer]
+ - generic [ref=e783]:
+ - generic [ref=e784]:
+ - table [ref=e788]:
+ - rowgroup [ref=e805]:
+ - row [ref=e806]:
+ - columnheader "鏉ユ枡妫�楠屽崟缂栧彿" [ref=e807]
+ - columnheader "鏉ユ枡妫�楠屽崟鍚嶇О" [ref=e812]
+ - columnheader "渚涘簲鍟嗙畝绉�" [ref=e817]
+ - columnheader "渚涘簲鍟嗘壒娆″彿" [ref=e822]
+ - columnheader "浜у搧鐗╂枡缂栫爜" [ref=e827]
+ - columnheader "浜у搧鐗╂枡鍚嶇О" [ref=e832]
+ - columnheader "鎺ユ敹鏁伴噺" [ref=e837]
+ - columnheader "妫�娴嬫暟閲�" [ref=e842]
+ - columnheader "涓嶅悎鏍兼暟" [ref=e847]
+ - columnheader "妫�娴嬬粨鏋�" [ref=e852]
+ - columnheader "鏉ユ枡鏃ユ湡" [ref=e857]
+ - columnheader "妫�娴嬫棩鏈�" [ref=e862]
+ - columnheader "妫�娴嬩汉鍛�" [ref=e867]
+ - columnheader "鍗曟嵁鐘舵��" [ref=e872]
+ - table [ref=e993]:
+ - rowgroup [ref=e1010]:
+ - row "IQC-DEMO-03 澹儻鏉ユ枡妫�楠�-03 JN-20260918-A03 4 澹儻 800 80 4 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1011]:
+ - cell [ref=e1012]:
+ - button "IQC-DEMO-03" [ref=e1015] [cursor=pointer]
+ - cell "澹儻鏉ユ枡妫�楠�-03" [ref=e1017]
+ - cell [ref=e1021]
+ - cell "JN-20260918-A03" [ref=e1025]
+ - cell "4" [ref=e1029]
+ - cell "澹儻" [ref=e1033]
+ - cell "800" [ref=e1037]
+ - cell "80" [ref=e1041]
+ - cell "4" [ref=e1045]
+ - cell [ref=e1049]
+ - cell "2026-09-17" [ref=e1051]
+ - cell "2026-09-18" [ref=e1055]
+ - cell "寮犱笁" [ref=e1059]
+ - cell "宸插畬鎴�" [ref=e1063]
+ - row "IQC-DEMO-02 绮捐悩鏉ユ枡妫�楠�-02 JN-20260918-A02 2 绮捐悩 1500 150 0 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1067]:
+ - cell [ref=e1068]:
+ - button "IQC-DEMO-02" [ref=e1071] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-02" [ref=e1073]
+ - cell [ref=e1077]
+ - cell "JN-20260918-A02" [ref=e1081]
+ - cell "2" [ref=e1085]
+ - cell "绮捐悩" [ref=e1089]
+ - cell "1500" [ref=e1093]
+ - cell "150" [ref=e1097]
+ - cell "0" [ref=e1101]
+ - cell "鏍¢獙閫氳繃" [ref=e1105]
+ - cell "2026-09-17" [ref=e1109]
+ - cell "2026-09-18" [ref=e1113]
+ - cell "寮犱笁" [ref=e1117]
+ - cell "宸插畬鎴�" [ref=e1121]
+ - row "IQC-DEMO-01 绮捐悩鏉ユ枡妫�楠�-01 JN-20260918-A01 2 绮捐悩 2000 200 2 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1125]:
+ - cell [ref=e1126]:
+ - button "IQC-DEMO-01" [active] [ref=e1129] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-01" [ref=e1131]
+ - cell [ref=e1135]
+ - cell "JN-20260918-A01" [ref=e1139]
+ - cell "2" [ref=e1143]
+ - cell "绮捐悩" [ref=e1147]
+ - cell "2000" [ref=e1151]
+ - cell "200" [ref=e1155]
+ - cell "2" [ref=e1159]
+ - cell "鏍¢獙閫氳繃" [ref=e1163]
+ - cell "2026-09-17" [ref=e1167]
+ - cell "2026-09-18" [ref=e1171]
+ - cell "寮犱笁" [ref=e1175]
+ - cell "宸插畬鎴�" [ref=e1179]
+ - row "IQC_20260917001 绮捐悩鏉ユ枡妫�楠�-0917 2 绮捐悩 100 100 0 2026-09-17 2026-09-17 瓒呯骇绠$悊鍛� 鑽夌" [ref=e1183]:
+ - cell [ref=e1184]:
+ - button "IQC_20260917001" [ref=e1187] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-0917" [ref=e1189]
+ - cell [ref=e1193]
+ - cell [ref=e1197]
+ - cell "2" [ref=e1201]
+ - cell "绮捐悩" [ref=e1205]
+ - cell "100" [ref=e1209]
+ - cell "100" [ref=e1213]
+ - cell "0" [ref=e1217]
+ - cell [ref=e1221]
+ - cell "2026-09-17" [ref=e1223]
+ - cell "2026-09-17" [ref=e1227]
+ - cell "瓒呯骇绠$悊鍛�" [ref=e1231]
+ - cell "鑽夌" [ref=e1235]
+ - generic [ref=e880]:
+ - table [ref=e883]:
+ - rowgroup [ref=e900]:
+ - row [ref=e901]:
+ - columnheader "鎿嶄綔" [ref=e902]
+ - table [ref=e1239]:
+ - rowgroup [ref=e1242]:
+ - row [ref=e1243]:
+ - cell [ref=e1244]:
+ - generic [ref=e1248]:
+ - button "璇︽儏" [ref=e1250] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1257] [cursor=pointer]
+ - row [ref=e1263]:
+ - cell [ref=e1264]:
+ - generic [ref=e1268]:
+ - button "璇︽儏" [ref=e1270] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1277] [cursor=pointer]
+ - row [ref=e1283]:
+ - cell [ref=e1284]:
+ - generic [ref=e1288]:
+ - button "璇︽儏" [ref=e1290] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1297] [cursor=pointer]
+ - row [ref=e1303]:
+ - cell [ref=e1304]:
+ - generic [ref=e1308]:
+ - button "淇敼" [ref=e1310] [cursor=pointer]
+ - button "鍒犻櫎" [ref=e1317] [cursor=pointer]
+ - button "璇︽儏" [ref=e1322] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1329] [cursor=pointer]
+ - generic [ref=e921]:
+ - generic [ref=e922]: 鍏� 4 鏉¤褰�
+ - generic [ref=e924] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e925]:
+ - textbox "璇烽�夋嫨" [ref=e926]: 20鏉�/椤�
+ - generic [ref=e927]: 睿�
+ - button "飱�" [ref=e930]
+ - button "顧�" [ref=e932]
+ - button "顫�" [ref=e934]
+ - button "1" [ref=e937] [cursor=pointer]
+ - button "顫�" [ref=e938]
+ - button "顧�" [ref=e940]
+ - button "顦�" [ref=e942]
+ - dialog [ref=e1336]:
+ - heading "鏌ョ湅鏉ユ枡妫�楠屽崟" [level=2] [ref=e1338]
+ - generic [ref=e1340]:
+ - generic [ref=e1342]:
+ - generic [ref=e1343]:
+ - generic [ref=e1344]:
+ - generic [ref=e1345]: "*"
+ - text: 妫�楠屽崟缂栧彿
+ - generic [ref=e1349]:
+ - textbox "* 妫�楠屽崟缂栧彿" [disabled] [ref=e1350]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - text: IQC-DEMO-01
+ - button "鐢� 鎴�" [disabled] [ref=e1352]
+ - generic [ref=e1354]:
+ - generic [ref=e1355]:
+ - generic [ref=e1356]: "*"
+ - text: 妫�楠屽崟鍚嶇О
+ - textbox "* 妫�楠屽崟鍚嶇О" [disabled] [ref=e1361]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟鍚嶇О
+ - text: 绮捐悩鏉ユ枡妫�楠�-01
+ - generic [ref=e1362]:
+ - generic [ref=e1363]:
+ - generic [ref=e1364]: "*"
+ - text: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [disabled] [ref=e1371]: 绮捐悩
+ - generic [ref=e1377]:
+ - generic [ref=e1378]: 渚涘簲鍟�
+ - generic [ref=e1384]:
+ - combobox "渚涘簲鍟�" [disabled] [ref=e1386]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e1387]:
+ - generic [ref=e1388]: 渚涘簲鍟嗘壒娆″彿
+ - textbox "渚涘簲鍟嗘壒娆″彿" [disabled] [ref=e1393]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - text: JN-20260918-A01
+ - generic [ref=e1394]:
+ - generic [ref=e1395]:
+ - generic [ref=e1396]: "*"
+ - text: 鏈鎺ユ敹鏁伴噺
+ - spinbutton "* 鏈鎺ユ敹鏁伴噺" [disabled] [ref=e1403]: "2000.00"
+ - generic [ref=e1404]:
+ - generic [ref=e1405]:
+ - generic [ref=e1406]: "*"
+ - text: 鍚堟牸鍝佹暟閲�
+ - spinbutton "* 鍚堟牸鍝佹暟閲�" [disabled] [ref=e1413]: "198"
+ - generic [ref=e1414]:
+ - generic [ref=e1415]:
+ - generic [ref=e1416]: "*"
+ - text: 涓嶅悎鏍煎搧鏁伴噺
+ - img [ref=e1417] [cursor=pointer]
+ - spinbutton "* 涓嶅悎鏍煎搧鏁伴噺" [disabled] [ref=e1426]: "2"
+ - generic [ref=e1427]:
+ - generic [ref=e1428]:
+ - generic [ref=e1429]: "*"
+ - text: 鏉ユ枡鏃ユ湡
+ - generic [ref=e1435]:
+ - textbox "* 鏉ユ枡鏃ユ湡" [disabled] [ref=e1436]:
+ - /placeholder: 璇烽�夋嫨鏉ユ枡鏃ユ湡
+ - text: 2026-09-17
+ - generic:
+ - img "calendar"
+ - generic [ref=e1437]:
+ - generic [ref=e1438]:
+ - generic [ref=e1439]: "*"
+ - text: 妫�娴嬩汉鍛�
+ - generic [ref=e1445]:
+ - combobox "* 妫�娴嬩汉鍛�" [disabled] [ref=e1447]
+ - generic "寮犱笁" [ref=e1448]
+ - generic [ref=e1449]:
+ - generic [ref=e1450]:
+ - generic [ref=e1451]: "*"
+ - text: 妫�娴嬫棩鏈�
+ - generic [ref=e1457]:
+ - textbox "* 妫�娴嬫棩鏈�" [disabled] [ref=e1458]:
+ - /placeholder: 璇烽�夋嫨妫�娴嬫棩鏈�
+ - text: 2026-09-18
+ - generic:
+ - img "calendar"
+ - generic [ref=e1459]:
+ - generic [ref=e1460]: 妫�娴嬬粨鏋�
+ - generic [ref=e1466]:
+ - combobox "妫�娴嬬粨鏋�" [disabled] [ref=e1468]
+ - generic "鏍¢獙閫氳繃" [ref=e1469]
+ - generic [ref=e1470]:
+ - generic [ref=e1471]: 澶囨敞
+ - textbox "澶囨敞" [disabled] [ref=e1476]:
+ - /placeholder: 璇疯緭鍏ュ娉�
+ - text: 婕旂ず鏁版嵁
+ - generic [ref=e1478]:
+ - generic [ref=e1479]: 缂洪櫡鎯呭喌
+ - table [ref=e1482]:
+ - rowgroup [ref=e1483]:
+ - row [ref=e1484]:
+ - rowheader "鑷村懡缂洪櫡鏁�" [ref=e1485]
+ - cell "0" [ref=e1486]
+ - rowheader "涓ラ噸缂洪櫡鏁�" [ref=e1488]
+ - cell "0" [ref=e1489]
+ - rowheader "杞诲井缂洪櫡鏁�" [ref=e1491]
+ - cell "0" [ref=e1492]
+ - row [ref=e1494]:
+ - rowheader "鑷村懡缂洪櫡鐜�" [ref=e1495]
+ - cell "0%" [ref=e1496]
+ - rowheader "涓ラ噸缂洪櫡鐜�" [ref=e1498]
+ - cell "0%" [ref=e1499]
+ - rowheader "杞诲井缂洪櫡鐜�" [ref=e1501]
+ - cell "0%" [ref=e1502]
+ - generic [ref=e1504]:
+ - tablist [ref=e1505]:
+ - generic [ref=e1507]:
+ - tab "妫�楠岄」" [selected] [ref=e1509] [cursor=pointer]
+ - tab "妫�娴嬬粨鏋�" [ref=e1511] [cursor=pointer]
+ - tabpanel "妫�楠岄」" [ref=e1514]:
+ - generic [ref=e1519]:
+ - generic [ref=e1521]:
+ - generic [ref=e1522]: 妫�楠岄」
+ - generic [ref=e1525]:
+ - button "瞟�" [ref=e1526] [cursor=pointer]
+ - button "顪�" [ref=e1528] [cursor=pointer]
+ - button "顦�" [ref=e1530] [cursor=pointer]
+ - generic [ref=e1537]:
+ - generic [ref=e1538]:
+ - table [ref=e1542]:
+ - rowgroup [ref=e1557]:
+ - row [ref=e1558]:
+ - columnheader "妫�娴嬮」鍚嶇О" [ref=e1559]
+ - columnheader "妫�娴嬮」绫诲瀷" [ref=e1564]
+ - columnheader "妫�娴嬪伐鍏�" [ref=e1569]
+ - columnheader "妫�娴嬭姹�" [ref=e1574]
+ - columnheader "鏍囧噯鍊�" [ref=e1579]
+ - columnheader "鍗曚綅" [ref=e1584]
+ - columnheader "璇樊涓婇檺" [ref=e1589]
+ - columnheader "璇樊涓嬮檺" [ref=e1594]
+ - columnheader "鑷村懡缂洪櫡鏁�" [ref=e1599]
+ - columnheader "涓ラ噸缂洪櫡鏁�" [ref=e1604]
+ - columnheader "杞诲井缂洪櫡鏁�" [ref=e1609]
+ - columnheader "澶囨敞" [ref=e1614]
+ - table [ref=e1622]:
+ - rowgroup [ref=e1637]:
+ - row "澶栬 鎬ц兘 鐩祴 搴旀緞娓呴�忔槑锛屾棤鏈烘鏉傝川" [ref=e1638]:
+ - cell "澶栬" [ref=e1639]
+ - cell "鎬ц兘" [ref=e1643]
+ - cell "鐩祴" [ref=e1647]
+ - cell "搴旀緞娓呴�忔槑锛屾棤鏈烘鏉傝川" [ref=e1651]
+ - cell [ref=e1655]
+ - cell [ref=e1659]
+ - cell [ref=e1663]
+ - cell [ref=e1667]
+ - cell [ref=e1671]
+ - cell [ref=e1675]
+ - cell [ref=e1679]
+ - cell [ref=e1683]
+ - row "鑹插害 鎬ц兘 閾傞挻姣旇壊浠� 鑹插害 Hazen 鈮� 10 10" [ref=e1687]:
+ - cell "鑹插害" [ref=e1688]
+ - cell "鎬ц兘" [ref=e1692]
+ - cell "閾傞挻姣旇壊浠�" [ref=e1696]
+ - cell "鑹插害 Hazen 鈮� 10" [ref=e1700]
+ - cell "10" [ref=e1704]
+ - cell [ref=e1708]
+ - cell [ref=e1712]
+ - cell [ref=e1716]
+ - cell [ref=e1720]
+ - cell [ref=e1724]
+ - cell [ref=e1728]
+ - cell [ref=e1732]
+ - row "姘村垎 鎬ц兘 鍗″皵璐逛紤姘村垎浠� 姘村垎娴嬪畾鍒嗙粍" [ref=e1736]:
+ - cell "姘村垎" [ref=e1737]
+ - cell "鎬ц兘" [ref=e1741]
+ - cell "鍗″皵璐逛紤姘村垎浠�" [ref=e1745]
+ - cell "姘村垎娴嬪畾鍒嗙粍" [ref=e1749]
+ - cell [ref=e1753]
+ - cell [ref=e1757]
+ - cell [ref=e1761]
+ - cell [ref=e1765]
+ - cell [ref=e1769]
+ - cell [ref=e1773]
+ - cell [ref=e1777]
+ - cell [ref=e1781]
+ - row "璇曟牱璐ㄩ噺 m 鎬ц兘 鍒嗘瀽澶╁钩 绉伴噺" [ref=e1785]:
+ - cell "璇曟牱璐ㄩ噺 m" [ref=e1786]
+ - cell "鎬ц兘" [ref=e1790]
+ - cell "鍒嗘瀽澶╁钩" [ref=e1794]
+ - cell "绉伴噺" [ref=e1798]
+ - cell [ref=e1802]
+ - cell [ref=e1806]
+ - cell [ref=e1810]
+ - cell [ref=e1814]
+ - cell [ref=e1818]
+ - cell [ref=e1822]
+ - cell [ref=e1826]
+ - cell [ref=e1830]
+ - row "璇曟牱+绉伴噺鐡� m1 鎬ц兘 鍒嗘瀽澶╁钩 绉伴噺" [ref=e1834]:
+ - cell "璇曟牱+绉伴噺鐡� m1" [ref=e1835]
+ - cell "鎬ц兘" [ref=e1839]
+ - cell "鍒嗘瀽澶╁钩" [ref=e1843]
+ - cell "绉伴噺" [ref=e1847]
+ - cell [ref=e1851]
+ - cell [ref=e1855]
+ - cell [ref=e1859]
+ - cell [ref=e1863]
+ - cell [ref=e1867]
+ - cell [ref=e1871]
+ - cell [ref=e1875]
+ - cell [ref=e1879]
+ - row "绉伴噺鐡� m0 鎬ц兘 鍒嗘瀽澶╁钩 绉伴噺" [ref=e1883]:
+ - cell "绉伴噺鐡� m0" [ref=e1884]
+ - cell "鎬ц兘" [ref=e1888]
+ - cell "鍒嗘瀽澶╁钩" [ref=e1892]
+ - cell "绉伴噺" [ref=e1896]
+ - cell [ref=e1900]
+ - cell [ref=e1904]
+ - cell [ref=e1908]
+ - cell [ref=e1912]
+ - cell [ref=e1916]
+ - cell [ref=e1920]
+ - cell [ref=e1924]
+ - cell [ref=e1928]
+ - row "姘村垎缁撴灉 w 鎬ц兘 鎸夊叕寮忚绠�" [ref=e1932]:
+ - cell "姘村垎缁撴灉 w" [ref=e1933]
+ - cell "鎬ц兘" [ref=e1937]
+ - cell [ref=e1941]
+ - cell "鎸夊叕寮忚绠�" [ref=e1945]
+ - cell [ref=e1949]
+ - cell [ref=e1953]
+ - cell [ref=e1957]
+ - cell [ref=e1961]
+ - cell [ref=e1965]
+ - cell [ref=e1969]
+ - cell [ref=e1973]
+ - cell [ref=e1977]
+ - row "閰稿惈閲� 鎬ц兘 鐢典綅婊村畾浠� 閰稿惈閲忔祴瀹氬垎缁�" [ref=e1981]:
+ - cell "閰稿惈閲�" [ref=e1982]
+ - cell "鎬ц兘" [ref=e1986]
+ - cell "鐢典綅婊村畾浠�" [ref=e1990]
+ - cell "閰稿惈閲忔祴瀹氬垎缁�" [ref=e1994]
+ - cell [ref=e1998]
+ - cell [ref=e2002]
+ - cell [ref=e2006]
+ - cell [ref=e2010]
+ - cell [ref=e2014]
+ - cell [ref=e2018]
+ - cell [ref=e2022]
+ - cell [ref=e2026]
+ - row "鏍囨恫娴撳害 c 鎬ц兘 鑷姩鐢典綅婊村畾浠� 鏍囧畾" [ref=e2030]:
+ - cell "鏍囨恫娴撳害 c" [ref=e2031]
+ - cell "鎬ц兘" [ref=e2035]
+ - cell "鑷姩鐢典綅婊村畾浠�" [ref=e2039]
+ - cell "鏍囧畾" [ref=e2043]
+ - cell [ref=e2047]
+ - cell [ref=e2051]
+ - cell [ref=e2055]
+ - cell [ref=e2059]
+ - cell [ref=e2063]
+ - cell [ref=e2067]
+ - cell [ref=e2071]
+ - cell [ref=e2075]
+ - row "娑堣�楁淮瀹氭恫浣撶Н V 鎬ц兘 鑷姩鐢典綅婊村畾浠� 婊村畾" [ref=e2079]:
+ - cell "娑堣�楁淮瀹氭恫浣撶Н V" [ref=e2080]
+ - cell "鎬ц兘" [ref=e2084]
+ - cell "鑷姩鐢典綅婊村畾浠�" [ref=e2088]
+ - cell "婊村畾" [ref=e2092]
+ - cell [ref=e2096]
+ - cell [ref=e2100]
+ - cell [ref=e2104]
+ - cell [ref=e2108]
+ - cell [ref=e2112]
+ - cell [ref=e2116]
+ - cell [ref=e2120]
+ - cell [ref=e2124]
+ - row "璇曟牱璐ㄩ噺 m 鎬ц兘 鍒嗘瀽澶╁钩 绉伴噺" [ref=e2128]:
+ - cell "璇曟牱璐ㄩ噺 m" [ref=e2129]
+ - cell "鎬ц兘" [ref=e2133]
+ - cell "鍒嗘瀽澶╁钩" [ref=e2137]
+ - cell "绉伴噺" [ref=e2141]
+ - cell [ref=e2145]
+ - cell [ref=e2149]
+ - cell [ref=e2153]
+ - cell [ref=e2157]
+ - cell [ref=e2161]
+ - cell [ref=e2165]
+ - cell [ref=e2169]
+ - cell [ref=e2173]
+ - row "閰稿惈閲忕粨鏋� w3 鎬ц兘 鎸夊叕寮忚绠�" [ref=e2177]:
+ - cell "閰稿惈閲忕粨鏋� w3" [ref=e2178]
+ - cell "鎬ц兘" [ref=e2182]
+ - cell [ref=e2186]
+ - cell "鎸夊叕寮忚绠�" [ref=e2190]
+ - cell [ref=e2194]
+ - cell [ref=e2198]
+ - cell [ref=e2202]
+ - cell [ref=e2206]
+ - cell [ref=e2210]
+ - cell [ref=e2214]
+ - cell [ref=e2218]
+ - cell [ref=e2222]
+ - row "姝d竵閱囧惈閲� 鎬ц兘 姘旂浉鑹茶氨浠� 姝d竵閱囧惈閲忔祴瀹氬垎缁�" [ref=e2226]:
+ - cell "姝d竵閱囧惈閲�" [ref=e2227]
+ - cell "鎬ц兘" [ref=e2231]
+ - cell "姘旂浉鑹茶氨浠�" [ref=e2235]
+ - cell "姝d竵閱囧惈閲忔祴瀹氬垎缁�" [ref=e2239]
+ - cell [ref=e2243]
+ - cell [ref=e2247]
+ - cell [ref=e2251]
+ - cell [ref=e2255]
+ - cell [ref=e2259]
+ - cell [ref=e2263]
+ - cell [ref=e2267]
+ - cell [ref=e2271]
+ - row "姝d竵閱囧惈閲� /% 鎬ц兘 姘旂浉鑹茶氨浠� 澶栨爣娉�" [ref=e2275]:
+ - cell "姝d竵閱囧惈閲� /%" [ref=e2276]
+ - cell "鎬ц兘" [ref=e2280]
+ - cell "姘旂浉鑹茶氨浠�" [ref=e2284]
+ - cell "澶栨爣娉�" [ref=e2288]
+ - cell [ref=e2292]
+ - cell [ref=e2296]
+ - cell [ref=e2300]
+ - cell [ref=e2304]
+ - cell [ref=e2308]
+ - cell [ref=e2312]
+ - cell [ref=e2316]
+ - cell [ref=e2320]
+ - row "瀵嗗害 鎬ц兘 瀵嗗害璁� 瀵嗗害 (20鈩�) 809~812 810" [ref=e2324]:
+ - cell "瀵嗗害" [ref=e2325]
+ - cell "鎬ц兘" [ref=e2329]
+ - cell "瀵嗗害璁�" [ref=e2333]
+ - cell "瀵嗗害 (20鈩�) 809~812" [ref=e2337]
+ - cell "810" [ref=e2341]
+ - cell [ref=e2345]
+ - cell [ref=e2349]
+ - cell [ref=e2353]
+ - cell [ref=e2357]
+ - cell [ref=e2361]
+ - cell [ref=e2365]
+ - cell [ref=e2369]
+ - row "鎶樺厜鐜� 鎬ц兘 闃胯礉鎶樺厜浠� 鎶樺厜鐜� n虏鈦癉 1.399" [ref=e2373]:
+ - cell "鎶樺厜鐜�" [ref=e2374]
+ - cell "鎬ц兘" [ref=e2378]
+ - cell "闃胯礉鎶樺厜浠�" [ref=e2382]
+ - cell "鎶樺厜鐜� n虏鈦癉" [ref=e2386]
+ - cell "1.399" [ref=e2390]
+ - cell [ref=e2394]
+ - cell [ref=e2398]
+ - cell [ref=e2402]
+ - cell [ref=e2406]
+ - cell [ref=e2410]
+ - cell [ref=e2414]
+ - cell [ref=e2418]
+ - generic [ref=e2422]:
+ - table [ref=e2425]:
+ - rowgroup [ref=e2440]:
+ - row [ref=e2441]:
+ - columnheader "鎿嶄綔" [ref=e2442]
+ - table [ref=e2449]:
+ - rowgroup [ref=e2452]:
+ - row [ref=e2453]:
+ - cell [ref=e2454]:
+ - button "缂洪櫡鍒楄〃" [ref=e2460] [cursor=pointer]
+ - row [ref=e2466]:
+ - cell [ref=e2467]:
+ - button "缂洪櫡鍒楄〃" [ref=e2473] [cursor=pointer]
+ - row [ref=e2479]:
+ - cell [ref=e2480]:
+ - button "缂洪櫡鍒楄〃" [ref=e2486] [cursor=pointer]
+ - row [ref=e2492]:
+ - cell [ref=e2493]:
+ - button "缂洪櫡鍒楄〃" [ref=e2499] [cursor=pointer]
+ - row [ref=e2505]:
+ - cell [ref=e2506]:
+ - button "缂洪櫡鍒楄〃" [ref=e2512] [cursor=pointer]
+ - row [ref=e2518]:
+ - cell [ref=e2519]:
+ - button "缂洪櫡鍒楄〃" [ref=e2525] [cursor=pointer]
+ - row [ref=e2531]:
+ - cell [ref=e2532]:
+ - button "缂洪櫡鍒楄〃" [ref=e2538] [cursor=pointer]
+ - row [ref=e2544]:
+ - cell [ref=e2545]:
+ - button "缂洪櫡鍒楄〃" [ref=e2551] [cursor=pointer]
+ - row [ref=e2557]:
+ - cell [ref=e2558]:
+ - button "缂洪櫡鍒楄〃" [ref=e2564] [cursor=pointer]
+ - row [ref=e2570]:
+ - cell [ref=e2571]:
+ - button "缂洪櫡鍒楄〃" [ref=e2577] [cursor=pointer]
+ - row [ref=e2583]:
+ - cell [ref=e2584]:
+ - button "缂洪櫡鍒楄〃" [ref=e2590] [cursor=pointer]
+ - row [ref=e2596]:
+ - cell [ref=e2597]:
+ - button "缂洪櫡鍒楄〃" [ref=e2603] [cursor=pointer]
+ - row [ref=e2609]:
+ - cell [ref=e2610]:
+ - button "缂洪櫡鍒楄〃" [ref=e2616] [cursor=pointer]
+ - row [ref=e2622]:
+ - cell [ref=e2623]:
+ - button "缂洪櫡鍒楄〃" [ref=e2629] [cursor=pointer]
+ - row [ref=e2635]:
+ - cell [ref=e2636]:
+ - button "缂洪櫡鍒楄〃" [ref=e2642] [cursor=pointer]
+ - row [ref=e2648]:
+ - cell [ref=e2649]:
+ - button "缂洪櫡鍒楄〃" [ref=e2655] [cursor=pointer]
+ - generic [ref=e2673]:
+ - generic [ref=e2674]: 鍏� 16 鏉¤褰�
+ - generic [ref=e2676] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e2677]:
+ - textbox "璇烽�夋嫨" [ref=e2678]: 20鏉�/椤�
+ - generic [ref=e2679]: 睿�
+ - button "飱�" [ref=e2682]
+ - button "顧�" [ref=e2684]
+ - button "顫�" [ref=e2686]
+ - button "1" [ref=e2689] [cursor=pointer]
+ - button "顫�" [ref=e2690]
+ - button "顧�" [ref=e2692]
+ - button "顦�" [ref=e2694]
+ - button [ref=e2696] [cursor=pointer]
+ - generic [ref=e2706]:
+ - button "璐ㄦ鍔╂墜" [ref=e2708] [cursor=pointer]
+ - button "鍙� 娑�" [ref=e2710] [cursor=pointer]
+ - button [ref=e2712] [cursor=pointer]
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-09-18T06-18-24-102Z.yml b/.playwright-mcp/page-2026-09-18T06-18-24-102Z.yml
new file mode 100644
index 0000000..d3450d6
--- /dev/null
+++ b/.playwright-mcp/page-2026-09-18T06-18-24-102Z.yml
@@ -0,0 +1,437 @@
+- generic [ref=e4]:
+ - generic [ref=e7]:
+ - complementary [ref=e8]:
+ - generic [ref=e9]:
+ - generic [ref=e10] [cursor=pointer]
+ - link "宸ヤ笟AI鏅洪�犲钩鍙� 宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e15] [cursor=pointer]:
+ - /url: javascript:void 0
+ - img "宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e18]
+ - generic [ref=e19]: 宸ヤ笟AI鏅洪�犲钩鍙�
+ - menu [ref=e22]:
+ - menuitem "棣栭〉" [ref=e23] [cursor=pointer]
+ - listitem [ref=e30]:
+ - generic [ref=e31] [cursor=pointer]: 鍩虹鏁版嵁
+ - listitem [ref=e39]:
+ - generic [ref=e40] [cursor=pointer]: 閲囪喘绠$悊
+ - listitem [ref=e46]:
+ - generic [ref=e47] [cursor=pointer]: 钀ラ攢绠$悊
+ - listitem [ref=e53]:
+ - generic [ref=e54] [cursor=pointer]: 璁惧绠$悊
+ - listitem [ref=e61]:
+ - generic [ref=e62] [cursor=pointer]: 浠撳偍鐗╂祦
+ - listitem [ref=e70]:
+ - generic [ref=e71] [cursor=pointer]: 宸ヨ壓璁捐
+ - listitem [ref=e78]:
+ - generic [ref=e79] [cursor=pointer]: 浜у搧璁捐
+ - listitem [ref=e85]:
+ - generic [ref=e86] [cursor=pointer]: 鐢熶骇绠℃帶
+ - listitem [ref=e93]:
+ - generic [ref=e94] [cursor=pointer]: 璐ㄩ噺绠$悊
+ - list [ref=e593]:
+ - menuitem "妫�娴嬮」璁剧疆" [ref=e594] [cursor=pointer]
+ - menuitem "璐ㄦ鏂规" [ref=e599] [cursor=pointer]
+ - menuitem "寰呮浠诲姟" [ref=e604] [cursor=pointer]
+ - menuitem "鏉ユ枡妫�楠�" [ref=e611] [cursor=pointer]
+ - menuitem "杩囩▼妫�楠�" [ref=e616] [cursor=pointer]
+ - menuitem "閫�鏂欐楠�" [ref=e621] [cursor=pointer]
+ - menuitem "鍑鸿揣妫�楠�" [ref=e626] [cursor=pointer]
+ - menuitem "鎵规杩芥函" [ref=e631] [cursor=pointer]
+ - menuitem "涓嶅悎鏍煎搧澶勭悊" [ref=e637] [cursor=pointer]
+ - menuitem "甯歌缂洪櫡" [ref=e642] [cursor=pointer]
+ - listitem [ref=e100]:
+ - generic [ref=e101] [cursor=pointer]: 鎶ヨ〃绠$悊
+ - listitem [ref=e108]:
+ - generic [ref=e109] [cursor=pointer]: 鍐崇瓥BI澶у睆
+ - listitem [ref=e115]:
+ - generic [ref=e116] [cursor=pointer]: 鍗忓悓鍔炲叕
+ - listitem [ref=e122]:
+ - generic [ref=e123] [cursor=pointer]: 浜哄姏璧勬簮
+ - listitem [ref=e129]:
+ - generic [ref=e130] [cursor=pointer]: 鍞悗绠$悊
+ - listitem [ref=e136]:
+ - generic [ref=e137] [cursor=pointer]: 鍩虹璁炬柦
+ - listitem [ref=e143]:
+ - generic [ref=e144] [cursor=pointer]: 绯荤粺绠$悊
+ - generic [ref=e151] [cursor=pointer]
+ - generic [ref=e156]:
+ - generic [ref=e157]:
+ - banner [ref=e158]:
+ - button [ref=e159] [cursor=pointer]
+ - button [ref=e162] [cursor=pointer]
+ - navigation "breadcrumb" [ref=e167]:
+ - list [ref=e168]:
+ - listitem [ref=e649]:
+ - link "璐ㄩ噺绠$悊" [ref=e650] [cursor=pointer]:
+ - /url: javascript:void 0
+ - listitem [ref=e654]
+ - listitem [ref=e657]:
+ - link "鏉ユ枡妫�楠�" [disabled] [ref=e658]
+ - generic [ref=e177]:
+ - generic [ref=e179] [cursor=pointer]:
+ - generic [ref=e183]: 鎼滅储
+ - generic [ref=e184]: Ctrl K
+ - button [ref=e186] [cursor=pointer]
+ - button "dark" [ref=e191] [cursor=pointer]
+ - button [ref=e200] [cursor=pointer]
+ - button [ref=e206] [cursor=pointer]
+ - button [ref=e209] [cursor=pointer]
+ - button [ref=e215] [cursor=pointer]:
+ - button [ref=e217]
+ - button "宸ヤ綔鍙�" [ref=e221] [cursor=pointer]
+ - button [ref=e225] [cursor=pointer]:
+ - img "瓒呯骇绠$悊鍛�" [ref=e230]
+ - generic [ref=e232]:
+ - generic [ref=e237]:
+ - generic [ref=e238] [cursor=pointer]: 棣栭〉
+ - generic [ref=e664] [cursor=pointer]: 鏉ユ枡妫�楠�
+ - generic [ref=e254]:
+ - button [ref=e255] [cursor=pointer]
+ - generic [ref=e262] [cursor=pointer]
+ - generic [ref=e266] [cursor=pointer]
+ - main [ref=e273]:
+ - generic [ref=e684]:
+ - generic [ref=e689]:
+ - generic [ref=e690]:
+ - generic [ref=e691]: 妫�楠屽崟缂栧彿
+ - textbox "妫�楠屽崟缂栧彿" [ref=e948]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - generic [ref=e693]:
+ - generic [ref=e694]: 渚涘簲鍟�
+ - generic [ref=e700] [cursor=pointer]:
+ - combobox "渚涘簲鍟�" [ref=e702]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e703]:
+ - generic [ref=e704]: 渚涘簲鍟嗘壒娆�
+ - textbox "渚涘簲鍟嗘壒娆�" [ref=e954]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - generic [ref=e706]:
+ - generic [ref=e707]: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [ref=e714]
+ - generic [ref=e717]:
+ - generic [ref=e718]: 妫�娴嬬粨鏋�
+ - generic [ref=e724] [cursor=pointer]:
+ - combobox "妫�娴嬬粨鏋�" [ref=e726]
+ - generic: 璇烽�夋嫨妫�娴嬬粨鏋�
+ - generic [ref=e727]:
+ - generic [ref=e728]: 鏉ユ枡鏃ユ湡
+ - generic [ref=e962]:
+ - textbox "鏉ユ枡鏃ユ湡" [ref=e964]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e966]:
+ - img "swap-right" [ref=e967]
+ - textbox "缁撴潫鏃堕棿" [ref=e971]
+ - generic:
+ - img "calendar"
+ - generic [ref=e730]:
+ - generic [ref=e731]: 妫�娴嬫棩鏈�
+ - generic [ref=e975]:
+ - textbox "妫�娴嬫棩鏈�" [ref=e977]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e979]:
+ - img "swap-right" [ref=e980]
+ - textbox "缁撴潫鏃堕棿" [ref=e984]
+ - generic:
+ - img "calendar"
+ - generic [ref=e733]:
+ - generic [ref=e734]: 妫�娴嬩汉鍛�
+ - generic [ref=e740] [cursor=pointer]:
+ - combobox "妫�娴嬩汉鍛�" [ref=e742]
+ - generic: 璇烽�夋嫨妫�娴嬩汉鍛�
+ - generic [ref=e743]:
+ - button "閲� 缃�" [ref=e985] [cursor=pointer]
+ - button "鎼� 绱�" [ref=e987] [cursor=pointer]
+ - generic [ref=e744] [cursor=pointer]: 鏀惰捣
+ - generic [ref=e751]:
+ - generic [ref=e753]:
+ - generic [ref=e754]: 鏉ユ枡妫�楠屽崟鍒楄〃
+ - generic [ref=e758]:
+ - generic [ref=e760]:
+ - button "鏂板鏉ユ枡妫�楠屽崟" [ref=e762] [cursor=pointer]
+ - button "瀵煎嚭" [ref=e766] [cursor=pointer]
+ - button "顫�" [ref=e769] [cursor=pointer]
+ - generic [ref=e771]:
+ - button "瞟�" [ref=e772] [cursor=pointer]
+ - button "顪�" [ref=e774] [cursor=pointer]
+ - button "顦�" [ref=e776] [cursor=pointer]
+ - generic [ref=e783]:
+ - generic [ref=e784]:
+ - table [ref=e788]:
+ - rowgroup [ref=e805]:
+ - row [ref=e806]:
+ - columnheader "鏉ユ枡妫�楠屽崟缂栧彿" [ref=e807]
+ - columnheader "鏉ユ枡妫�楠屽崟鍚嶇О" [ref=e812]
+ - columnheader "渚涘簲鍟嗙畝绉�" [ref=e817]
+ - columnheader "渚涘簲鍟嗘壒娆″彿" [ref=e822]
+ - columnheader "浜у搧鐗╂枡缂栫爜" [ref=e827]
+ - columnheader "浜у搧鐗╂枡鍚嶇О" [ref=e832]
+ - columnheader "鎺ユ敹鏁伴噺" [ref=e837]
+ - columnheader "妫�娴嬫暟閲�" [ref=e842]
+ - columnheader "涓嶅悎鏍兼暟" [ref=e847]
+ - columnheader "妫�娴嬬粨鏋�" [ref=e852]
+ - columnheader "鏉ユ枡鏃ユ湡" [ref=e857]
+ - columnheader "妫�娴嬫棩鏈�" [ref=e862]
+ - columnheader "妫�娴嬩汉鍛�" [ref=e867]
+ - columnheader "鍗曟嵁鐘舵��" [ref=e872]
+ - table [ref=e993]:
+ - rowgroup [ref=e1010]:
+ - row "IQC-DEMO-03 澹儻鏉ユ枡妫�楠�-03 JN-20260918-A03 4 澹儻 800 80 4 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1011]:
+ - cell [ref=e1012]:
+ - button "IQC-DEMO-03" [ref=e1015] [cursor=pointer]
+ - cell "澹儻鏉ユ枡妫�楠�-03" [ref=e1017]
+ - cell [ref=e1021]
+ - cell "JN-20260918-A03" [ref=e1025]
+ - cell "4" [ref=e1029]
+ - cell "澹儻" [ref=e1033]
+ - cell "800" [ref=e1037]
+ - cell "80" [ref=e1041]
+ - cell "4" [ref=e1045]
+ - cell [ref=e1049]
+ - cell "2026-09-17" [ref=e1051]
+ - cell "2026-09-18" [ref=e1055]
+ - cell "寮犱笁" [ref=e1059]
+ - cell "宸插畬鎴�" [ref=e1063]
+ - row "IQC-DEMO-02 绮捐悩鏉ユ枡妫�楠�-02 JN-20260918-A02 2 绮捐悩 1500 150 0 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1067]:
+ - cell [ref=e1068]:
+ - button "IQC-DEMO-02" [ref=e1071] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-02" [ref=e1073]
+ - cell [ref=e1077]
+ - cell "JN-20260918-A02" [ref=e1081]
+ - cell "2" [ref=e1085]
+ - cell "绮捐悩" [ref=e1089]
+ - cell "1500" [ref=e1093]
+ - cell "150" [ref=e1097]
+ - cell "0" [ref=e1101]
+ - cell "鏍¢獙閫氳繃" [ref=e1105]
+ - cell "2026-09-17" [ref=e1109]
+ - cell "2026-09-18" [ref=e1113]
+ - cell "寮犱笁" [ref=e1117]
+ - cell "宸插畬鎴�" [ref=e1121]
+ - row "IQC-DEMO-01 绮捐悩鏉ユ枡妫�楠�-01 JN-20260918-A01 2 绮捐悩 2000 200 2 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1125]:
+ - cell [ref=e1126]:
+ - button "IQC-DEMO-01" [ref=e1129] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-01" [ref=e1131]
+ - cell [ref=e1135]
+ - cell "JN-20260918-A01" [ref=e1139]
+ - cell "2" [ref=e1143]
+ - cell "绮捐悩" [ref=e1147]
+ - cell "2000" [ref=e1151]
+ - cell "200" [ref=e1155]
+ - cell "2" [ref=e1159]
+ - cell "鏍¢獙閫氳繃" [ref=e1163]
+ - cell "2026-09-17" [ref=e1167]
+ - cell "2026-09-18" [ref=e1171]
+ - cell "寮犱笁" [ref=e1175]
+ - cell "宸插畬鎴�" [ref=e1179]
+ - row "IQC_20260917001 绮捐悩鏉ユ枡妫�楠�-0917 2 绮捐悩 100 100 0 2026-09-17 2026-09-17 瓒呯骇绠$悊鍛� 鑽夌" [ref=e1183]:
+ - cell [ref=e1184]:
+ - button "IQC_20260917001" [ref=e1187] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-0917" [ref=e1189]
+ - cell [ref=e1193]
+ - cell [ref=e1197]
+ - cell "2" [ref=e1201]
+ - cell "绮捐悩" [ref=e1205]
+ - cell "100" [ref=e1209]
+ - cell "100" [ref=e1213]
+ - cell "0" [ref=e1217]
+ - cell [ref=e1221]
+ - cell "2026-09-17" [ref=e1223]
+ - cell "2026-09-17" [ref=e1227]
+ - cell "瓒呯骇绠$悊鍛�" [ref=e1231]
+ - cell "鑽夌" [ref=e1235]
+ - generic [ref=e880]:
+ - table [ref=e883]:
+ - rowgroup [ref=e900]:
+ - row [ref=e901]:
+ - columnheader "鎿嶄綔" [ref=e902]
+ - table [ref=e1239]:
+ - rowgroup [ref=e1242]:
+ - row [ref=e1243]:
+ - cell [ref=e1244]:
+ - generic [ref=e1248]:
+ - button "璇︽儏" [ref=e1250] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1257] [cursor=pointer]
+ - row [ref=e1263]:
+ - cell [ref=e1264]:
+ - generic [ref=e1268]:
+ - button "璇︽儏" [ref=e1270] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1277] [cursor=pointer]
+ - row [ref=e1283]:
+ - cell [ref=e1284]:
+ - generic [ref=e1288]:
+ - button "璇︽儏" [ref=e1290] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1297] [cursor=pointer]
+ - row [ref=e1303]:
+ - cell [ref=e1304]:
+ - generic [ref=e1308]:
+ - button "淇敼" [ref=e1310] [cursor=pointer]
+ - button "鍒犻櫎" [ref=e1317] [cursor=pointer]
+ - button "璇︽儏" [ref=e1322] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1329] [cursor=pointer]
+ - generic [ref=e921]:
+ - generic [ref=e922]: 鍏� 4 鏉¤褰�
+ - generic [ref=e924] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e925]:
+ - textbox "璇烽�夋嫨" [ref=e926]: 20鏉�/椤�
+ - generic [ref=e927]: 睿�
+ - button "飱�" [ref=e930]
+ - button "顧�" [ref=e932]
+ - button "顫�" [ref=e934]
+ - button "1" [ref=e937] [cursor=pointer]
+ - button "顫�" [ref=e938]
+ - button "顧�" [ref=e940]
+ - button "顦�" [ref=e942]
+ - dialog [ref=e1336]:
+ - heading "鏌ョ湅鏉ユ枡妫�楠屽崟" [level=2] [ref=e1338]
+ - generic [ref=e1340]:
+ - generic [ref=e1342]:
+ - generic [ref=e1343]:
+ - generic [ref=e1344]:
+ - generic [ref=e1345]: "*"
+ - text: 妫�楠屽崟缂栧彿
+ - generic [ref=e1349]:
+ - textbox "* 妫�楠屽崟缂栧彿" [disabled] [ref=e1350]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - text: IQC-DEMO-01
+ - button "鐢� 鎴�" [disabled] [ref=e1352]
+ - generic [ref=e1354]:
+ - generic [ref=e1355]:
+ - generic [ref=e1356]: "*"
+ - text: 妫�楠屽崟鍚嶇О
+ - textbox "* 妫�楠屽崟鍚嶇О" [disabled] [ref=e1361]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟鍚嶇О
+ - text: 绮捐悩鏉ユ枡妫�楠�-01
+ - generic [ref=e1362]:
+ - generic [ref=e1363]:
+ - generic [ref=e1364]: "*"
+ - text: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [disabled] [ref=e1371]: 绮捐悩
+ - generic [ref=e1377]:
+ - generic [ref=e1378]: 渚涘簲鍟�
+ - generic [ref=e1384]:
+ - combobox "渚涘簲鍟�" [disabled] [ref=e1386]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e1387]:
+ - generic [ref=e1388]: 渚涘簲鍟嗘壒娆″彿
+ - textbox "渚涘簲鍟嗘壒娆″彿" [disabled] [ref=e1393]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - text: JN-20260918-A01
+ - generic [ref=e1394]:
+ - generic [ref=e1395]:
+ - generic [ref=e1396]: "*"
+ - text: 鏈鎺ユ敹鏁伴噺
+ - spinbutton "* 鏈鎺ユ敹鏁伴噺" [disabled] [ref=e1403]: "2000.00"
+ - generic [ref=e1404]:
+ - generic [ref=e1405]:
+ - generic [ref=e1406]: "*"
+ - text: 鍚堟牸鍝佹暟閲�
+ - spinbutton "* 鍚堟牸鍝佹暟閲�" [disabled] [ref=e1413]: "198"
+ - generic [ref=e1414]:
+ - generic [ref=e1415]:
+ - generic [ref=e1416]: "*"
+ - text: 涓嶅悎鏍煎搧鏁伴噺
+ - img [ref=e1417] [cursor=pointer]
+ - spinbutton "* 涓嶅悎鏍煎搧鏁伴噺" [disabled] [ref=e1426]: "2"
+ - generic [ref=e1427]:
+ - generic [ref=e1428]:
+ - generic [ref=e1429]: "*"
+ - text: 鏉ユ枡鏃ユ湡
+ - generic [ref=e1435]:
+ - textbox "* 鏉ユ枡鏃ユ湡" [disabled] [ref=e1436]:
+ - /placeholder: 璇烽�夋嫨鏉ユ枡鏃ユ湡
+ - text: 2026-09-17
+ - generic:
+ - img "calendar"
+ - generic [ref=e1437]:
+ - generic [ref=e1438]:
+ - generic [ref=e1439]: "*"
+ - text: 妫�娴嬩汉鍛�
+ - generic [ref=e1445]:
+ - combobox "* 妫�娴嬩汉鍛�" [disabled] [ref=e1447]
+ - generic "寮犱笁" [ref=e1448]
+ - generic [ref=e1449]:
+ - generic [ref=e1450]:
+ - generic [ref=e1451]: "*"
+ - text: 妫�娴嬫棩鏈�
+ - generic [ref=e1457]:
+ - textbox "* 妫�娴嬫棩鏈�" [disabled] [ref=e1458]:
+ - /placeholder: 璇烽�夋嫨妫�娴嬫棩鏈�
+ - text: 2026-09-18
+ - generic:
+ - img "calendar"
+ - generic [ref=e1459]:
+ - generic [ref=e1460]: 妫�娴嬬粨鏋�
+ - generic [ref=e1466]:
+ - combobox "妫�娴嬬粨鏋�" [disabled] [ref=e1468]
+ - generic "鏍¢獙閫氳繃" [ref=e1469]
+ - generic [ref=e1470]:
+ - generic [ref=e1471]: 澶囨敞
+ - textbox "澶囨敞" [disabled] [ref=e1476]:
+ - /placeholder: 璇疯緭鍏ュ娉�
+ - text: 婕旂ず鏁版嵁
+ - generic [ref=e1478]:
+ - generic [ref=e1479]: 缂洪櫡鎯呭喌
+ - table [ref=e1482]:
+ - rowgroup [ref=e1483]:
+ - row [ref=e1484]:
+ - rowheader "鑷村懡缂洪櫡鏁�" [ref=e1485]
+ - cell "0" [ref=e1486]
+ - rowheader "涓ラ噸缂洪櫡鏁�" [ref=e1488]
+ - cell "0" [ref=e1489]
+ - rowheader "杞诲井缂洪櫡鏁�" [ref=e1491]
+ - cell "0" [ref=e1492]
+ - row [ref=e1494]:
+ - rowheader "鑷村懡缂洪櫡鐜�" [ref=e1495]
+ - cell "0%" [ref=e1496]
+ - rowheader "涓ラ噸缂洪櫡鐜�" [ref=e1498]
+ - cell "0%" [ref=e1499]
+ - rowheader "杞诲井缂洪櫡鐜�" [ref=e1501]
+ - cell "0%" [ref=e1502]
+ - generic [ref=e1504]:
+ - tablist [ref=e1505]:
+ - generic [ref=e1507]:
+ - tab "妫�楠岄」" [ref=e1509] [cursor=pointer]
+ - tab "妫�娴嬬粨鏋�" [active] [selected] [ref=e1511] [cursor=pointer]
+ - generic [ref=e1513]:
+ - text: 瞟� 顪� 顦� 睿� 飱� 顧� 顫� 顫� 顧� 顦�
+ - tabpanel "妫�娴嬬粨鏋�" [ref=e2716]:
+ - generic [ref=e2721]:
+ - generic [ref=e2723]:
+ - generic [ref=e2724]: 妫�娴嬬粨鏋�
+ - generic [ref=e2727]:
+ - button "瞟�" [ref=e2728] [cursor=pointer]
+ - button "顪�" [ref=e2730] [cursor=pointer]
+ - button "顦�" [ref=e2732] [cursor=pointer]
+ - generic [ref=e2740]:
+ - table [ref=e2744]:
+ - rowgroup [ref=e2750]:
+ - row [ref=e2751]:
+ - columnheader "鏍峰搧缂栧彿" [ref=e2752]
+ - columnheader "鐗╄祫SN" [ref=e2757]
+ - columnheader "澶囨敞" [ref=e2762]
+ - columnheader "鎿嶄綔" [ref=e2767]
+ - table [ref=e2775]:
+ - rowgroup [ref=e2781]:
+ - row "MIR-DEMO-01 YP-A001 璇︽儏" [ref=e2782]:
+ - cell "MIR-DEMO-01" [ref=e2783]
+ - cell "YP-A001" [ref=e2787]
+ - cell [ref=e2791]
+ - cell [ref=e2795]:
+ - button "璇︽儏" [ref=e2801] [cursor=pointer]
+ - generic [ref=e2809]:
+ - generic [ref=e2810]: 鍏� 1 鏉¤褰�
+ - generic [ref=e2812] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e2813]:
+ - textbox "璇烽�夋嫨" [ref=e2814]: 20鏉�/椤�
+ - generic [ref=e2815]: 睿�
+ - button "飱�" [ref=e2818]
+ - button "顧�" [ref=e2820]
+ - button "顫�" [ref=e2822]
+ - button "1" [ref=e2825] [cursor=pointer]
+ - button "顫�" [ref=e2826]
+ - button "顧�" [ref=e2828]
+ - button "顦�" [ref=e2830]
+ - button [ref=e2696] [cursor=pointer]
+ - generic [ref=e2706]:
+ - button "璐ㄦ鍔╂墜" [ref=e2708] [cursor=pointer]
+ - button "鍙� 娑�" [ref=e2710] [cursor=pointer]
+ - button [ref=e2712] [cursor=pointer]
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-09-18T06-19-31-080Z.yml b/.playwright-mcp/page-2026-09-18T06-19-31-080Z.yml
new file mode 100644
index 0000000..a537c8d
--- /dev/null
+++ b/.playwright-mcp/page-2026-09-18T06-19-31-080Z.yml
@@ -0,0 +1,701 @@
+- generic [ref=e4]:
+ - generic [ref=e7]:
+ - complementary [ref=e8]:
+ - generic [ref=e9]:
+ - generic [ref=e10] [cursor=pointer]
+ - link "宸ヤ笟AI鏅洪�犲钩鍙� 宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e15] [cursor=pointer]:
+ - /url: javascript:void 0
+ - img "宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e18]
+ - generic [ref=e19]: 宸ヤ笟AI鏅洪�犲钩鍙�
+ - menu [ref=e22]:
+ - menuitem "棣栭〉" [ref=e23] [cursor=pointer]
+ - listitem [ref=e30]:
+ - generic [ref=e31] [cursor=pointer]: 鍩虹鏁版嵁
+ - listitem [ref=e39]:
+ - generic [ref=e40] [cursor=pointer]: 閲囪喘绠$悊
+ - listitem [ref=e46]:
+ - generic [ref=e47] [cursor=pointer]: 钀ラ攢绠$悊
+ - listitem [ref=e53]:
+ - generic [ref=e54] [cursor=pointer]: 璁惧绠$悊
+ - listitem [ref=e61]:
+ - generic [ref=e62] [cursor=pointer]: 浠撳偍鐗╂祦
+ - listitem [ref=e70]:
+ - generic [ref=e71] [cursor=pointer]: 宸ヨ壓璁捐
+ - listitem [ref=e78]:
+ - generic [ref=e79] [cursor=pointer]: 浜у搧璁捐
+ - listitem [ref=e85]:
+ - generic [ref=e86] [cursor=pointer]: 鐢熶骇绠℃帶
+ - listitem [ref=e93]:
+ - generic [ref=e94] [cursor=pointer]: 璐ㄩ噺绠$悊
+ - list [ref=e593]:
+ - menuitem "妫�娴嬮」璁剧疆" [ref=e594] [cursor=pointer]
+ - menuitem "璐ㄦ鏂规" [ref=e599] [cursor=pointer]
+ - menuitem "寰呮浠诲姟" [ref=e604] [cursor=pointer]
+ - menuitem "鏉ユ枡妫�楠�" [ref=e611] [cursor=pointer]
+ - menuitem "杩囩▼妫�楠�" [ref=e616] [cursor=pointer]
+ - menuitem "閫�鏂欐楠�" [ref=e621] [cursor=pointer]
+ - menuitem "鍑鸿揣妫�楠�" [ref=e626] [cursor=pointer]
+ - menuitem "鎵规杩芥函" [ref=e631] [cursor=pointer]
+ - menuitem "涓嶅悎鏍煎搧澶勭悊" [ref=e637] [cursor=pointer]
+ - menuitem "甯歌缂洪櫡" [ref=e642] [cursor=pointer]
+ - listitem [ref=e100]:
+ - generic [ref=e101] [cursor=pointer]: 鎶ヨ〃绠$悊
+ - listitem [ref=e108]:
+ - generic [ref=e109] [cursor=pointer]: 鍐崇瓥BI澶у睆
+ - listitem [ref=e115]:
+ - generic [ref=e116] [cursor=pointer]: 鍗忓悓鍔炲叕
+ - listitem [ref=e122]:
+ - generic [ref=e123] [cursor=pointer]: 浜哄姏璧勬簮
+ - listitem [ref=e129]:
+ - generic [ref=e130] [cursor=pointer]: 鍞悗绠$悊
+ - listitem [ref=e136]:
+ - generic [ref=e137] [cursor=pointer]: 鍩虹璁炬柦
+ - listitem [ref=e143]:
+ - generic [ref=e144] [cursor=pointer]: 绯荤粺绠$悊
+ - generic [ref=e151] [cursor=pointer]
+ - generic [ref=e156]:
+ - generic [ref=e157]:
+ - banner [ref=e158]:
+ - button [ref=e159] [cursor=pointer]
+ - button [ref=e162] [cursor=pointer]
+ - navigation "breadcrumb" [ref=e167]:
+ - list [ref=e168]:
+ - listitem [ref=e649]:
+ - link "璐ㄩ噺绠$悊" [ref=e650] [cursor=pointer]:
+ - /url: javascript:void 0
+ - listitem [ref=e654]
+ - listitem [ref=e657]:
+ - link "鏉ユ枡妫�楠�" [disabled] [ref=e658]
+ - generic [ref=e177]:
+ - generic [ref=e179] [cursor=pointer]:
+ - generic [ref=e183]: 鎼滅储
+ - generic [ref=e184]: Ctrl K
+ - button [ref=e186] [cursor=pointer]
+ - button "dark" [ref=e191] [cursor=pointer]
+ - button [ref=e200] [cursor=pointer]
+ - button [ref=e206] [cursor=pointer]
+ - button [ref=e209] [cursor=pointer]
+ - button [ref=e215] [cursor=pointer]:
+ - button [ref=e217]
+ - button "宸ヤ綔鍙�" [ref=e221] [cursor=pointer]
+ - button [ref=e225] [cursor=pointer]:
+ - img "瓒呯骇绠$悊鍛�" [ref=e230]
+ - generic [ref=e232]:
+ - generic [ref=e237]:
+ - generic [ref=e238] [cursor=pointer]: 棣栭〉
+ - generic [ref=e664] [cursor=pointer]: 鏉ユ枡妫�楠�
+ - generic [ref=e254]:
+ - button [ref=e255] [cursor=pointer]
+ - generic [ref=e262] [cursor=pointer]
+ - generic [ref=e266] [cursor=pointer]
+ - main [ref=e273]:
+ - generic [ref=e684]:
+ - generic [ref=e689]:
+ - generic [ref=e690]:
+ - generic [ref=e691]: 妫�楠屽崟缂栧彿
+ - textbox "妫�楠屽崟缂栧彿" [ref=e948]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - generic [ref=e693]:
+ - generic [ref=e694]: 渚涘簲鍟�
+ - generic [ref=e700] [cursor=pointer]:
+ - combobox "渚涘簲鍟�" [ref=e702]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e703]:
+ - generic [ref=e704]: 渚涘簲鍟嗘壒娆�
+ - textbox "渚涘簲鍟嗘壒娆�" [ref=e954]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - generic [ref=e706]:
+ - generic [ref=e707]: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [ref=e714]
+ - generic [ref=e717]:
+ - generic [ref=e718]: 妫�娴嬬粨鏋�
+ - generic [ref=e724] [cursor=pointer]:
+ - combobox "妫�娴嬬粨鏋�" [ref=e726]
+ - generic: 璇烽�夋嫨妫�娴嬬粨鏋�
+ - generic [ref=e727]:
+ - generic [ref=e728]: 鏉ユ枡鏃ユ湡
+ - generic [ref=e962]:
+ - textbox "鏉ユ枡鏃ユ湡" [ref=e964]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e966]:
+ - img "swap-right" [ref=e967]
+ - textbox "缁撴潫鏃堕棿" [ref=e971]
+ - generic:
+ - img "calendar"
+ - generic [ref=e730]:
+ - generic [ref=e731]: 妫�娴嬫棩鏈�
+ - generic [ref=e975]:
+ - textbox "妫�娴嬫棩鏈�" [ref=e977]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e979]:
+ - img "swap-right" [ref=e980]
+ - textbox "缁撴潫鏃堕棿" [ref=e984]
+ - generic:
+ - img "calendar"
+ - generic [ref=e733]:
+ - generic [ref=e734]: 妫�娴嬩汉鍛�
+ - generic [ref=e740] [cursor=pointer]:
+ - combobox "妫�娴嬩汉鍛�" [ref=e742]
+ - generic: 璇烽�夋嫨妫�娴嬩汉鍛�
+ - generic [ref=e743]:
+ - button "閲� 缃�" [ref=e985] [cursor=pointer]
+ - button "鎼� 绱�" [ref=e987] [cursor=pointer]
+ - generic [ref=e744] [cursor=pointer]: 鏀惰捣
+ - generic [ref=e751]:
+ - generic [ref=e753]:
+ - generic [ref=e754]: 鏉ユ枡妫�楠屽崟鍒楄〃
+ - generic [ref=e758]:
+ - generic [ref=e760]:
+ - button "鏂板鏉ユ枡妫�楠屽崟" [ref=e762] [cursor=pointer]
+ - button "瀵煎嚭" [ref=e766] [cursor=pointer]
+ - button "顫�" [ref=e769] [cursor=pointer]
+ - generic [ref=e771]:
+ - button "瞟�" [ref=e772] [cursor=pointer]
+ - button "顪�" [ref=e774] [cursor=pointer]
+ - button "顦�" [ref=e776] [cursor=pointer]
+ - generic [ref=e783]:
+ - generic [ref=e784]:
+ - table [ref=e788]:
+ - rowgroup [ref=e805]:
+ - row [ref=e806]:
+ - columnheader "鏉ユ枡妫�楠屽崟缂栧彿" [ref=e807]
+ - columnheader "鏉ユ枡妫�楠屽崟鍚嶇О" [ref=e812]
+ - columnheader "渚涘簲鍟嗙畝绉�" [ref=e817]
+ - columnheader "渚涘簲鍟嗘壒娆″彿" [ref=e822]
+ - columnheader "浜у搧鐗╂枡缂栫爜" [ref=e827]
+ - columnheader "浜у搧鐗╂枡鍚嶇О" [ref=e832]
+ - columnheader "鎺ユ敹鏁伴噺" [ref=e837]
+ - columnheader "妫�娴嬫暟閲�" [ref=e842]
+ - columnheader "涓嶅悎鏍兼暟" [ref=e847]
+ - columnheader "妫�娴嬬粨鏋�" [ref=e852]
+ - columnheader "鏉ユ枡鏃ユ湡" [ref=e857]
+ - columnheader "妫�娴嬫棩鏈�" [ref=e862]
+ - columnheader "妫�娴嬩汉鍛�" [ref=e867]
+ - columnheader "鍗曟嵁鐘舵��" [ref=e872]
+ - table [ref=e993]:
+ - rowgroup [ref=e1010]:
+ - row "IQC-DEMO-03 澹儻鏉ユ枡妫�楠�-03 JN-20260918-A03 4 澹儻 800 80 4 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1011]:
+ - cell [ref=e1012]:
+ - button "IQC-DEMO-03" [ref=e1015] [cursor=pointer]
+ - cell "澹儻鏉ユ枡妫�楠�-03" [ref=e1017]
+ - cell [ref=e1021]
+ - cell "JN-20260918-A03" [ref=e1025]
+ - cell "4" [ref=e1029]
+ - cell "澹儻" [ref=e1033]
+ - cell "800" [ref=e1037]
+ - cell "80" [ref=e1041]
+ - cell "4" [ref=e1045]
+ - cell [ref=e1049]
+ - cell "2026-09-17" [ref=e1051]
+ - cell "2026-09-18" [ref=e1055]
+ - cell "寮犱笁" [ref=e1059]
+ - cell "宸插畬鎴�" [ref=e1063]
+ - row "IQC-DEMO-02 绮捐悩鏉ユ枡妫�楠�-02 JN-20260918-A02 2 绮捐悩 1500 150 0 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1067]:
+ - cell [ref=e1068]:
+ - button "IQC-DEMO-02" [ref=e1071] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-02" [ref=e1073]
+ - cell [ref=e1077]
+ - cell "JN-20260918-A02" [ref=e1081]
+ - cell "2" [ref=e1085]
+ - cell "绮捐悩" [ref=e1089]
+ - cell "1500" [ref=e1093]
+ - cell "150" [ref=e1097]
+ - cell "0" [ref=e1101]
+ - cell "鏍¢獙閫氳繃" [ref=e1105]
+ - cell "2026-09-17" [ref=e1109]
+ - cell "2026-09-18" [ref=e1113]
+ - cell "寮犱笁" [ref=e1117]
+ - cell "宸插畬鎴�" [ref=e1121]
+ - row "IQC-DEMO-01 绮捐悩鏉ユ枡妫�楠�-01 JN-20260918-A01 2 绮捐悩 2000 200 2 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1125]:
+ - cell [ref=e1126]:
+ - button "IQC-DEMO-01" [active] [ref=e1129] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-01" [ref=e1131]
+ - cell [ref=e1135]
+ - cell "JN-20260918-A01" [ref=e1139]
+ - cell "2" [ref=e1143]
+ - cell "绮捐悩" [ref=e1147]
+ - cell "2000" [ref=e1151]
+ - cell "200" [ref=e1155]
+ - cell "2" [ref=e1159]
+ - cell "鏍¢獙閫氳繃" [ref=e1163]
+ - cell "2026-09-17" [ref=e1167]
+ - cell "2026-09-18" [ref=e1171]
+ - cell "寮犱笁" [ref=e1175]
+ - cell "宸插畬鎴�" [ref=e1179]
+ - row "IQC_20260917001 绮捐悩鏉ユ枡妫�楠�-0917 2 绮捐悩 100 100 0 2026-09-17 2026-09-17 瓒呯骇绠$悊鍛� 鑽夌" [ref=e1183]:
+ - cell [ref=e1184]:
+ - button "IQC_20260917001" [ref=e1187] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-0917" [ref=e1189]
+ - cell [ref=e1193]
+ - cell [ref=e1197]
+ - cell "2" [ref=e1201]
+ - cell "绮捐悩" [ref=e1205]
+ - cell "100" [ref=e1209]
+ - cell "100" [ref=e1213]
+ - cell "0" [ref=e1217]
+ - cell [ref=e1221]
+ - cell "2026-09-17" [ref=e1223]
+ - cell "2026-09-17" [ref=e1227]
+ - cell "瓒呯骇绠$悊鍛�" [ref=e1231]
+ - cell "鑽夌" [ref=e1235]
+ - generic [ref=e880]:
+ - table [ref=e883]:
+ - rowgroup [ref=e900]:
+ - row [ref=e901]:
+ - columnheader "鎿嶄綔" [ref=e902]
+ - table [ref=e1239]:
+ - rowgroup [ref=e1242]:
+ - row [ref=e1243]:
+ - cell [ref=e1244]:
+ - generic [ref=e1248]:
+ - button "璇︽儏" [ref=e1250] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1257] [cursor=pointer]
+ - row [ref=e1263]:
+ - cell [ref=e1264]:
+ - generic [ref=e1268]:
+ - button "璇︽儏" [ref=e1270] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1277] [cursor=pointer]
+ - row [ref=e1283]:
+ - cell [ref=e1284]:
+ - generic [ref=e1288]:
+ - button "璇︽儏" [ref=e1290] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1297] [cursor=pointer]
+ - row [ref=e1303]:
+ - cell [ref=e1304]:
+ - generic [ref=e1308]:
+ - button "淇敼" [ref=e1310] [cursor=pointer]
+ - button "鍒犻櫎" [ref=e1317] [cursor=pointer]
+ - button "璇︽儏" [ref=e1322] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1329] [cursor=pointer]
+ - generic [ref=e921]:
+ - generic [ref=e922]: 鍏� 4 鏉¤褰�
+ - generic [ref=e924] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e925]:
+ - textbox "璇烽�夋嫨" [ref=e926]: 20鏉�/椤�
+ - generic [ref=e927]: 睿�
+ - button "飱�" [ref=e930]
+ - button "顧�" [ref=e932]
+ - button "顫�" [ref=e934]
+ - button "1" [ref=e937] [cursor=pointer]
+ - button "顫�" [ref=e938]
+ - button "顧�" [ref=e940]
+ - button "顦�" [ref=e942]
+ - dialog [ref=e2833]:
+ - heading "鏌ョ湅鏉ユ枡妫�楠屽崟" [level=2] [ref=e2835]
+ - generic [ref=e2837]:
+ - generic [ref=e2839]:
+ - generic [ref=e2840]:
+ - generic [ref=e2841]:
+ - generic [ref=e2842]: "*"
+ - text: 妫�楠屽崟缂栧彿
+ - generic [ref=e2846]:
+ - textbox "* 妫�楠屽崟缂栧彿" [disabled] [ref=e2847]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - text: IQC-DEMO-01
+ - button "鐢� 鎴�" [disabled] [ref=e2849]
+ - generic [ref=e2851]:
+ - generic [ref=e2852]:
+ - generic [ref=e2853]: "*"
+ - text: 妫�楠屽崟鍚嶇О
+ - textbox "* 妫�楠屽崟鍚嶇О" [disabled] [ref=e2858]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟鍚嶇О
+ - text: 绮捐悩鏉ユ枡妫�楠�-01
+ - generic [ref=e2859]:
+ - generic [ref=e2860]:
+ - generic [ref=e2861]: "*"
+ - text: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [disabled] [ref=e2868]: 绮捐悩
+ - generic [ref=e2874]:
+ - generic [ref=e2875]: 渚涘簲鍟�
+ - generic [ref=e2881]:
+ - combobox "渚涘簲鍟�" [disabled] [ref=e2883]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e2884]:
+ - generic [ref=e2885]: 渚涘簲鍟嗘壒娆″彿
+ - textbox "渚涘簲鍟嗘壒娆″彿" [disabled] [ref=e2890]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - text: JN-20260918-A01
+ - generic [ref=e2891]:
+ - generic [ref=e2892]:
+ - generic [ref=e2893]: "*"
+ - text: 鏈鎺ユ敹鏁伴噺
+ - spinbutton "* 鏈鎺ユ敹鏁伴噺" [disabled] [ref=e2900]: "2000.00"
+ - generic [ref=e2901]:
+ - generic [ref=e2902]:
+ - generic [ref=e2903]: "*"
+ - text: 鍚堟牸鍝佹暟閲�
+ - spinbutton "* 鍚堟牸鍝佹暟閲�" [disabled] [ref=e2910]: "198"
+ - generic [ref=e2911]:
+ - generic [ref=e2912]:
+ - generic [ref=e2913]: "*"
+ - text: 涓嶅悎鏍煎搧鏁伴噺
+ - img [ref=e2914] [cursor=pointer]
+ - spinbutton "* 涓嶅悎鏍煎搧鏁伴噺" [disabled] [ref=e2923]: "2"
+ - generic [ref=e2924]:
+ - generic [ref=e2925]:
+ - generic [ref=e2926]: "*"
+ - text: 鏉ユ枡鏃ユ湡
+ - generic [ref=e2932]:
+ - textbox "* 鏉ユ枡鏃ユ湡" [disabled] [ref=e2933]:
+ - /placeholder: 璇烽�夋嫨鏉ユ枡鏃ユ湡
+ - text: 2026-09-17
+ - generic:
+ - img "calendar"
+ - generic [ref=e2934]:
+ - generic [ref=e2935]:
+ - generic [ref=e2936]: "*"
+ - text: 妫�娴嬩汉鍛�
+ - generic [ref=e2942]:
+ - combobox "* 妫�娴嬩汉鍛�" [disabled] [ref=e2944]
+ - generic "寮犱笁" [ref=e2945]
+ - generic [ref=e2946]:
+ - generic [ref=e2947]:
+ - generic [ref=e2948]: "*"
+ - text: 妫�娴嬫棩鏈�
+ - generic [ref=e2954]:
+ - textbox "* 妫�娴嬫棩鏈�" [disabled] [ref=e2955]:
+ - /placeholder: 璇烽�夋嫨妫�娴嬫棩鏈�
+ - text: 2026-09-18
+ - generic:
+ - img "calendar"
+ - generic [ref=e2956]:
+ - generic [ref=e2957]: 妫�娴嬬粨鏋�
+ - generic [ref=e2963]:
+ - combobox "妫�娴嬬粨鏋�" [disabled] [ref=e2965]
+ - generic "鏍¢獙閫氳繃" [ref=e2966]
+ - generic [ref=e2967]:
+ - generic [ref=e2968]: 澶囨敞
+ - textbox "澶囨敞" [disabled] [ref=e2973]:
+ - /placeholder: 璇疯緭鍏ュ娉�
+ - text: 婕旂ず鏁版嵁
+ - generic [ref=e2975]:
+ - generic [ref=e2976]: 缂洪櫡鎯呭喌
+ - table [ref=e2979]:
+ - rowgroup [ref=e2980]:
+ - row [ref=e2981]:
+ - rowheader "鑷村懡缂洪櫡鏁�" [ref=e2982]
+ - cell "0" [ref=e2983]
+ - rowheader "涓ラ噸缂洪櫡鏁�" [ref=e2985]
+ - cell "0" [ref=e2986]
+ - rowheader "杞诲井缂洪櫡鏁�" [ref=e2988]
+ - cell "0" [ref=e2989]
+ - row [ref=e2991]:
+ - rowheader "鑷村懡缂洪櫡鐜�" [ref=e2992]
+ - cell "0%" [ref=e2993]
+ - rowheader "涓ラ噸缂洪櫡鐜�" [ref=e2995]
+ - cell "0%" [ref=e2996]
+ - rowheader "杞诲井缂洪櫡鐜�" [ref=e2998]
+ - cell "0%" [ref=e2999]
+ - generic [ref=e3001]:
+ - tablist [ref=e3002]:
+ - generic [ref=e3004]:
+ - tab "妫�楠岄」" [selected] [ref=e3006] [cursor=pointer]
+ - tab "妫�娴嬬粨鏋�" [ref=e3008] [cursor=pointer]
+ - tabpanel "妫�楠岄」" [ref=e3011]:
+ - generic [ref=e3016]:
+ - generic [ref=e3018]:
+ - generic [ref=e3019]: 妫�楠岄」
+ - generic [ref=e3022]:
+ - button "瞟�" [ref=e3023] [cursor=pointer]
+ - button "顪�" [ref=e3025] [cursor=pointer]
+ - button "顦�" [ref=e3027] [cursor=pointer]
+ - generic [ref=e3034]:
+ - generic [ref=e3035]:
+ - table [ref=e3039]:
+ - rowgroup [ref=e3054]:
+ - row [ref=e3055]:
+ - columnheader "妫�娴嬮」鍚嶇О" [ref=e3056]
+ - columnheader "妫�娴嬮」绫诲瀷" [ref=e3061]
+ - columnheader "妫�娴嬪伐鍏�" [ref=e3066]
+ - columnheader "妫�娴嬭姹�" [ref=e3071]
+ - columnheader "鏍囧噯鍊�" [ref=e3076]
+ - columnheader "鍗曚綅" [ref=e3081]
+ - columnheader "璇樊涓婇檺" [ref=e3086]
+ - columnheader "璇樊涓嬮檺" [ref=e3091]
+ - columnheader "鑷村懡缂洪櫡鏁�" [ref=e3096]
+ - columnheader "涓ラ噸缂洪櫡鏁�" [ref=e3101]
+ - columnheader "杞诲井缂洪櫡鏁�" [ref=e3106]
+ - columnheader "澶囨敞" [ref=e3111]
+ - table [ref=e3119]:
+ - rowgroup [ref=e3134]:
+ - row "澶栬 鎬ц兘 鐩祴 搴旀緞娓呴�忔槑锛屾棤鏈烘鏉傝川" [ref=e3135]:
+ - cell "澶栬" [ref=e3136]
+ - cell "鎬ц兘" [ref=e3140]
+ - cell "鐩祴" [ref=e3144]
+ - cell "搴旀緞娓呴�忔槑锛屾棤鏈烘鏉傝川" [ref=e3148]
+ - cell [ref=e3152]
+ - cell [ref=e3156]
+ - cell [ref=e3160]
+ - cell [ref=e3164]
+ - cell [ref=e3168]
+ - cell [ref=e3172]
+ - cell [ref=e3176]
+ - cell [ref=e3180]
+ - row "鑹插害 鎬ц兘 閾傞挻姣旇壊浠� 鑹插害 Hazen 鈮� 10 10" [ref=e3184]:
+ - cell "鑹插害" [ref=e3185]
+ - cell "鎬ц兘" [ref=e3189]
+ - cell "閾傞挻姣旇壊浠�" [ref=e3193]
+ - cell "鑹插害 Hazen 鈮� 10" [ref=e3197]
+ - cell "10" [ref=e3201]
+ - cell [ref=e3205]
+ - cell [ref=e3209]
+ - cell [ref=e3213]
+ - cell [ref=e3217]
+ - cell [ref=e3221]
+ - cell [ref=e3225]
+ - cell [ref=e3229]
+ - row "姘村垎 鎬ц兘 鍗″皵璐逛紤姘村垎浠� 姘村垎娴嬪畾鍒嗙粍" [ref=e3233]:
+ - cell "姘村垎" [ref=e3234]
+ - cell "鎬ц兘" [ref=e3238]
+ - cell "鍗″皵璐逛紤姘村垎浠�" [ref=e3242]
+ - cell "姘村垎娴嬪畾鍒嗙粍" [ref=e3246]
+ - cell [ref=e3250]
+ - cell [ref=e3254]
+ - cell [ref=e3258]
+ - cell [ref=e3262]
+ - cell [ref=e3266]
+ - cell [ref=e3270]
+ - cell [ref=e3274]
+ - cell [ref=e3278]
+ - row "璇曟牱璐ㄩ噺 m 鎬ц兘 鍒嗘瀽澶╁钩 绉伴噺" [ref=e3282]:
+ - cell "璇曟牱璐ㄩ噺 m" [ref=e3283]
+ - cell "鎬ц兘" [ref=e3287]
+ - cell "鍒嗘瀽澶╁钩" [ref=e3291]
+ - cell "绉伴噺" [ref=e3295]
+ - cell [ref=e3299]
+ - cell [ref=e3303]
+ - cell [ref=e3307]
+ - cell [ref=e3311]
+ - cell [ref=e3315]
+ - cell [ref=e3319]
+ - cell [ref=e3323]
+ - cell [ref=e3327]
+ - row "璇曟牱+绉伴噺鐡� m1 鎬ц兘 鍒嗘瀽澶╁钩 绉伴噺" [ref=e3331]:
+ - cell "璇曟牱+绉伴噺鐡� m1" [ref=e3332]
+ - cell "鎬ц兘" [ref=e3336]
+ - cell "鍒嗘瀽澶╁钩" [ref=e3340]
+ - cell "绉伴噺" [ref=e3344]
+ - cell [ref=e3348]
+ - cell [ref=e3352]
+ - cell [ref=e3356]
+ - cell [ref=e3360]
+ - cell [ref=e3364]
+ - cell [ref=e3368]
+ - cell [ref=e3372]
+ - cell [ref=e3376]
+ - row "绉伴噺鐡� m0 鎬ц兘 鍒嗘瀽澶╁钩 绉伴噺" [ref=e3380]:
+ - cell "绉伴噺鐡� m0" [ref=e3381]
+ - cell "鎬ц兘" [ref=e3385]
+ - cell "鍒嗘瀽澶╁钩" [ref=e3389]
+ - cell "绉伴噺" [ref=e3393]
+ - cell [ref=e3397]
+ - cell [ref=e3401]
+ - cell [ref=e3405]
+ - cell [ref=e3409]
+ - cell [ref=e3413]
+ - cell [ref=e3417]
+ - cell [ref=e3421]
+ - cell [ref=e3425]
+ - row "姘村垎缁撴灉 w 鎬ц兘 鎸夊叕寮忚绠�" [ref=e3429]:
+ - cell "姘村垎缁撴灉 w" [ref=e3430]
+ - cell "鎬ц兘" [ref=e3434]
+ - cell [ref=e3438]
+ - cell "鎸夊叕寮忚绠�" [ref=e3442]
+ - cell [ref=e3446]
+ - cell [ref=e3450]
+ - cell [ref=e3454]
+ - cell [ref=e3458]
+ - cell [ref=e3462]
+ - cell [ref=e3466]
+ - cell [ref=e3470]
+ - cell [ref=e3474]
+ - row "閰稿惈閲� 鎬ц兘 鐢典綅婊村畾浠� 閰稿惈閲忔祴瀹氬垎缁�" [ref=e3478]:
+ - cell "閰稿惈閲�" [ref=e3479]
+ - cell "鎬ц兘" [ref=e3483]
+ - cell "鐢典綅婊村畾浠�" [ref=e3487]
+ - cell "閰稿惈閲忔祴瀹氬垎缁�" [ref=e3491]
+ - cell [ref=e3495]
+ - cell [ref=e3499]
+ - cell [ref=e3503]
+ - cell [ref=e3507]
+ - cell [ref=e3511]
+ - cell [ref=e3515]
+ - cell [ref=e3519]
+ - cell [ref=e3523]
+ - row "鏍囨恫娴撳害 c 鎬ц兘 鑷姩鐢典綅婊村畾浠� 鏍囧畾" [ref=e3527]:
+ - cell "鏍囨恫娴撳害 c" [ref=e3528]
+ - cell "鎬ц兘" [ref=e3532]
+ - cell "鑷姩鐢典綅婊村畾浠�" [ref=e3536]
+ - cell "鏍囧畾" [ref=e3540]
+ - cell [ref=e3544]
+ - cell [ref=e3548]
+ - cell [ref=e3552]
+ - cell [ref=e3556]
+ - cell [ref=e3560]
+ - cell [ref=e3564]
+ - cell [ref=e3568]
+ - cell [ref=e3572]
+ - row "娑堣�楁淮瀹氭恫浣撶Н V 鎬ц兘 鑷姩鐢典綅婊村畾浠� 婊村畾" [ref=e3576]:
+ - cell "娑堣�楁淮瀹氭恫浣撶Н V" [ref=e3577]
+ - cell "鎬ц兘" [ref=e3581]
+ - cell "鑷姩鐢典綅婊村畾浠�" [ref=e3585]
+ - cell "婊村畾" [ref=e3589]
+ - cell [ref=e3593]
+ - cell [ref=e3597]
+ - cell [ref=e3601]
+ - cell [ref=e3605]
+ - cell [ref=e3609]
+ - cell [ref=e3613]
+ - cell [ref=e3617]
+ - cell [ref=e3621]
+ - row "璇曟牱璐ㄩ噺 m 鎬ц兘 鍒嗘瀽澶╁钩 绉伴噺" [ref=e3625]:
+ - cell "璇曟牱璐ㄩ噺 m" [ref=e3626]
+ - cell "鎬ц兘" [ref=e3630]
+ - cell "鍒嗘瀽澶╁钩" [ref=e3634]
+ - cell "绉伴噺" [ref=e3638]
+ - cell [ref=e3642]
+ - cell [ref=e3646]
+ - cell [ref=e3650]
+ - cell [ref=e3654]
+ - cell [ref=e3658]
+ - cell [ref=e3662]
+ - cell [ref=e3666]
+ - cell [ref=e3670]
+ - row "閰稿惈閲忕粨鏋� w3 鎬ц兘 鎸夊叕寮忚绠�" [ref=e3674]:
+ - cell "閰稿惈閲忕粨鏋� w3" [ref=e3675]
+ - cell "鎬ц兘" [ref=e3679]
+ - cell [ref=e3683]
+ - cell "鎸夊叕寮忚绠�" [ref=e3687]
+ - cell [ref=e3691]
+ - cell [ref=e3695]
+ - cell [ref=e3699]
+ - cell [ref=e3703]
+ - cell [ref=e3707]
+ - cell [ref=e3711]
+ - cell [ref=e3715]
+ - cell [ref=e3719]
+ - row "姝d竵閱囧惈閲� 鎬ц兘 姘旂浉鑹茶氨浠� 姝d竵閱囧惈閲忔祴瀹氬垎缁�" [ref=e3723]:
+ - cell "姝d竵閱囧惈閲�" [ref=e3724]
+ - cell "鎬ц兘" [ref=e3728]
+ - cell "姘旂浉鑹茶氨浠�" [ref=e3732]
+ - cell "姝d竵閱囧惈閲忔祴瀹氬垎缁�" [ref=e3736]
+ - cell [ref=e3740]
+ - cell [ref=e3744]
+ - cell [ref=e3748]
+ - cell [ref=e3752]
+ - cell [ref=e3756]
+ - cell [ref=e3760]
+ - cell [ref=e3764]
+ - cell [ref=e3768]
+ - row "姝d竵閱囧惈閲� /% 鎬ц兘 姘旂浉鑹茶氨浠� 澶栨爣娉�" [ref=e3772]:
+ - cell "姝d竵閱囧惈閲� /%" [ref=e3773]
+ - cell "鎬ц兘" [ref=e3777]
+ - cell "姘旂浉鑹茶氨浠�" [ref=e3781]
+ - cell "澶栨爣娉�" [ref=e3785]
+ - cell [ref=e3789]
+ - cell [ref=e3793]
+ - cell [ref=e3797]
+ - cell [ref=e3801]
+ - cell [ref=e3805]
+ - cell [ref=e3809]
+ - cell [ref=e3813]
+ - cell [ref=e3817]
+ - row "瀵嗗害 鎬ц兘 瀵嗗害璁� 瀵嗗害 (20鈩�) 809~812 810" [ref=e3821]:
+ - cell "瀵嗗害" [ref=e3822]
+ - cell "鎬ц兘" [ref=e3826]
+ - cell "瀵嗗害璁�" [ref=e3830]
+ - cell "瀵嗗害 (20鈩�) 809~812" [ref=e3834]
+ - cell "810" [ref=e3838]
+ - cell [ref=e3842]
+ - cell [ref=e3846]
+ - cell [ref=e3850]
+ - cell [ref=e3854]
+ - cell [ref=e3858]
+ - cell [ref=e3862]
+ - cell [ref=e3866]
+ - row "鎶樺厜鐜� 鎬ц兘 闃胯礉鎶樺厜浠� 鎶樺厜鐜� n虏鈦癉 1.399" [ref=e3870]:
+ - cell "鎶樺厜鐜�" [ref=e3871]
+ - cell "鎬ц兘" [ref=e3875]
+ - cell "闃胯礉鎶樺厜浠�" [ref=e3879]
+ - cell "鎶樺厜鐜� n虏鈦癉" [ref=e3883]
+ - cell "1.399" [ref=e3887]
+ - cell [ref=e3891]
+ - cell [ref=e3895]
+ - cell [ref=e3899]
+ - cell [ref=e3903]
+ - cell [ref=e3907]
+ - cell [ref=e3911]
+ - cell [ref=e3915]
+ - generic [ref=e3919]:
+ - table [ref=e3922]:
+ - rowgroup [ref=e3937]:
+ - row [ref=e3938]:
+ - columnheader "鎿嶄綔" [ref=e3939]
+ - table [ref=e3946]:
+ - rowgroup [ref=e3949]:
+ - row [ref=e3950]:
+ - cell [ref=e3951]:
+ - button "缂洪櫡鍒楄〃" [ref=e3957] [cursor=pointer]
+ - row [ref=e3963]:
+ - cell [ref=e3964]:
+ - button "缂洪櫡鍒楄〃" [ref=e3970] [cursor=pointer]
+ - row [ref=e3976]:
+ - cell [ref=e3977]:
+ - button "缂洪櫡鍒楄〃" [ref=e3983] [cursor=pointer]
+ - row [ref=e3989]:
+ - cell [ref=e3990]:
+ - button "缂洪櫡鍒楄〃" [ref=e3996] [cursor=pointer]
+ - row [ref=e4002]:
+ - cell [ref=e4003]:
+ - button "缂洪櫡鍒楄〃" [ref=e4009] [cursor=pointer]
+ - row [ref=e4015]:
+ - cell [ref=e4016]:
+ - button "缂洪櫡鍒楄〃" [ref=e4022] [cursor=pointer]
+ - row [ref=e4028]:
+ - cell [ref=e4029]:
+ - button "缂洪櫡鍒楄〃" [ref=e4035] [cursor=pointer]
+ - row [ref=e4041]:
+ - cell [ref=e4042]:
+ - button "缂洪櫡鍒楄〃" [ref=e4048] [cursor=pointer]
+ - row [ref=e4054]:
+ - cell [ref=e4055]:
+ - button "缂洪櫡鍒楄〃" [ref=e4061] [cursor=pointer]
+ - row [ref=e4067]:
+ - cell [ref=e4068]:
+ - button "缂洪櫡鍒楄〃" [ref=e4074] [cursor=pointer]
+ - row [ref=e4080]:
+ - cell [ref=e4081]:
+ - button "缂洪櫡鍒楄〃" [ref=e4087] [cursor=pointer]
+ - row [ref=e4093]:
+ - cell [ref=e4094]:
+ - button "缂洪櫡鍒楄〃" [ref=e4100] [cursor=pointer]
+ - row [ref=e4106]:
+ - cell [ref=e4107]:
+ - button "缂洪櫡鍒楄〃" [ref=e4113] [cursor=pointer]
+ - row [ref=e4119]:
+ - cell [ref=e4120]:
+ - button "缂洪櫡鍒楄〃" [ref=e4126] [cursor=pointer]
+ - row [ref=e4132]:
+ - cell [ref=e4133]:
+ - button "缂洪櫡鍒楄〃" [ref=e4139] [cursor=pointer]
+ - row [ref=e4145]:
+ - cell [ref=e4146]:
+ - button "缂洪櫡鍒楄〃" [ref=e4152] [cursor=pointer]
+ - generic [ref=e4170]:
+ - generic [ref=e4171]: 鍏� 16 鏉¤褰�
+ - generic [ref=e4173] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e4174]:
+ - textbox "璇烽�夋嫨" [ref=e4175]: 20鏉�/椤�
+ - generic [ref=e4176]: 睿�
+ - button "飱�" [ref=e4179]
+ - button "顧�" [ref=e4181]
+ - button "顫�" [ref=e4183]
+ - button "1" [ref=e4186] [cursor=pointer]
+ - button "顫�" [ref=e4187]
+ - button "顧�" [ref=e4189]
+ - button "顦�" [ref=e4191]
+ - button [ref=e4193] [cursor=pointer]
+ - generic [ref=e4203]:
+ - button "璐ㄦ鍔╂墜" [ref=e4205] [cursor=pointer]
+ - button "鍙� 娑�" [ref=e4207] [cursor=pointer]
+ - button [ref=e4209] [cursor=pointer]
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-09-18T06-20-02-132Z.yml b/.playwright-mcp/page-2026-09-18T06-20-02-132Z.yml
new file mode 100644
index 0000000..094c1b9
--- /dev/null
+++ b/.playwright-mcp/page-2026-09-18T06-20-02-132Z.yml
@@ -0,0 +1,437 @@
+- generic [ref=e4]:
+ - generic [ref=e7]:
+ - complementary [ref=e8]:
+ - generic [ref=e9]:
+ - generic [ref=e10] [cursor=pointer]
+ - link "宸ヤ笟AI鏅洪�犲钩鍙� 宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e15] [cursor=pointer]:
+ - /url: javascript:void 0
+ - img "宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e18]
+ - generic [ref=e19]: 宸ヤ笟AI鏅洪�犲钩鍙�
+ - menu [ref=e22]:
+ - menuitem "棣栭〉" [ref=e23] [cursor=pointer]
+ - listitem [ref=e30]:
+ - generic [ref=e31] [cursor=pointer]: 鍩虹鏁版嵁
+ - listitem [ref=e39]:
+ - generic [ref=e40] [cursor=pointer]: 閲囪喘绠$悊
+ - listitem [ref=e46]:
+ - generic [ref=e47] [cursor=pointer]: 钀ラ攢绠$悊
+ - listitem [ref=e53]:
+ - generic [ref=e54] [cursor=pointer]: 璁惧绠$悊
+ - listitem [ref=e61]:
+ - generic [ref=e62] [cursor=pointer]: 浠撳偍鐗╂祦
+ - listitem [ref=e70]:
+ - generic [ref=e71] [cursor=pointer]: 宸ヨ壓璁捐
+ - listitem [ref=e78]:
+ - generic [ref=e79] [cursor=pointer]: 浜у搧璁捐
+ - listitem [ref=e85]:
+ - generic [ref=e86] [cursor=pointer]: 鐢熶骇绠℃帶
+ - listitem [ref=e93]:
+ - generic [ref=e94] [cursor=pointer]: 璐ㄩ噺绠$悊
+ - list [ref=e593]:
+ - menuitem "妫�娴嬮」璁剧疆" [ref=e594] [cursor=pointer]
+ - menuitem "璐ㄦ鏂规" [ref=e599] [cursor=pointer]
+ - menuitem "寰呮浠诲姟" [ref=e604] [cursor=pointer]
+ - menuitem "鏉ユ枡妫�楠�" [ref=e611] [cursor=pointer]
+ - menuitem "杩囩▼妫�楠�" [ref=e616] [cursor=pointer]
+ - menuitem "閫�鏂欐楠�" [ref=e621] [cursor=pointer]
+ - menuitem "鍑鸿揣妫�楠�" [ref=e626] [cursor=pointer]
+ - menuitem "鎵规杩芥函" [ref=e631] [cursor=pointer]
+ - menuitem "涓嶅悎鏍煎搧澶勭悊" [ref=e637] [cursor=pointer]
+ - menuitem "甯歌缂洪櫡" [ref=e642] [cursor=pointer]
+ - listitem [ref=e100]:
+ - generic [ref=e101] [cursor=pointer]: 鎶ヨ〃绠$悊
+ - listitem [ref=e108]:
+ - generic [ref=e109] [cursor=pointer]: 鍐崇瓥BI澶у睆
+ - listitem [ref=e115]:
+ - generic [ref=e116] [cursor=pointer]: 鍗忓悓鍔炲叕
+ - listitem [ref=e122]:
+ - generic [ref=e123] [cursor=pointer]: 浜哄姏璧勬簮
+ - listitem [ref=e129]:
+ - generic [ref=e130] [cursor=pointer]: 鍞悗绠$悊
+ - listitem [ref=e136]:
+ - generic [ref=e137] [cursor=pointer]: 鍩虹璁炬柦
+ - listitem [ref=e143]:
+ - generic [ref=e144] [cursor=pointer]: 绯荤粺绠$悊
+ - generic [ref=e151] [cursor=pointer]
+ - generic [ref=e156]:
+ - generic [ref=e157]:
+ - banner [ref=e158]:
+ - button [ref=e159] [cursor=pointer]
+ - button [ref=e162] [cursor=pointer]
+ - navigation "breadcrumb" [ref=e167]:
+ - list [ref=e168]:
+ - listitem [ref=e649]:
+ - link "璐ㄩ噺绠$悊" [ref=e650] [cursor=pointer]:
+ - /url: javascript:void 0
+ - listitem [ref=e654]
+ - listitem [ref=e657]:
+ - link "鏉ユ枡妫�楠�" [disabled] [ref=e658]
+ - generic [ref=e177]:
+ - generic [ref=e179] [cursor=pointer]:
+ - generic [ref=e183]: 鎼滅储
+ - generic [ref=e184]: Ctrl K
+ - button [ref=e186] [cursor=pointer]
+ - button "dark" [ref=e191] [cursor=pointer]
+ - button [ref=e200] [cursor=pointer]
+ - button [ref=e206] [cursor=pointer]
+ - button [ref=e209] [cursor=pointer]
+ - button [ref=e215] [cursor=pointer]:
+ - button [ref=e217]
+ - button "宸ヤ綔鍙�" [ref=e221] [cursor=pointer]
+ - button [ref=e225] [cursor=pointer]:
+ - img "瓒呯骇绠$悊鍛�" [ref=e230]
+ - generic [ref=e232]:
+ - generic [ref=e237]:
+ - generic [ref=e238] [cursor=pointer]: 棣栭〉
+ - generic [ref=e664] [cursor=pointer]: 鏉ユ枡妫�楠�
+ - generic [ref=e254]:
+ - button [ref=e255] [cursor=pointer]
+ - generic [ref=e262] [cursor=pointer]
+ - generic [ref=e266] [cursor=pointer]
+ - main [ref=e273]:
+ - generic [ref=e684]:
+ - generic [ref=e689]:
+ - generic [ref=e690]:
+ - generic [ref=e691]: 妫�楠屽崟缂栧彿
+ - textbox "妫�楠屽崟缂栧彿" [ref=e948]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - generic [ref=e693]:
+ - generic [ref=e694]: 渚涘簲鍟�
+ - generic [ref=e700] [cursor=pointer]:
+ - combobox "渚涘簲鍟�" [ref=e702]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e703]:
+ - generic [ref=e704]: 渚涘簲鍟嗘壒娆�
+ - textbox "渚涘簲鍟嗘壒娆�" [ref=e954]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - generic [ref=e706]:
+ - generic [ref=e707]: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [ref=e714]
+ - generic [ref=e717]:
+ - generic [ref=e718]: 妫�娴嬬粨鏋�
+ - generic [ref=e724] [cursor=pointer]:
+ - combobox "妫�娴嬬粨鏋�" [ref=e726]
+ - generic: 璇烽�夋嫨妫�娴嬬粨鏋�
+ - generic [ref=e727]:
+ - generic [ref=e728]: 鏉ユ枡鏃ユ湡
+ - generic [ref=e962]:
+ - textbox "鏉ユ枡鏃ユ湡" [ref=e964]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e966]:
+ - img "swap-right" [ref=e967]
+ - textbox "缁撴潫鏃堕棿" [ref=e971]
+ - generic:
+ - img "calendar"
+ - generic [ref=e730]:
+ - generic [ref=e731]: 妫�娴嬫棩鏈�
+ - generic [ref=e975]:
+ - textbox "妫�娴嬫棩鏈�" [ref=e977]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e979]:
+ - img "swap-right" [ref=e980]
+ - textbox "缁撴潫鏃堕棿" [ref=e984]
+ - generic:
+ - img "calendar"
+ - generic [ref=e733]:
+ - generic [ref=e734]: 妫�娴嬩汉鍛�
+ - generic [ref=e740] [cursor=pointer]:
+ - combobox "妫�娴嬩汉鍛�" [ref=e742]
+ - generic: 璇烽�夋嫨妫�娴嬩汉鍛�
+ - generic [ref=e743]:
+ - button "閲� 缃�" [ref=e985] [cursor=pointer]
+ - button "鎼� 绱�" [ref=e987] [cursor=pointer]
+ - generic [ref=e744] [cursor=pointer]: 鏀惰捣
+ - generic [ref=e751]:
+ - generic [ref=e753]:
+ - generic [ref=e754]: 鏉ユ枡妫�楠屽崟鍒楄〃
+ - generic [ref=e758]:
+ - generic [ref=e760]:
+ - button "鏂板鏉ユ枡妫�楠屽崟" [ref=e762] [cursor=pointer]
+ - button "瀵煎嚭" [ref=e766] [cursor=pointer]
+ - button "顫�" [ref=e769] [cursor=pointer]
+ - generic [ref=e771]:
+ - button "瞟�" [ref=e772] [cursor=pointer]
+ - button "顪�" [ref=e774] [cursor=pointer]
+ - button "顦�" [ref=e776] [cursor=pointer]
+ - generic [ref=e783]:
+ - generic [ref=e784]:
+ - table [ref=e788]:
+ - rowgroup [ref=e805]:
+ - row [ref=e806]:
+ - columnheader "鏉ユ枡妫�楠屽崟缂栧彿" [ref=e807]
+ - columnheader "鏉ユ枡妫�楠屽崟鍚嶇О" [ref=e812]
+ - columnheader "渚涘簲鍟嗙畝绉�" [ref=e817]
+ - columnheader "渚涘簲鍟嗘壒娆″彿" [ref=e822]
+ - columnheader "浜у搧鐗╂枡缂栫爜" [ref=e827]
+ - columnheader "浜у搧鐗╂枡鍚嶇О" [ref=e832]
+ - columnheader "鎺ユ敹鏁伴噺" [ref=e837]
+ - columnheader "妫�娴嬫暟閲�" [ref=e842]
+ - columnheader "涓嶅悎鏍兼暟" [ref=e847]
+ - columnheader "妫�娴嬬粨鏋�" [ref=e852]
+ - columnheader "鏉ユ枡鏃ユ湡" [ref=e857]
+ - columnheader "妫�娴嬫棩鏈�" [ref=e862]
+ - columnheader "妫�娴嬩汉鍛�" [ref=e867]
+ - columnheader "鍗曟嵁鐘舵��" [ref=e872]
+ - table [ref=e993]:
+ - rowgroup [ref=e1010]:
+ - row "IQC-DEMO-03 澹儻鏉ユ枡妫�楠�-03 JN-20260918-A03 4 澹儻 800 80 4 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1011]:
+ - cell [ref=e1012]:
+ - button "IQC-DEMO-03" [ref=e1015] [cursor=pointer]
+ - cell "澹儻鏉ユ枡妫�楠�-03" [ref=e1017]
+ - cell [ref=e1021]
+ - cell "JN-20260918-A03" [ref=e1025]
+ - cell "4" [ref=e1029]
+ - cell "澹儻" [ref=e1033]
+ - cell "800" [ref=e1037]
+ - cell "80" [ref=e1041]
+ - cell "4" [ref=e1045]
+ - cell [ref=e1049]
+ - cell "2026-09-17" [ref=e1051]
+ - cell "2026-09-18" [ref=e1055]
+ - cell "寮犱笁" [ref=e1059]
+ - cell "宸插畬鎴�" [ref=e1063]
+ - row "IQC-DEMO-02 绮捐悩鏉ユ枡妫�楠�-02 JN-20260918-A02 2 绮捐悩 1500 150 0 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1067]:
+ - cell [ref=e1068]:
+ - button "IQC-DEMO-02" [ref=e1071] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-02" [ref=e1073]
+ - cell [ref=e1077]
+ - cell "JN-20260918-A02" [ref=e1081]
+ - cell "2" [ref=e1085]
+ - cell "绮捐悩" [ref=e1089]
+ - cell "1500" [ref=e1093]
+ - cell "150" [ref=e1097]
+ - cell "0" [ref=e1101]
+ - cell "鏍¢獙閫氳繃" [ref=e1105]
+ - cell "2026-09-17" [ref=e1109]
+ - cell "2026-09-18" [ref=e1113]
+ - cell "寮犱笁" [ref=e1117]
+ - cell "宸插畬鎴�" [ref=e1121]
+ - row "IQC-DEMO-01 绮捐悩鏉ユ枡妫�楠�-01 JN-20260918-A01 2 绮捐悩 2000 200 2 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1125]:
+ - cell [ref=e1126]:
+ - button "IQC-DEMO-01" [ref=e1129] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-01" [ref=e1131]
+ - cell [ref=e1135]
+ - cell "JN-20260918-A01" [ref=e1139]
+ - cell "2" [ref=e1143]
+ - cell "绮捐悩" [ref=e1147]
+ - cell "2000" [ref=e1151]
+ - cell "200" [ref=e1155]
+ - cell "2" [ref=e1159]
+ - cell "鏍¢獙閫氳繃" [ref=e1163]
+ - cell "2026-09-17" [ref=e1167]
+ - cell "2026-09-18" [ref=e1171]
+ - cell "寮犱笁" [ref=e1175]
+ - cell "宸插畬鎴�" [ref=e1179]
+ - row "IQC_20260917001 绮捐悩鏉ユ枡妫�楠�-0917 2 绮捐悩 100 100 0 2026-09-17 2026-09-17 瓒呯骇绠$悊鍛� 鑽夌" [ref=e1183]:
+ - cell [ref=e1184]:
+ - button "IQC_20260917001" [ref=e1187] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-0917" [ref=e1189]
+ - cell [ref=e1193]
+ - cell [ref=e1197]
+ - cell "2" [ref=e1201]
+ - cell "绮捐悩" [ref=e1205]
+ - cell "100" [ref=e1209]
+ - cell "100" [ref=e1213]
+ - cell "0" [ref=e1217]
+ - cell [ref=e1221]
+ - cell "2026-09-17" [ref=e1223]
+ - cell "2026-09-17" [ref=e1227]
+ - cell "瓒呯骇绠$悊鍛�" [ref=e1231]
+ - cell "鑽夌" [ref=e1235]
+ - generic [ref=e880]:
+ - table [ref=e883]:
+ - rowgroup [ref=e900]:
+ - row [ref=e901]:
+ - columnheader "鎿嶄綔" [ref=e902]
+ - table [ref=e1239]:
+ - rowgroup [ref=e1242]:
+ - row [ref=e1243]:
+ - cell [ref=e1244]:
+ - generic [ref=e1248]:
+ - button "璇︽儏" [ref=e1250] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1257] [cursor=pointer]
+ - row [ref=e1263]:
+ - cell [ref=e1264]:
+ - generic [ref=e1268]:
+ - button "璇︽儏" [ref=e1270] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1277] [cursor=pointer]
+ - row [ref=e1283]:
+ - cell [ref=e1284]:
+ - generic [ref=e1288]:
+ - button "璇︽儏" [ref=e1290] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1297] [cursor=pointer]
+ - row [ref=e1303]:
+ - cell [ref=e1304]:
+ - generic [ref=e1308]:
+ - button "淇敼" [ref=e1310] [cursor=pointer]
+ - button "鍒犻櫎" [ref=e1317] [cursor=pointer]
+ - button "璇︽儏" [ref=e1322] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1329] [cursor=pointer]
+ - generic [ref=e921]:
+ - generic [ref=e922]: 鍏� 4 鏉¤褰�
+ - generic [ref=e924] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e925]:
+ - textbox "璇烽�夋嫨" [ref=e926]: 20鏉�/椤�
+ - generic [ref=e927]: 睿�
+ - button "飱�" [ref=e930]
+ - button "顧�" [ref=e932]
+ - button "顫�" [ref=e934]
+ - button "1" [ref=e937] [cursor=pointer]
+ - button "顫�" [ref=e938]
+ - button "顧�" [ref=e940]
+ - button "顦�" [ref=e942]
+ - dialog [ref=e2833]:
+ - heading "鏌ョ湅鏉ユ枡妫�楠屽崟" [level=2] [ref=e2835]
+ - generic [ref=e2837]:
+ - generic [ref=e2839]:
+ - generic [ref=e2840]:
+ - generic [ref=e2841]:
+ - generic [ref=e2842]: "*"
+ - text: 妫�楠屽崟缂栧彿
+ - generic [ref=e2846]:
+ - textbox "* 妫�楠屽崟缂栧彿" [disabled] [ref=e2847]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - text: IQC-DEMO-01
+ - button "鐢� 鎴�" [disabled] [ref=e2849]
+ - generic [ref=e2851]:
+ - generic [ref=e2852]:
+ - generic [ref=e2853]: "*"
+ - text: 妫�楠屽崟鍚嶇О
+ - textbox "* 妫�楠屽崟鍚嶇О" [disabled] [ref=e2858]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟鍚嶇О
+ - text: 绮捐悩鏉ユ枡妫�楠�-01
+ - generic [ref=e2859]:
+ - generic [ref=e2860]:
+ - generic [ref=e2861]: "*"
+ - text: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [disabled] [ref=e2868]: 绮捐悩
+ - generic [ref=e2874]:
+ - generic [ref=e2875]: 渚涘簲鍟�
+ - generic [ref=e2881]:
+ - combobox "渚涘簲鍟�" [disabled] [ref=e2883]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e2884]:
+ - generic [ref=e2885]: 渚涘簲鍟嗘壒娆″彿
+ - textbox "渚涘簲鍟嗘壒娆″彿" [disabled] [ref=e2890]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - text: JN-20260918-A01
+ - generic [ref=e2891]:
+ - generic [ref=e2892]:
+ - generic [ref=e2893]: "*"
+ - text: 鏈鎺ユ敹鏁伴噺
+ - spinbutton "* 鏈鎺ユ敹鏁伴噺" [disabled] [ref=e2900]: "2000.00"
+ - generic [ref=e2901]:
+ - generic [ref=e2902]:
+ - generic [ref=e2903]: "*"
+ - text: 鍚堟牸鍝佹暟閲�
+ - spinbutton "* 鍚堟牸鍝佹暟閲�" [disabled] [ref=e2910]: "198"
+ - generic [ref=e2911]:
+ - generic [ref=e2912]:
+ - generic [ref=e2913]: "*"
+ - text: 涓嶅悎鏍煎搧鏁伴噺
+ - img [ref=e2914] [cursor=pointer]
+ - spinbutton "* 涓嶅悎鏍煎搧鏁伴噺" [disabled] [ref=e2923]: "2"
+ - generic [ref=e2924]:
+ - generic [ref=e2925]:
+ - generic [ref=e2926]: "*"
+ - text: 鏉ユ枡鏃ユ湡
+ - generic [ref=e2932]:
+ - textbox "* 鏉ユ枡鏃ユ湡" [disabled] [ref=e2933]:
+ - /placeholder: 璇烽�夋嫨鏉ユ枡鏃ユ湡
+ - text: 2026-09-17
+ - generic:
+ - img "calendar"
+ - generic [ref=e2934]:
+ - generic [ref=e2935]:
+ - generic [ref=e2936]: "*"
+ - text: 妫�娴嬩汉鍛�
+ - generic [ref=e2942]:
+ - combobox "* 妫�娴嬩汉鍛�" [disabled] [ref=e2944]
+ - generic "寮犱笁" [ref=e2945]
+ - generic [ref=e2946]:
+ - generic [ref=e2947]:
+ - generic [ref=e2948]: "*"
+ - text: 妫�娴嬫棩鏈�
+ - generic [ref=e2954]:
+ - textbox "* 妫�娴嬫棩鏈�" [disabled] [ref=e2955]:
+ - /placeholder: 璇烽�夋嫨妫�娴嬫棩鏈�
+ - text: 2026-09-18
+ - generic:
+ - img "calendar"
+ - generic [ref=e2956]:
+ - generic [ref=e2957]: 妫�娴嬬粨鏋�
+ - generic [ref=e2963]:
+ - combobox "妫�娴嬬粨鏋�" [disabled] [ref=e2965]
+ - generic "鏍¢獙閫氳繃" [ref=e2966]
+ - generic [ref=e2967]:
+ - generic [ref=e2968]: 澶囨敞
+ - textbox "澶囨敞" [disabled] [ref=e2973]:
+ - /placeholder: 璇疯緭鍏ュ娉�
+ - text: 婕旂ず鏁版嵁
+ - generic [ref=e2975]:
+ - generic [ref=e2976]: 缂洪櫡鎯呭喌
+ - table [ref=e2979]:
+ - rowgroup [ref=e2980]:
+ - row [ref=e2981]:
+ - rowheader "鑷村懡缂洪櫡鏁�" [ref=e2982]
+ - cell "0" [ref=e2983]
+ - rowheader "涓ラ噸缂洪櫡鏁�" [ref=e2985]
+ - cell "0" [ref=e2986]
+ - rowheader "杞诲井缂洪櫡鏁�" [ref=e2988]
+ - cell "0" [ref=e2989]
+ - row [ref=e2991]:
+ - rowheader "鑷村懡缂洪櫡鐜�" [ref=e2992]
+ - cell "0%" [ref=e2993]
+ - rowheader "涓ラ噸缂洪櫡鐜�" [ref=e2995]
+ - cell "0%" [ref=e2996]
+ - rowheader "杞诲井缂洪櫡鐜�" [ref=e2998]
+ - cell "0%" [ref=e2999]
+ - generic [ref=e3001]:
+ - tablist [ref=e3002]:
+ - generic [ref=e3004]:
+ - tab "妫�楠岄」" [ref=e3006] [cursor=pointer]
+ - tab "妫�娴嬬粨鏋�" [active] [selected] [ref=e3008] [cursor=pointer]
+ - generic [ref=e3010]:
+ - text: 瞟� 顪� 顦� 睿� 飱� 顧� 顫� 顫� 顧� 顦�
+ - tabpanel "妫�娴嬬粨鏋�" [ref=e4213]:
+ - generic [ref=e4218]:
+ - generic [ref=e4220]:
+ - generic [ref=e4221]: 妫�娴嬬粨鏋�
+ - generic [ref=e4224]:
+ - button "瞟�" [ref=e4225] [cursor=pointer]
+ - button "顪�" [ref=e4227] [cursor=pointer]
+ - button "顦�" [ref=e4229] [cursor=pointer]
+ - generic [ref=e4237]:
+ - table [ref=e4241]:
+ - rowgroup [ref=e4247]:
+ - row [ref=e4248]:
+ - columnheader "鏍峰搧缂栧彿" [ref=e4249]
+ - columnheader "鐗╄祫SN" [ref=e4254]
+ - columnheader "澶囨敞" [ref=e4259]
+ - columnheader "鎿嶄綔" [ref=e4264]
+ - table [ref=e4272]:
+ - rowgroup [ref=e4278]:
+ - row "MIR-DEMO-01 YP-A001 璇︽儏" [ref=e4279]:
+ - cell "MIR-DEMO-01" [ref=e4280]
+ - cell "YP-A001" [ref=e4284]
+ - cell [ref=e4288]
+ - cell [ref=e4292]:
+ - button "璇︽儏" [ref=e4298] [cursor=pointer]
+ - generic [ref=e4306]:
+ - generic [ref=e4307]: 鍏� 1 鏉¤褰�
+ - generic [ref=e4309] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e4310]:
+ - textbox "璇烽�夋嫨" [ref=e4311]: 20鏉�/椤�
+ - generic [ref=e4312]: 睿�
+ - button "飱�" [ref=e4315]
+ - button "顧�" [ref=e4317]
+ - button "顫�" [ref=e4319]
+ - button "1" [ref=e4322] [cursor=pointer]
+ - button "顫�" [ref=e4323]
+ - button "顧�" [ref=e4325]
+ - button "顦�" [ref=e4327]
+ - button [ref=e4193] [cursor=pointer]
+ - generic [ref=e4203]:
+ - button "璐ㄦ鍔╂墜" [ref=e4205] [cursor=pointer]
+ - button "鍙� 娑�" [ref=e4207] [cursor=pointer]
+ - button [ref=e4209] [cursor=pointer]
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-09-18T06-22-24-743Z.yml b/.playwright-mcp/page-2026-09-18T06-22-24-743Z.yml
new file mode 100644
index 0000000..7b0e591
--- /dev/null
+++ b/.playwright-mcp/page-2026-09-18T06-22-24-743Z.yml
@@ -0,0 +1,504 @@
+- generic [ref=e4]:
+ - generic [ref=e7]:
+ - complementary [ref=e8]:
+ - generic [ref=e9]:
+ - generic [ref=e10] [cursor=pointer]
+ - link "宸ヤ笟AI鏅洪�犲钩鍙� 宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e15] [cursor=pointer]:
+ - /url: javascript:void 0
+ - img "宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e18]
+ - generic [ref=e19]: 宸ヤ笟AI鏅洪�犲钩鍙�
+ - menu [ref=e22]:
+ - menuitem "棣栭〉" [ref=e23] [cursor=pointer]
+ - listitem [ref=e30]:
+ - generic [ref=e31] [cursor=pointer]: 鍩虹鏁版嵁
+ - listitem [ref=e39]:
+ - generic [ref=e40] [cursor=pointer]: 閲囪喘绠$悊
+ - listitem [ref=e46]:
+ - generic [ref=e47] [cursor=pointer]: 钀ラ攢绠$悊
+ - listitem [ref=e53]:
+ - generic [ref=e54] [cursor=pointer]: 璁惧绠$悊
+ - listitem [ref=e61]:
+ - generic [ref=e62] [cursor=pointer]: 浠撳偍鐗╂祦
+ - listitem [ref=e70]:
+ - generic [ref=e71] [cursor=pointer]: 宸ヨ壓璁捐
+ - listitem [ref=e78]:
+ - generic [ref=e79] [cursor=pointer]: 浜у搧璁捐
+ - listitem [ref=e85]:
+ - generic [ref=e86] [cursor=pointer]: 鐢熶骇绠℃帶
+ - listitem [ref=e93]:
+ - generic [ref=e94] [cursor=pointer]: 璐ㄩ噺绠$悊
+ - list [ref=e593]:
+ - menuitem "妫�娴嬮」璁剧疆" [ref=e594] [cursor=pointer]
+ - menuitem "璐ㄦ鏂规" [ref=e599] [cursor=pointer]
+ - menuitem "寰呮浠诲姟" [ref=e604] [cursor=pointer]
+ - menuitem "鏉ユ枡妫�楠�" [ref=e611] [cursor=pointer]
+ - menuitem "杩囩▼妫�楠�" [ref=e616] [cursor=pointer]
+ - menuitem "閫�鏂欐楠�" [ref=e621] [cursor=pointer]
+ - menuitem "鍑鸿揣妫�楠�" [ref=e626] [cursor=pointer]
+ - menuitem "鎵规杩芥函" [ref=e631] [cursor=pointer]
+ - menuitem "涓嶅悎鏍煎搧澶勭悊" [ref=e637] [cursor=pointer]
+ - menuitem "甯歌缂洪櫡" [ref=e642] [cursor=pointer]
+ - listitem [ref=e100]:
+ - generic [ref=e101] [cursor=pointer]: 鎶ヨ〃绠$悊
+ - listitem [ref=e108]:
+ - generic [ref=e109] [cursor=pointer]: 鍐崇瓥BI澶у睆
+ - listitem [ref=e115]:
+ - generic [ref=e116] [cursor=pointer]: 鍗忓悓鍔炲叕
+ - listitem [ref=e122]:
+ - generic [ref=e123] [cursor=pointer]: 浜哄姏璧勬簮
+ - listitem [ref=e129]:
+ - generic [ref=e130] [cursor=pointer]: 鍞悗绠$悊
+ - listitem [ref=e136]:
+ - generic [ref=e137] [cursor=pointer]: 鍩虹璁炬柦
+ - listitem [ref=e143]:
+ - generic [ref=e144] [cursor=pointer]: 绯荤粺绠$悊
+ - generic [ref=e151] [cursor=pointer]
+ - generic [ref=e156]:
+ - generic [ref=e157]:
+ - banner [ref=e158]:
+ - button [ref=e159] [cursor=pointer]
+ - button [ref=e162] [cursor=pointer]
+ - navigation "breadcrumb" [ref=e167]:
+ - list [ref=e168]:
+ - listitem [ref=e649]:
+ - link "璐ㄩ噺绠$悊" [ref=e650] [cursor=pointer]:
+ - /url: javascript:void 0
+ - listitem [ref=e654]
+ - listitem [ref=e657]:
+ - link "鏉ユ枡妫�楠�" [disabled] [ref=e658]
+ - generic [ref=e177]:
+ - generic [ref=e179] [cursor=pointer]:
+ - generic [ref=e183]: 鎼滅储
+ - generic [ref=e184]: Ctrl K
+ - button [ref=e186] [cursor=pointer]
+ - button "dark" [ref=e191] [cursor=pointer]
+ - button [ref=e200] [cursor=pointer]
+ - button [ref=e206] [cursor=pointer]
+ - button [ref=e209] [cursor=pointer]
+ - button [ref=e215] [cursor=pointer]:
+ - button [ref=e217]
+ - button "宸ヤ綔鍙�" [ref=e221] [cursor=pointer]
+ - button [ref=e225] [cursor=pointer]:
+ - img "瓒呯骇绠$悊鍛�" [ref=e230]
+ - generic [ref=e232]:
+ - generic [ref=e237]:
+ - generic [ref=e238] [cursor=pointer]: 棣栭〉
+ - generic [ref=e664] [cursor=pointer]: 鏉ユ枡妫�楠�
+ - generic [ref=e254]:
+ - button [ref=e255] [cursor=pointer]
+ - generic [ref=e262] [cursor=pointer]
+ - generic [ref=e266] [cursor=pointer]
+ - main [ref=e273]:
+ - generic [ref=e684]:
+ - generic [ref=e689]:
+ - generic [ref=e690]:
+ - generic [ref=e691]: 妫�楠屽崟缂栧彿
+ - textbox "妫�楠屽崟缂栧彿" [ref=e948]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - generic [ref=e693]:
+ - generic [ref=e694]: 渚涘簲鍟�
+ - generic [ref=e700] [cursor=pointer]:
+ - combobox "渚涘簲鍟�" [ref=e702]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e703]:
+ - generic [ref=e704]: 渚涘簲鍟嗘壒娆�
+ - textbox "渚涘簲鍟嗘壒娆�" [ref=e954]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - generic [ref=e706]:
+ - generic [ref=e707]: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [ref=e714]
+ - generic [ref=e717]:
+ - generic [ref=e718]: 妫�娴嬬粨鏋�
+ - generic [ref=e724] [cursor=pointer]:
+ - combobox "妫�娴嬬粨鏋�" [ref=e726]
+ - generic: 璇烽�夋嫨妫�娴嬬粨鏋�
+ - generic [ref=e727]:
+ - generic [ref=e728]: 鏉ユ枡鏃ユ湡
+ - generic [ref=e962]:
+ - textbox "鏉ユ枡鏃ユ湡" [ref=e964]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e966]:
+ - img "swap-right" [ref=e967]
+ - textbox "缁撴潫鏃堕棿" [ref=e971]
+ - generic:
+ - img "calendar"
+ - generic [ref=e730]:
+ - generic [ref=e731]: 妫�娴嬫棩鏈�
+ - generic [ref=e975]:
+ - textbox "妫�娴嬫棩鏈�" [ref=e977]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e979]:
+ - img "swap-right" [ref=e980]
+ - textbox "缁撴潫鏃堕棿" [ref=e984]
+ - generic:
+ - img "calendar"
+ - generic [ref=e733]:
+ - generic [ref=e734]: 妫�娴嬩汉鍛�
+ - generic [ref=e740] [cursor=pointer]:
+ - combobox "妫�娴嬩汉鍛�" [ref=e742]
+ - generic: 璇烽�夋嫨妫�娴嬩汉鍛�
+ - generic [ref=e743]:
+ - button "閲� 缃�" [ref=e985] [cursor=pointer]
+ - button "鎼� 绱�" [ref=e987] [cursor=pointer]
+ - generic [ref=e744] [cursor=pointer]: 鏀惰捣
+ - generic [ref=e751]:
+ - generic [ref=e753]:
+ - generic [ref=e754]: 鏉ユ枡妫�楠屽崟鍒楄〃
+ - generic [ref=e758]:
+ - generic [ref=e760]:
+ - button "鏂板鏉ユ枡妫�楠屽崟" [ref=e762] [cursor=pointer]
+ - button "瀵煎嚭" [ref=e766] [cursor=pointer]
+ - button "顫�" [ref=e769] [cursor=pointer]
+ - generic [ref=e771]:
+ - button "瞟�" [ref=e772] [cursor=pointer]
+ - button "顪�" [ref=e774] [cursor=pointer]
+ - button "顦�" [ref=e776] [cursor=pointer]
+ - generic [ref=e783]:
+ - generic [ref=e784]:
+ - table [ref=e788]:
+ - rowgroup [ref=e805]:
+ - row [ref=e806]:
+ - columnheader "鏉ユ枡妫�楠屽崟缂栧彿" [ref=e807]
+ - columnheader "鏉ユ枡妫�楠屽崟鍚嶇О" [ref=e812]
+ - columnheader "渚涘簲鍟嗙畝绉�" [ref=e817]
+ - columnheader "渚涘簲鍟嗘壒娆″彿" [ref=e822]
+ - columnheader "浜у搧鐗╂枡缂栫爜" [ref=e827]
+ - columnheader "浜у搧鐗╂枡鍚嶇О" [ref=e832]
+ - columnheader "鎺ユ敹鏁伴噺" [ref=e837]
+ - columnheader "妫�娴嬫暟閲�" [ref=e842]
+ - columnheader "涓嶅悎鏍兼暟" [ref=e847]
+ - columnheader "妫�娴嬬粨鏋�" [ref=e852]
+ - columnheader "鏉ユ枡鏃ユ湡" [ref=e857]
+ - columnheader "妫�娴嬫棩鏈�" [ref=e862]
+ - columnheader "妫�娴嬩汉鍛�" [ref=e867]
+ - columnheader "鍗曟嵁鐘舵��" [ref=e872]
+ - table [ref=e993]:
+ - rowgroup [ref=e1010]:
+ - row "IQC-DEMO-03 澹儻鏉ユ枡妫�楠�-03 JN-20260918-A03 4 澹儻 800 80 4 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1011]:
+ - cell [ref=e1012]:
+ - button "IQC-DEMO-03" [ref=e1015] [cursor=pointer]
+ - cell "澹儻鏉ユ枡妫�楠�-03" [ref=e1017]
+ - cell [ref=e1021]
+ - cell "JN-20260918-A03" [ref=e1025]
+ - cell "4" [ref=e1029]
+ - cell "澹儻" [ref=e1033]
+ - cell "800" [ref=e1037]
+ - cell "80" [ref=e1041]
+ - cell "4" [ref=e1045]
+ - cell [ref=e1049]
+ - cell "2026-09-17" [ref=e1051]
+ - cell "2026-09-18" [ref=e1055]
+ - cell "寮犱笁" [ref=e1059]
+ - cell "宸插畬鎴�" [ref=e1063]
+ - row "IQC-DEMO-02 绮捐悩鏉ユ枡妫�楠�-02 JN-20260918-A02 2 绮捐悩 1500 150 0 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1067]:
+ - cell [ref=e1068]:
+ - button "IQC-DEMO-02" [ref=e1071] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-02" [ref=e1073]
+ - cell [ref=e1077]
+ - cell "JN-20260918-A02" [ref=e1081]
+ - cell "2" [ref=e1085]
+ - cell "绮捐悩" [ref=e1089]
+ - cell "1500" [ref=e1093]
+ - cell "150" [ref=e1097]
+ - cell "0" [ref=e1101]
+ - cell "鏍¢獙閫氳繃" [ref=e1105]
+ - cell "2026-09-17" [ref=e1109]
+ - cell "2026-09-18" [ref=e1113]
+ - cell "寮犱笁" [ref=e1117]
+ - cell "宸插畬鎴�" [ref=e1121]
+ - row "IQC-DEMO-01 绮捐悩鏉ユ枡妫�楠�-01 JN-20260918-A01 2 绮捐悩 2000 200 2 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1125]:
+ - cell [ref=e1126]:
+ - button "IQC-DEMO-01" [ref=e1129] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-01" [ref=e1131]
+ - cell [ref=e1135]
+ - cell "JN-20260918-A01" [ref=e1139]
+ - cell "2" [ref=e1143]
+ - cell "绮捐悩" [ref=e1147]
+ - cell "2000" [ref=e1151]
+ - cell "200" [ref=e1155]
+ - cell "2" [ref=e1159]
+ - cell "鏍¢獙閫氳繃" [ref=e1163]
+ - cell "2026-09-17" [ref=e1167]
+ - cell "2026-09-18" [ref=e1171]
+ - cell "寮犱笁" [ref=e1175]
+ - cell "宸插畬鎴�" [ref=e1179]
+ - row "IQC_20260917001 绮捐悩鏉ユ枡妫�楠�-0917 2 绮捐悩 100 100 0 2026-09-17 2026-09-17 瓒呯骇绠$悊鍛� 鑽夌" [ref=e1183]:
+ - cell [ref=e1184]:
+ - button "IQC_20260917001" [ref=e1187] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-0917" [ref=e1189]
+ - cell [ref=e1193]
+ - cell [ref=e1197]
+ - cell "2" [ref=e1201]
+ - cell "绮捐悩" [ref=e1205]
+ - cell "100" [ref=e1209]
+ - cell "100" [ref=e1213]
+ - cell "0" [ref=e1217]
+ - cell [ref=e1221]
+ - cell "2026-09-17" [ref=e1223]
+ - cell "2026-09-17" [ref=e1227]
+ - cell "瓒呯骇绠$悊鍛�" [ref=e1231]
+ - cell "鑽夌" [ref=e1235]
+ - generic [ref=e880]:
+ - table [ref=e883]:
+ - rowgroup [ref=e900]:
+ - row [ref=e901]:
+ - columnheader "鎿嶄綔" [ref=e902]
+ - table [ref=e1239]:
+ - rowgroup [ref=e1242]:
+ - row [ref=e1243]:
+ - cell [ref=e1244]:
+ - generic [ref=e1248]:
+ - button "璇︽儏" [ref=e1250] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1257] [cursor=pointer]
+ - row [ref=e1263]:
+ - cell [ref=e1264]:
+ - generic [ref=e1268]:
+ - button "璇︽儏" [ref=e1270] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1277] [cursor=pointer]
+ - row [ref=e1283]:
+ - cell [ref=e1284]:
+ - generic [ref=e1288]:
+ - button "璇︽儏" [ref=e1290] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1297] [cursor=pointer]
+ - row [ref=e1303]:
+ - cell [ref=e1304]:
+ - generic [ref=e1308]:
+ - button "淇敼" [ref=e1310] [cursor=pointer]
+ - button "鍒犻櫎" [ref=e1317] [cursor=pointer]
+ - button "璇︽儏" [ref=e1322] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1329] [cursor=pointer]
+ - generic [ref=e921]:
+ - generic [ref=e922]: 鍏� 4 鏉¤褰�
+ - generic [ref=e924] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e925]:
+ - textbox "璇烽�夋嫨" [ref=e926]: 20鏉�/椤�
+ - generic [ref=e927]: 睿�
+ - button "飱�" [ref=e930]
+ - button "顧�" [ref=e932]
+ - button "顫�" [ref=e934]
+ - button "1" [ref=e937] [cursor=pointer]
+ - button "顫�" [ref=e938]
+ - button "顧�" [ref=e940]
+ - button "顦�" [ref=e942]
+ - dialog [ref=e2833]:
+ - heading "鏌ョ湅鏉ユ枡妫�楠屽崟" [level=2] [ref=e2835]
+ - generic [ref=e2837]:
+ - generic [ref=e2839]:
+ - generic [ref=e2840]:
+ - generic [ref=e2841]:
+ - generic [ref=e2842]: "*"
+ - text: 妫�楠屽崟缂栧彿
+ - generic [ref=e2846]:
+ - textbox "* 妫�楠屽崟缂栧彿" [disabled] [ref=e2847]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - text: IQC-DEMO-01
+ - button "鐢� 鎴�" [disabled] [ref=e2849]
+ - generic [ref=e2851]:
+ - generic [ref=e2852]:
+ - generic [ref=e2853]: "*"
+ - text: 妫�楠屽崟鍚嶇О
+ - textbox "* 妫�楠屽崟鍚嶇О" [disabled] [ref=e2858]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟鍚嶇О
+ - text: 绮捐悩鏉ユ枡妫�楠�-01
+ - generic [ref=e2859]:
+ - generic [ref=e2860]:
+ - generic [ref=e2861]: "*"
+ - text: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [disabled] [ref=e2868]: 绮捐悩
+ - generic [ref=e2874]:
+ - generic [ref=e2875]: 渚涘簲鍟�
+ - generic [ref=e2881]:
+ - combobox "渚涘簲鍟�" [disabled] [ref=e2883]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e2884]:
+ - generic [ref=e2885]: 渚涘簲鍟嗘壒娆″彿
+ - textbox "渚涘簲鍟嗘壒娆″彿" [disabled] [ref=e2890]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - text: JN-20260918-A01
+ - generic [ref=e2891]:
+ - generic [ref=e2892]:
+ - generic [ref=e2893]: "*"
+ - text: 鏈鎺ユ敹鏁伴噺
+ - spinbutton "* 鏈鎺ユ敹鏁伴噺" [disabled] [ref=e2900]: "2000.00"
+ - generic [ref=e2901]:
+ - generic [ref=e2902]:
+ - generic [ref=e2903]: "*"
+ - text: 鍚堟牸鍝佹暟閲�
+ - spinbutton "* 鍚堟牸鍝佹暟閲�" [disabled] [ref=e2910]: "198"
+ - generic [ref=e2911]:
+ - generic [ref=e2912]:
+ - generic [ref=e2913]: "*"
+ - text: 涓嶅悎鏍煎搧鏁伴噺
+ - img [ref=e2914] [cursor=pointer]
+ - spinbutton "* 涓嶅悎鏍煎搧鏁伴噺" [disabled] [ref=e2923]: "2"
+ - generic [ref=e2924]:
+ - generic [ref=e2925]:
+ - generic [ref=e2926]: "*"
+ - text: 鏉ユ枡鏃ユ湡
+ - generic [ref=e2932]:
+ - textbox "* 鏉ユ枡鏃ユ湡" [disabled] [ref=e2933]:
+ - /placeholder: 璇烽�夋嫨鏉ユ枡鏃ユ湡
+ - text: 2026-09-17
+ - generic:
+ - img "calendar"
+ - generic [ref=e2934]:
+ - generic [ref=e2935]:
+ - generic [ref=e2936]: "*"
+ - text: 妫�娴嬩汉鍛�
+ - generic [ref=e2942]:
+ - combobox "* 妫�娴嬩汉鍛�" [disabled] [ref=e2944]
+ - generic "寮犱笁" [ref=e2945]
+ - generic [ref=e2946]:
+ - generic [ref=e2947]:
+ - generic [ref=e2948]: "*"
+ - text: 妫�娴嬫棩鏈�
+ - generic [ref=e2954]:
+ - textbox "* 妫�娴嬫棩鏈�" [disabled] [ref=e2955]:
+ - /placeholder: 璇烽�夋嫨妫�娴嬫棩鏈�
+ - text: 2026-09-18
+ - generic:
+ - img "calendar"
+ - generic [ref=e2956]:
+ - generic [ref=e2957]: 妫�娴嬬粨鏋�
+ - generic [ref=e2963]:
+ - combobox "妫�娴嬬粨鏋�" [disabled] [ref=e2965]
+ - generic "鏍¢獙閫氳繃" [ref=e2966]
+ - generic [ref=e2967]:
+ - generic [ref=e2968]: 澶囨敞
+ - textbox "澶囨敞" [disabled] [ref=e2973]:
+ - /placeholder: 璇疯緭鍏ュ娉�
+ - text: 婕旂ず鏁版嵁
+ - generic [ref=e2975]:
+ - generic [ref=e2976]: 缂洪櫡鎯呭喌
+ - table [ref=e2979]:
+ - rowgroup [ref=e2980]:
+ - row [ref=e2981]:
+ - rowheader "鑷村懡缂洪櫡鏁�" [ref=e2982]
+ - cell "0" [ref=e2983]
+ - rowheader "涓ラ噸缂洪櫡鏁�" [ref=e2985]
+ - cell "0" [ref=e2986]
+ - rowheader "杞诲井缂洪櫡鏁�" [ref=e2988]
+ - cell "0" [ref=e2989]
+ - row [ref=e2991]:
+ - rowheader "鑷村懡缂洪櫡鐜�" [ref=e2992]
+ - cell "0%" [ref=e2993]
+ - rowheader "涓ラ噸缂洪櫡鐜�" [ref=e2995]
+ - cell "0%" [ref=e2996]
+ - rowheader "杞诲井缂洪櫡鐜�" [ref=e2998]
+ - cell "0%" [ref=e2999]
+ - generic [ref=e3001]:
+ - tablist [ref=e3002]:
+ - generic [ref=e3004]:
+ - tab "妫�楠岄」" [ref=e3006] [cursor=pointer]
+ - tab "妫�娴嬬粨鏋�" [selected] [ref=e3008] [cursor=pointer]
+ - generic [ref=e3010]:
+ - text: 瞟� 顪� 顦� 睿� 飱� 顧� 顫� 顫� 顧� 顦�
+ - tabpanel "妫�娴嬬粨鏋�" [ref=e4213]:
+ - generic [ref=e4218]:
+ - generic [ref=e4220]:
+ - generic [ref=e4221]: 妫�娴嬬粨鏋�
+ - generic [ref=e4224]:
+ - button "瞟�" [ref=e4225] [cursor=pointer]
+ - button "顪�" [ref=e4227] [cursor=pointer]
+ - button "顦�" [ref=e4229] [cursor=pointer]
+ - generic [ref=e4237]:
+ - table [ref=e4241]:
+ - rowgroup [ref=e4247]:
+ - row [ref=e4248]:
+ - columnheader "鏍峰搧缂栧彿" [ref=e4249]
+ - columnheader "鐗╄祫SN" [ref=e4254]
+ - columnheader "澶囨敞" [ref=e4259]
+ - columnheader "鎿嶄綔" [ref=e4264]
+ - table [ref=e4272]:
+ - rowgroup [ref=e4278]:
+ - row "MIR-DEMO-01 YP-A001 璇︽儏" [ref=e4279]:
+ - cell "MIR-DEMO-01" [ref=e4280]
+ - cell "YP-A001" [ref=e4284]
+ - cell [ref=e4288]
+ - cell [ref=e4292]:
+ - button "璇︽儏" [active] [ref=e4298] [cursor=pointer]
+ - generic [ref=e4306]:
+ - generic [ref=e4307]: 鍏� 1 鏉¤褰�
+ - generic [ref=e4309] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e4310]:
+ - textbox "璇烽�夋嫨" [ref=e4311]: 20鏉�/椤�
+ - generic [ref=e4312]: 睿�
+ - button "飱�" [ref=e4315]
+ - button "顧�" [ref=e4317]
+ - button "顫�" [ref=e4319]
+ - button "1" [ref=e4322] [cursor=pointer]
+ - button "顫�" [ref=e4323]
+ - button "顧�" [ref=e4325]
+ - button "顦�" [ref=e4327]
+ - button [ref=e4193] [cursor=pointer]
+ - generic [ref=e4203]:
+ - button "璐ㄦ鍔╂墜" [ref=e4205] [cursor=pointer]
+ - button "鍙� 娑�" [ref=e4207] [cursor=pointer]
+ - button [ref=e4209] [cursor=pointer]
+ - dialog [ref=e4330]:
+ - heading "鏌ョ湅妫�楠岀粨鏋�" [level=2] [ref=e4332]
+ - generic [ref=e4335]:
+ - generic [ref=e4337]:
+ - generic [ref=e4338]:
+ - generic [ref=e4339]:
+ - generic [ref=e4340]: "*"
+ - text: 鏍峰搧缂栧彿
+ - generic [ref=e4344]:
+ - textbox "* 鏍峰搧缂栧彿" [disabled] [ref=e4345]:
+ - /placeholder: 璇疯緭鍏ユ牱鍝佺紪鍙�
+ - text: MIR-DEMO-01
+ - button "鐢� 鎴�" [ref=e4347] [cursor=pointer]
+ - generic [ref=e4349]:
+ - generic [ref=e4350]: 鐗╄祫 SN
+ - textbox "鐗╄祫 SN" [disabled] [ref=e4355]:
+ - /placeholder: 璇疯緭鍏ョ墿璧� SN
+ - text: YP-A001
+ - generic [ref=e4356]:
+ - generic [ref=e4357]: 澶囨敞
+ - textbox "澶囨敞" [disabled] [ref=e4362]:
+ - /placeholder: 璇疯緭鍏ュ娉�
+ - separator [ref=e4363]:
+ - generic [ref=e4364]: 妫�娴嬪��
+ - generic [ref=e4365]:
+ - generic [ref=e4368]:
+ - generic "妫�娴嬮」1锛氬瑙�" [ref=e4370]: "妫�娴嬮」1锛氬瑙� :"
+ - textbox [disabled] [ref=e4374]: 婢勬竻閫忔槑娑蹭綋锛屾棤鏈烘鏉傝川
+ - generic [ref=e4377]:
+ - generic "妫�娴嬮」2锛氳壊搴︼紙Hazen锛�" [ref=e4379]: "妫�娴嬮」2锛氳壊搴︼紙Hazen锛� :"
+ - textbox [disabled] [ref=e4383]: "5"
+ - generic [ref=e4386]:
+ - generic "妫�娴嬮」3锛氳瘯鏍疯川閲� m锛坓锛�" [ref=e4388]: "妫�娴嬮」3锛氳瘯鏍疯川閲� m锛坓锛� :"
+ - textbox [disabled] [ref=e4392]: "10.52"
+ - generic [ref=e4395]:
+ - generic "妫�娴嬮」4锛氳瘯鏍�+绉伴噺鐡� m1锛坓锛�" [ref=e4397]: "妫�娴嬮」4锛氳瘯鏍�+绉伴噺鐡� m1锛坓锛� :"
+ - textbox [disabled] [ref=e4401]: "12.35"
+ - generic [ref=e4404]:
+ - generic "妫�娴嬮」5锛氱О閲忕摱 m0锛坓锛�" [ref=e4406]: "妫�娴嬮」5锛氱О閲忕摱 m0锛坓锛� :"
+ - textbox [disabled] [ref=e4410]: "1.83"
+ - generic [ref=e4413]:
+ - generic "妫�娴嬮」6锛氭按鍒嗙粨鏋� w锛�%锛�" [ref=e4415]: "妫�娴嬮」6锛氭按鍒嗙粨鏋� w锛�%锛� :"
+ - textbox [disabled] [ref=e4419]: "0.048"
+ - generic [ref=e4422]:
+ - generic "妫�娴嬮」7锛氭爣娑叉祿搴� c锛坢ol/L锛�" [ref=e4424]: "妫�娴嬮」7锛氭爣娑叉祿搴� c锛坢ol/L锛� :"
+ - textbox [disabled] [ref=e4428]: "0.1005"
+ - generic [ref=e4431]:
+ - generic "妫�娴嬮」8锛氭秷鑰楁淮瀹氭恫浣撶Н V锛坢L锛�" [ref=e4433]: "妫�娴嬮」8锛氭秷鑰楁淮瀹氭恫浣撶Н V锛坢L锛� :"
+ - textbox [disabled] [ref=e4437]: "0.15"
+ - generic [ref=e4440]:
+ - generic "妫�娴嬮」9锛氳瘯鏍疯川閲� m锛坓锛�" [ref=e4442]: "妫�娴嬮」9锛氳瘯鏍疯川閲� m锛坓锛� :"
+ - textbox [disabled] [ref=e4446]: "10.02"
+ - generic [ref=e4449]:
+ - generic "妫�娴嬮」10锛氶吀鍚噺缁撴灉 w3锛�%锛�" [ref=e4451]: "妫�娴嬮」10锛氶吀鍚噺缁撴灉 w3锛�%锛� :"
+ - textbox [disabled] [ref=e4455]: 0.090銆�0.095
+ - generic [ref=e4458]:
+ - generic "妫�娴嬮」11锛氭涓侀唶鍚噺 /%锛�%锛�" [ref=e4460]: "妫�娴嬮」11锛氭涓侀唶鍚噺 /%锛�%锛� :"
+ - textbox [disabled] [ref=e4464]: 99.82銆�99.85銆�99.87
+ - generic [ref=e4467]:
+ - generic "妫�娴嬮」12锛氬瘑搴︼紙kg/m鲁锛�" [ref=e4469]: "妫�娴嬮」12锛氬瘑搴︼紙kg/m鲁锛� :"
+ - textbox [disabled] [ref=e4473]: "810"
+ - generic [ref=e4476]:
+ - generic "妫�娴嬮」13锛氭姌鍏夌巼锛坣虏鈦癉锛�" [ref=e4478]: "妫�娴嬮」13锛氭姌鍏夌巼锛坣虏鈦癉锛� :"
+ - textbox [disabled] [ref=e4482]: "1.3993"
+ - button [ref=e4483] [cursor=pointer]
+ - button "鍙� 娑�" [ref=e4494] [cursor=pointer]
+ - button [ref=e4496] [cursor=pointer]
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-09-18T06-22-49-485Z.yml b/.playwright-mcp/page-2026-09-18T06-22-49-485Z.yml
new file mode 100644
index 0000000..f95803b
--- /dev/null
+++ b/.playwright-mcp/page-2026-09-18T06-22-49-485Z.yml
@@ -0,0 +1,437 @@
+- generic [ref=e4]:
+ - generic [ref=e7]:
+ - complementary [ref=e8]:
+ - generic [ref=e9]:
+ - generic [ref=e10] [cursor=pointer]
+ - link "宸ヤ笟AI鏅洪�犲钩鍙� 宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e15] [cursor=pointer]:
+ - /url: javascript:void 0
+ - img "宸ヤ笟AI鏅洪�犲钩鍙�" [ref=e18]
+ - generic [ref=e19]: 宸ヤ笟AI鏅洪�犲钩鍙�
+ - menu [ref=e22]:
+ - menuitem "棣栭〉" [ref=e23] [cursor=pointer]
+ - listitem [ref=e30]:
+ - generic [ref=e31] [cursor=pointer]: 鍩虹鏁版嵁
+ - listitem [ref=e39]:
+ - generic [ref=e40] [cursor=pointer]: 閲囪喘绠$悊
+ - listitem [ref=e46]:
+ - generic [ref=e47] [cursor=pointer]: 钀ラ攢绠$悊
+ - listitem [ref=e53]:
+ - generic [ref=e54] [cursor=pointer]: 璁惧绠$悊
+ - listitem [ref=e61]:
+ - generic [ref=e62] [cursor=pointer]: 浠撳偍鐗╂祦
+ - listitem [ref=e70]:
+ - generic [ref=e71] [cursor=pointer]: 宸ヨ壓璁捐
+ - listitem [ref=e78]:
+ - generic [ref=e79] [cursor=pointer]: 浜у搧璁捐
+ - listitem [ref=e85]:
+ - generic [ref=e86] [cursor=pointer]: 鐢熶骇绠℃帶
+ - listitem [ref=e93]:
+ - generic [ref=e94] [cursor=pointer]: 璐ㄩ噺绠$悊
+ - list [ref=e593]:
+ - menuitem "妫�娴嬮」璁剧疆" [ref=e594] [cursor=pointer]
+ - menuitem "璐ㄦ鏂规" [ref=e599] [cursor=pointer]
+ - menuitem "寰呮浠诲姟" [ref=e604] [cursor=pointer]
+ - menuitem "鏉ユ枡妫�楠�" [ref=e611] [cursor=pointer]
+ - menuitem "杩囩▼妫�楠�" [ref=e616] [cursor=pointer]
+ - menuitem "閫�鏂欐楠�" [ref=e621] [cursor=pointer]
+ - menuitem "鍑鸿揣妫�楠�" [ref=e626] [cursor=pointer]
+ - menuitem "鎵规杩芥函" [ref=e631] [cursor=pointer]
+ - menuitem "涓嶅悎鏍煎搧澶勭悊" [ref=e637] [cursor=pointer]
+ - menuitem "甯歌缂洪櫡" [ref=e642] [cursor=pointer]
+ - listitem [ref=e100]:
+ - generic [ref=e101] [cursor=pointer]: 鎶ヨ〃绠$悊
+ - listitem [ref=e108]:
+ - generic [ref=e109] [cursor=pointer]: 鍐崇瓥BI澶у睆
+ - listitem [ref=e115]:
+ - generic [ref=e116] [cursor=pointer]: 鍗忓悓鍔炲叕
+ - listitem [ref=e122]:
+ - generic [ref=e123] [cursor=pointer]: 浜哄姏璧勬簮
+ - listitem [ref=e129]:
+ - generic [ref=e130] [cursor=pointer]: 鍞悗绠$悊
+ - listitem [ref=e136]:
+ - generic [ref=e137] [cursor=pointer]: 鍩虹璁炬柦
+ - listitem [ref=e143]:
+ - generic [ref=e144] [cursor=pointer]: 绯荤粺绠$悊
+ - generic [ref=e151] [cursor=pointer]
+ - generic [ref=e156]:
+ - generic [ref=e157]:
+ - banner [ref=e158]:
+ - button [ref=e159] [cursor=pointer]
+ - button [ref=e162] [cursor=pointer]
+ - navigation "breadcrumb" [ref=e167]:
+ - list [ref=e168]:
+ - listitem [ref=e649]:
+ - link "璐ㄩ噺绠$悊" [ref=e650] [cursor=pointer]:
+ - /url: javascript:void 0
+ - listitem [ref=e654]
+ - listitem [ref=e657]:
+ - link "鏉ユ枡妫�楠�" [disabled] [ref=e658]
+ - generic [ref=e177]:
+ - generic [ref=e179] [cursor=pointer]:
+ - generic [ref=e183]: 鎼滅储
+ - generic [ref=e184]: Ctrl K
+ - button [ref=e186] [cursor=pointer]
+ - button "dark" [ref=e191] [cursor=pointer]
+ - button [ref=e200] [cursor=pointer]
+ - button [ref=e206] [cursor=pointer]
+ - button [ref=e209] [cursor=pointer]
+ - button [ref=e215] [cursor=pointer]:
+ - button [ref=e217]
+ - button "宸ヤ綔鍙�" [ref=e221] [cursor=pointer]
+ - button [ref=e225] [cursor=pointer]:
+ - img "瓒呯骇绠$悊鍛�" [ref=e230]
+ - generic [ref=e232]:
+ - generic [ref=e237]:
+ - generic [ref=e238] [cursor=pointer]: 棣栭〉
+ - generic [ref=e664] [cursor=pointer]: 鏉ユ枡妫�楠�
+ - generic [ref=e254]:
+ - button [ref=e255] [cursor=pointer]
+ - generic [ref=e262] [cursor=pointer]
+ - generic [ref=e266] [cursor=pointer]
+ - main [ref=e273]:
+ - generic [ref=e684]:
+ - generic [ref=e689]:
+ - generic [ref=e690]:
+ - generic [ref=e691]: 妫�楠屽崟缂栧彿
+ - textbox "妫�楠屽崟缂栧彿" [ref=e948]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - generic [ref=e693]:
+ - generic [ref=e694]: 渚涘簲鍟�
+ - generic [ref=e700] [cursor=pointer]:
+ - combobox "渚涘簲鍟�" [ref=e702]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e703]:
+ - generic [ref=e704]: 渚涘簲鍟嗘壒娆�
+ - textbox "渚涘簲鍟嗘壒娆�" [ref=e954]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - generic [ref=e706]:
+ - generic [ref=e707]: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [ref=e714]
+ - generic [ref=e717]:
+ - generic [ref=e718]: 妫�娴嬬粨鏋�
+ - generic [ref=e724] [cursor=pointer]:
+ - combobox "妫�娴嬬粨鏋�" [ref=e726]
+ - generic: 璇烽�夋嫨妫�娴嬬粨鏋�
+ - generic [ref=e727]:
+ - generic [ref=e728]: 鏉ユ枡鏃ユ湡
+ - generic [ref=e962]:
+ - textbox "鏉ユ枡鏃ユ湡" [ref=e964]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e966]:
+ - img "swap-right" [ref=e967]
+ - textbox "缁撴潫鏃堕棿" [ref=e971]
+ - generic:
+ - img "calendar"
+ - generic [ref=e730]:
+ - generic [ref=e731]: 妫�娴嬫棩鏈�
+ - generic [ref=e975]:
+ - textbox "妫�娴嬫棩鏈�" [ref=e977]:
+ - /placeholder: 寮�濮嬫椂闂�
+ - generic "to" [ref=e979]:
+ - img "swap-right" [ref=e980]
+ - textbox "缁撴潫鏃堕棿" [ref=e984]
+ - generic:
+ - img "calendar"
+ - generic [ref=e733]:
+ - generic [ref=e734]: 妫�娴嬩汉鍛�
+ - generic [ref=e740] [cursor=pointer]:
+ - combobox "妫�娴嬩汉鍛�" [ref=e742]
+ - generic: 璇烽�夋嫨妫�娴嬩汉鍛�
+ - generic [ref=e743]:
+ - button "閲� 缃�" [ref=e985] [cursor=pointer]
+ - button "鎼� 绱�" [ref=e987] [cursor=pointer]
+ - generic [ref=e744] [cursor=pointer]: 鏀惰捣
+ - generic [ref=e751]:
+ - generic [ref=e753]:
+ - generic [ref=e754]: 鏉ユ枡妫�楠屽崟鍒楄〃
+ - generic [ref=e758]:
+ - generic [ref=e760]:
+ - button "鏂板鏉ユ枡妫�楠屽崟" [ref=e762] [cursor=pointer]
+ - button "瀵煎嚭" [ref=e766] [cursor=pointer]
+ - button "顫�" [ref=e769] [cursor=pointer]
+ - generic [ref=e771]:
+ - button "瞟�" [ref=e772] [cursor=pointer]
+ - button "顪�" [ref=e774] [cursor=pointer]
+ - button "顦�" [ref=e776] [cursor=pointer]
+ - generic [ref=e783]:
+ - generic [ref=e784]:
+ - table [ref=e788]:
+ - rowgroup [ref=e805]:
+ - row [ref=e806]:
+ - columnheader "鏉ユ枡妫�楠屽崟缂栧彿" [ref=e807]
+ - columnheader "鏉ユ枡妫�楠屽崟鍚嶇О" [ref=e812]
+ - columnheader "渚涘簲鍟嗙畝绉�" [ref=e817]
+ - columnheader "渚涘簲鍟嗘壒娆″彿" [ref=e822]
+ - columnheader "浜у搧鐗╂枡缂栫爜" [ref=e827]
+ - columnheader "浜у搧鐗╂枡鍚嶇О" [ref=e832]
+ - columnheader "鎺ユ敹鏁伴噺" [ref=e837]
+ - columnheader "妫�娴嬫暟閲�" [ref=e842]
+ - columnheader "涓嶅悎鏍兼暟" [ref=e847]
+ - columnheader "妫�娴嬬粨鏋�" [ref=e852]
+ - columnheader "鏉ユ枡鏃ユ湡" [ref=e857]
+ - columnheader "妫�娴嬫棩鏈�" [ref=e862]
+ - columnheader "妫�娴嬩汉鍛�" [ref=e867]
+ - columnheader "鍗曟嵁鐘舵��" [ref=e872]
+ - table [ref=e993]:
+ - rowgroup [ref=e1010]:
+ - row "IQC-DEMO-03 澹儻鏉ユ枡妫�楠�-03 JN-20260918-A03 4 澹儻 800 80 4 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1011]:
+ - cell [ref=e1012]:
+ - button "IQC-DEMO-03" [ref=e1015] [cursor=pointer]
+ - cell "澹儻鏉ユ枡妫�楠�-03" [ref=e1017]
+ - cell [ref=e1021]
+ - cell "JN-20260918-A03" [ref=e1025]
+ - cell "4" [ref=e1029]
+ - cell "澹儻" [ref=e1033]
+ - cell "800" [ref=e1037]
+ - cell "80" [ref=e1041]
+ - cell "4" [ref=e1045]
+ - cell [ref=e1049]
+ - cell "2026-09-17" [ref=e1051]
+ - cell "2026-09-18" [ref=e1055]
+ - cell "寮犱笁" [ref=e1059]
+ - cell "宸插畬鎴�" [ref=e1063]
+ - row "IQC-DEMO-02 绮捐悩鏉ユ枡妫�楠�-02 JN-20260918-A02 2 绮捐悩 1500 150 0 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1067]:
+ - cell [ref=e1068]:
+ - button "IQC-DEMO-02" [ref=e1071] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-02" [ref=e1073]
+ - cell [ref=e1077]
+ - cell "JN-20260918-A02" [ref=e1081]
+ - cell "2" [ref=e1085]
+ - cell "绮捐悩" [ref=e1089]
+ - cell "1500" [ref=e1093]
+ - cell "150" [ref=e1097]
+ - cell "0" [ref=e1101]
+ - cell "鏍¢獙閫氳繃" [ref=e1105]
+ - cell "2026-09-17" [ref=e1109]
+ - cell "2026-09-18" [ref=e1113]
+ - cell "寮犱笁" [ref=e1117]
+ - cell "宸插畬鎴�" [ref=e1121]
+ - row "IQC-DEMO-01 绮捐悩鏉ユ枡妫�楠�-01 JN-20260918-A01 2 绮捐悩 2000 200 2 鏍¢獙閫氳繃 2026-09-17 2026-09-18 寮犱笁 宸插畬鎴�" [ref=e1125]:
+ - cell [ref=e1126]:
+ - button "IQC-DEMO-01" [ref=e1129] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-01" [ref=e1131]
+ - cell [ref=e1135]
+ - cell "JN-20260918-A01" [ref=e1139]
+ - cell "2" [ref=e1143]
+ - cell "绮捐悩" [ref=e1147]
+ - cell "2000" [ref=e1151]
+ - cell "200" [ref=e1155]
+ - cell "2" [ref=e1159]
+ - cell "鏍¢獙閫氳繃" [ref=e1163]
+ - cell "2026-09-17" [ref=e1167]
+ - cell "2026-09-18" [ref=e1171]
+ - cell "寮犱笁" [ref=e1175]
+ - cell "宸插畬鎴�" [ref=e1179]
+ - row "IQC_20260917001 绮捐悩鏉ユ枡妫�楠�-0917 2 绮捐悩 100 100 0 2026-09-17 2026-09-17 瓒呯骇绠$悊鍛� 鑽夌" [ref=e1183]:
+ - cell [ref=e1184]:
+ - button "IQC_20260917001" [ref=e1187] [cursor=pointer]
+ - cell "绮捐悩鏉ユ枡妫�楠�-0917" [ref=e1189]
+ - cell [ref=e1193]
+ - cell [ref=e1197]
+ - cell "2" [ref=e1201]
+ - cell "绮捐悩" [ref=e1205]
+ - cell "100" [ref=e1209]
+ - cell "100" [ref=e1213]
+ - cell "0" [ref=e1217]
+ - cell [ref=e1221]
+ - cell "2026-09-17" [ref=e1223]
+ - cell "2026-09-17" [ref=e1227]
+ - cell "瓒呯骇绠$悊鍛�" [ref=e1231]
+ - cell "鑽夌" [ref=e1235]
+ - generic [ref=e880]:
+ - table [ref=e883]:
+ - rowgroup [ref=e900]:
+ - row [ref=e901]:
+ - columnheader "鎿嶄綔" [ref=e902]
+ - table [ref=e1239]:
+ - rowgroup [ref=e1242]:
+ - row [ref=e1243]:
+ - cell [ref=e1244]:
+ - generic [ref=e1248]:
+ - button "璇︽儏" [ref=e1250] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1257] [cursor=pointer]
+ - row [ref=e1263]:
+ - cell [ref=e1264]:
+ - generic [ref=e1268]:
+ - button "璇︽儏" [ref=e1270] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1277] [cursor=pointer]
+ - row [ref=e1283]:
+ - cell [ref=e1284]:
+ - generic [ref=e1288]:
+ - button "璇︽儏" [ref=e1290] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1297] [cursor=pointer]
+ - row [ref=e1303]:
+ - cell [ref=e1304]:
+ - generic [ref=e1308]:
+ - button "淇敼" [ref=e1310] [cursor=pointer]
+ - button "鍒犻櫎" [ref=e1317] [cursor=pointer]
+ - button "璇︽儏" [ref=e1322] [cursor=pointer]
+ - button "璐ㄦ鎶ュ憡" [ref=e1329] [cursor=pointer]
+ - generic [ref=e921]:
+ - generic [ref=e922]: 鍏� 4 鏉¤褰�
+ - generic [ref=e924] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e925]:
+ - textbox "璇烽�夋嫨" [ref=e926]: 20鏉�/椤�
+ - generic [ref=e927]: 睿�
+ - button "飱�" [ref=e930]
+ - button "顧�" [ref=e932]
+ - button "顫�" [ref=e934]
+ - button "1" [ref=e937] [cursor=pointer]
+ - button "顫�" [ref=e938]
+ - button "顧�" [ref=e940]
+ - button "顦�" [ref=e942]
+ - dialog [ref=e2833]:
+ - heading "鏌ョ湅鏉ユ枡妫�楠屽崟" [level=2] [ref=e2835]
+ - generic [ref=e2837]:
+ - generic [ref=e2839]:
+ - generic [ref=e2840]:
+ - generic [ref=e2841]:
+ - generic [ref=e2842]: "*"
+ - text: 妫�楠屽崟缂栧彿
+ - generic [ref=e2846]:
+ - textbox "* 妫�楠屽崟缂栧彿" [disabled] [ref=e2847]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟缂栧彿
+ - text: IQC-DEMO-01
+ - button "鐢� 鎴�" [disabled] [ref=e2849]
+ - generic [ref=e2851]:
+ - generic [ref=e2852]:
+ - generic [ref=e2853]: "*"
+ - text: 妫�楠屽崟鍚嶇О
+ - textbox "* 妫�楠屽崟鍚嶇О" [disabled] [ref=e2858]:
+ - /placeholder: 璇疯緭鍏ユ楠屽崟鍚嶇О
+ - text: 绮捐悩鏉ユ枡妫�楠�-01
+ - generic [ref=e2859]:
+ - generic [ref=e2860]:
+ - generic [ref=e2861]: "*"
+ - text: 浜у搧鐗╂枡
+ - textbox "璇烽�夋嫨浜у搧鐗╂枡" [disabled] [ref=e2868]: 绮捐悩
+ - generic [ref=e2874]:
+ - generic [ref=e2875]: 渚涘簲鍟�
+ - generic [ref=e2881]:
+ - combobox "渚涘簲鍟�" [disabled] [ref=e2883]
+ - generic: 璇烽�夋嫨渚涘簲鍟�
+ - generic [ref=e2884]:
+ - generic [ref=e2885]: 渚涘簲鍟嗘壒娆″彿
+ - textbox "渚涘簲鍟嗘壒娆″彿" [disabled] [ref=e2890]:
+ - /placeholder: 璇疯緭鍏ヤ緵搴斿晢鎵规鍙�
+ - text: JN-20260918-A01
+ - generic [ref=e2891]:
+ - generic [ref=e2892]:
+ - generic [ref=e2893]: "*"
+ - text: 鏈鎺ユ敹鏁伴噺
+ - spinbutton "* 鏈鎺ユ敹鏁伴噺" [disabled] [ref=e2900]: "2000.00"
+ - generic [ref=e2901]:
+ - generic [ref=e2902]:
+ - generic [ref=e2903]: "*"
+ - text: 鍚堟牸鍝佹暟閲�
+ - spinbutton "* 鍚堟牸鍝佹暟閲�" [disabled] [ref=e2910]: "198"
+ - generic [ref=e2911]:
+ - generic [ref=e2912]:
+ - generic [ref=e2913]: "*"
+ - text: 涓嶅悎鏍煎搧鏁伴噺
+ - img [ref=e2914] [cursor=pointer]
+ - spinbutton "* 涓嶅悎鏍煎搧鏁伴噺" [disabled] [ref=e2923]: "2"
+ - generic [ref=e2924]:
+ - generic [ref=e2925]:
+ - generic [ref=e2926]: "*"
+ - text: 鏉ユ枡鏃ユ湡
+ - generic [ref=e2932]:
+ - textbox "* 鏉ユ枡鏃ユ湡" [disabled] [ref=e2933]:
+ - /placeholder: 璇烽�夋嫨鏉ユ枡鏃ユ湡
+ - text: 2026-09-17
+ - generic:
+ - img "calendar"
+ - generic [ref=e2934]:
+ - generic [ref=e2935]:
+ - generic [ref=e2936]: "*"
+ - text: 妫�娴嬩汉鍛�
+ - generic [ref=e2942]:
+ - combobox "* 妫�娴嬩汉鍛�" [disabled] [ref=e2944]
+ - generic "寮犱笁" [ref=e2945]
+ - generic [ref=e2946]:
+ - generic [ref=e2947]:
+ - generic [ref=e2948]: "*"
+ - text: 妫�娴嬫棩鏈�
+ - generic [ref=e2954]:
+ - textbox "* 妫�娴嬫棩鏈�" [disabled] [ref=e2955]:
+ - /placeholder: 璇烽�夋嫨妫�娴嬫棩鏈�
+ - text: 2026-09-18
+ - generic:
+ - img "calendar"
+ - generic [ref=e2956]:
+ - generic [ref=e2957]: 妫�娴嬬粨鏋�
+ - generic [ref=e2963]:
+ - combobox "妫�娴嬬粨鏋�" [disabled] [ref=e2965]
+ - generic "鏍¢獙閫氳繃" [ref=e2966]
+ - generic [ref=e2967]:
+ - generic [ref=e2968]: 澶囨敞
+ - textbox "澶囨敞" [disabled] [ref=e2973]:
+ - /placeholder: 璇疯緭鍏ュ娉�
+ - text: 婕旂ず鏁版嵁
+ - generic [ref=e2975]:
+ - generic [ref=e2976]: 缂洪櫡鎯呭喌
+ - table [ref=e2979]:
+ - rowgroup [ref=e2980]:
+ - row [ref=e2981]:
+ - rowheader "鑷村懡缂洪櫡鏁�" [ref=e2982]
+ - cell "0" [ref=e2983]
+ - rowheader "涓ラ噸缂洪櫡鏁�" [ref=e2985]
+ - cell "0" [ref=e2986]
+ - rowheader "杞诲井缂洪櫡鏁�" [ref=e2988]
+ - cell "0" [ref=e2989]
+ - row [ref=e2991]:
+ - rowheader "鑷村懡缂洪櫡鐜�" [ref=e2992]
+ - cell "0%" [ref=e2993]
+ - rowheader "涓ラ噸缂洪櫡鐜�" [ref=e2995]
+ - cell "0%" [ref=e2996]
+ - rowheader "杞诲井缂洪櫡鐜�" [ref=e2998]
+ - cell "0%" [ref=e2999]
+ - generic [ref=e3001]:
+ - tablist [ref=e3002]:
+ - generic [ref=e3004]:
+ - tab "妫�楠岄」" [ref=e3006] [cursor=pointer]
+ - tab "妫�娴嬬粨鏋�" [selected] [ref=e3008] [cursor=pointer]
+ - generic [ref=e3010]:
+ - text: 瞟� 顪� 顦� 睿� 飱� 顧� 顫� 顫� 顧� 顦�
+ - tabpanel "妫�娴嬬粨鏋�" [ref=e4213]:
+ - generic [ref=e4218]:
+ - generic [ref=e4220]:
+ - generic [ref=e4221]: 妫�娴嬬粨鏋�
+ - generic [ref=e4224]:
+ - button "瞟�" [ref=e4225] [cursor=pointer]
+ - button "顪�" [ref=e4227] [cursor=pointer]
+ - button "顦�" [ref=e4229] [cursor=pointer]
+ - generic [ref=e4237]:
+ - table [ref=e4241]:
+ - rowgroup [ref=e4247]:
+ - row [ref=e4248]:
+ - columnheader "鏍峰搧缂栧彿" [ref=e4249]
+ - columnheader "鐗╄祫SN" [ref=e4254]
+ - columnheader "澶囨敞" [ref=e4259]
+ - columnheader "鎿嶄綔" [ref=e4264]
+ - table [ref=e4272]:
+ - rowgroup [ref=e4278]:
+ - row "MIR-DEMO-01 YP-A001 璇︽儏" [ref=e4279]:
+ - cell "MIR-DEMO-01" [ref=e4280]
+ - cell "YP-A001" [ref=e4284]
+ - cell [ref=e4288]
+ - cell [ref=e4292]:
+ - button "璇︽儏" [active] [ref=e4298] [cursor=pointer]
+ - generic [ref=e4306]:
+ - generic [ref=e4307]: 鍏� 1 鏉¤褰�
+ - generic [ref=e4309] [cursor=pointer]:
+ - generic "20鏉�/椤�" [ref=e4310]:
+ - textbox "璇烽�夋嫨" [ref=e4311]: 20鏉�/椤�
+ - generic [ref=e4312]: 睿�
+ - button "飱�" [ref=e4315]
+ - button "顧�" [ref=e4317]
+ - button "顫�" [ref=e4319]
+ - button "1" [ref=e4322] [cursor=pointer]
+ - button "顫�" [ref=e4323]
+ - button "顧�" [ref=e4325]
+ - button "顦�" [ref=e4327]
+ - button [ref=e4193] [cursor=pointer]
+ - generic [ref=e4203]:
+ - button "璐ㄦ鍔╂墜" [ref=e4205] [cursor=pointer]
+ - button "鍙� 娑�" [ref=e4207] [cursor=pointer]
+ - button [ref=e4209] [cursor=pointer]
\ No newline at end of file
diff --git a/docs/project-business/data/flows.json b/docs/project-business/data/flows.json
index 7b8e761..aef97e3 100644
--- a/docs/project-business/data/flows.json
+++ b/docs/project-business/data/flows.json
@@ -29,13 +29,13 @@
{"stage": "鑱斿姩", "action": "瀹℃壒閫氳繃鎸夊伐搴忔爣璁�: 鍊掑啿鈫掕嚜鍔ㄧ墿鏂欐秷鑰楁墸绾胯竟搴�(鍏佽璐熷簱瀛�)锛涜川妫�鈫掍骇鍑哄緟妫�琛岀瓑 IPQC锛涘叧閿潪妫�鈫掔洿鎺ヤ骇鍑哄叆搴�", "roles": ["绯荤粺鑷姩"]},
{"stage": "瀹屽伐", "action": "浠呮湯閬撳伐搴忓洖鍐欏伐鍗曞凡鐢熶骇鏁伴噺锛岃揪鏍囪嚜鍔ㄥ畬鎴愶紱MPS 绱鍒ゆ柇瀹屾垚骞跺彂浜嬩欢缁欓攢鍞鍗�", "roles": ["绯荤粺鑷姩"]}]},
{"id": "quality", "name": "璐ㄩ噺娴佺▼", "mermaid": "mermaid/05-quality-flow.mmd", "color": "#e06c6c",
- "summary": "鍥涢亾妫�楠岄椄鍙�(IQC/IPQC/OQC/RQC锛屼簩鎬� 0鈫�4) + 鍒ゅ畾鍥涙灉(鍚堟牸/鐗归噰/閫�璐�/鎶ュ簾) + NCR 璇勫澶勭疆鍏抽棴锛汚I 鎻愪緵鍒ゅ畾寤鸿锛汵CR 褰撳墠浠呭彴璐︿笉瑙﹀彂杩斿伐鍗曘�傛敮鎸佸寲宸ユ姤鍛婅寖寮忥細鍒嗙粍鎸囨爣鏍�+鍏紡鏂囨湰+骞宠娴嬮噺鎵规+閲囨牱琛ㄥご+绛惧瓧鍖猴紝娴忚鍣ㄦ墦鍗版楠屾姤鍛娿��",
+ "summary": "鍥涢亾妫�楠岄椄鍙�(IQC/IPQC/OQC/RQC锛屼簩鎬� 0鈫�4) + 鍒ゅ畾鍥涙灉(鍚堟牸/鐗归噰/閫�璐�/鎶ュ簾) + NCR 璇勫澶勭疆鍏抽棴锛汚I 鎻愪緵鍒ゅ畾寤鸿锛汵CR 褰撳墠浠呭彴璐︿笉瑙﹀彂杩斿伐鍗曘�傛敮鎸佸寲宸ユ姤鍛婅寖寮忥細鍒嗙粍鎸囨爣鏍�+鍏紡鏂囨湰+骞宠娴嬮噺鎵规+閲囨牱琛ㄥご+绛惧瓧鍖猴紝娴忚鍣ㄦ墦鍗版楠屾姤鍛婏紱骞跺彲瀵煎嚭浜у搧妫�楠屽崟 Word锛堢焊璐ㄦ楠屽崟鐗堝紡锛屽垽瀹氱粨璁�/璐ㄦ绔�/妫�楠屄峰鏍嘎锋壒鍑嗙瀛楃暀绌烘墜濉紝Word 鎵撳嵃锛夈��",
"steps": [
{"stage": "鏉ユ枡", "action": "鍒拌揣閫氱煡/澶栧崗鍏ュ簱鈫扞QC锛岀粨璁哄洖鍐欐帹杩涘緟鍏ュ簱鎴栬Е鍙戦��璐�", "roles": ["IQC 璐ㄦ鍛�"]},
{"stage": "杩囩▼", "action": "鎶ュ伐璐ㄦ宸ュ簭浜у嚭琛屸啋IPQC锛屽悎鏍兼媶琛屽叆搴撱�佷笉鍚堟牸鐢熸垚 NCR", "roles": ["IPQC 璐ㄦ鍛�"]},
{"stage": "鍑鸿揣", "action": "閿�鍞嚭搴撴彁浜も啋OQC锛屽畬鎴愬悗鍑哄簱鍗曡繘鍏ュ緟鎷h揣", "roles": ["OQC 璐ㄦ鍛�"]},
{"stage": "閫�璐�", "action": "閫�鏂�/閿�鍞��璐�/鍞悗閫�璐р啋RQC锛岀粨璁哄洖璋冨崟鎹笌鍞悗", "roles": ["RQC 璐ㄦ鍛�"]},
- {"stage": "鎶ュ憡", "action": "妫�楠岀粨鏋滄寜鍒嗙粍鏍�+娴嬮噺鎵规褰曞叆锛�/indicator-result/report 鑱氬悎鍚庡墠绔墦鍗版楠屾姤鍛�(鍚噰鏍峰湴鐐�/璇佷功缂栧彿/鎵ц鏍囧噯/澶嶆牳路瀹℃牳绛惧瓧鍖�)", "roles": ["璐ㄦ鍛�", "澶嶆牳浜�", "瀹℃牳浜�"]},
+ {"stage": "鎶ュ憡", "action": "妫�楠岀粨鏋滄寜鍒嗙粍鏍�+娴嬮噺鎵规褰曞叆锛�/indicator-result/report 鑱氬悎鍚庡墠绔墦鍗版楠屾姤鍛�(鍚噰鏍峰湴鐐�/璇佷功缂栧彿/鎵ц鏍囧噯/澶嶆牳路瀹℃牳绛惧瓧鍖�)锛�/indicator-result/export-product-word 瀵煎嚭浜у搧妫�楠屽崟Word(鏃犳妧鏈寚鏍囧垪路鍒ゅ畾缁撹/璐ㄦ涓撶敤绔�/妫�楠屄峰鏍嘎锋壒鍑嗙瀛楃暀绌烘墜濉峰钩琛屾祴閲忛】鍙峰悎骞堵蜂笅杞藉悗Word鎵撳嵃锛涜川妫�鍗曡鎯呮娴嬬粨鏋淭ab鍙寜鏍峰搧鏌ョ湅鍙妫�娴嬪�兼槑缁�)", "roles": ["璐ㄦ鍛�", "澶嶆牳浜�", "瀹℃牳浜�"]},
{"stage": "涓嶅悎鏍�", "action": "NCR: 寰呰瘎瀹♀啋璇勫鈫掑缃�(閫�璐�/鎶ュ簾/杩斿伐/璁╂鎺ユ敹/闄嶇骇)鈫掑叧闂�", "roles": ["璐ㄩ噺宸ョ▼甯�"]}]},
{"id": "warehouse", "name": "浠撳偍娴佺▼", "mermaid": "mermaid/06-warehouse-flow.mmd", "color": "#7e6bd6",
"summary": "15 绫诲崟鎹┍鍔ㄥ簱瀛樺彴璐�(鍏厓缁勩�佸洓閲�)鍙樺姩锛屽叏閮ㄧ粡浜嬪姟娴佹按鐣欑棔锛涙敮鎸佽皟鎷ㄥ湪閫斻�佺洏鐐硅皟鏁淬�佹壒娆�/SN 杩芥函銆佸簱瀛樺崰鐢ㄤ笌鍥涚骇鍐荤粨銆佺嚎杈硅櫄鎷熷簱璐熷簱瀛橈紱瀵瑰 WmsStockApi 渚� ERP 鏀跺彂銆�",
diff --git a/docs/project-business/index.html b/docs/project-business/index.html
index 0bac6c9..2cf6913 100644
--- a/docs/project-business/index.html
+++ b/docs/project-business/index.html
@@ -475,7 +475,7 @@
{"name": "OQC鍑鸿揣妫�楠�", "module": "璐ㄩ噺", "table": "mes_qc_oqc", "doc": "閿�鍞嚭搴撴彁浜よЕ鍙戯紝瀹屾垚鎺ㄨ繘鍑哄簱鍗曞緟鎷h揣", "upstream": ["閿�鍞嚭搴撳崟"], "downstream": ["閿�鍞嚭搴撳崟(鎺ㄨ繘)"], "keywords": "OQC 鍑鸿揣妫�楠� 鍑哄巶妫�楠�"},
{"name": "RQC閫�璐ф楠�", "module": "璐ㄩ噺", "table": "mes_qc_rqc", "doc": "鐢熶骇閫�鏂�/閿�鍞��璐�/鍞悗閫�璐цЕ鍙戯紝缁撹鍥炶皟鍞悗锛涘洓绫绘楠屽崟鍧囨敮鎸侀噰鏍峰湴鐐�/璇佷功缂栧彿/鎵ц鏍囧噯琛ㄥご涓庡鏍嘎峰鏍镐汉锛屽苟鍙墦鍗版楠屾姤鍛�", "upstream": ["閫�鏂�", "閫�璐�"], "downstream": ["閫�璐у叆搴�", "鍞悗鍥炶皟", "妫�楠屾姤鍛婃墦鍗�"], "keywords": "RQC 閫�璐ф楠�"},
{"name": "妫�楠屾寚鏍�", "module": "璐ㄩ噺", "table": "mes_qc_indicator", "doc": "鏀寔涓ょ骇鍒嗙粍鏍�(itemType褰曞叆/鍒嗙粍+parentId)銆佸叕寮忔枃鏈睍绀恒�佸崟浣嶆枃鏈�佸悓绾ф帓搴忥紱鍒嗙粍椤逛笉褰曞�硷紱鏈夊瓙椤圭鍒狅紱鍚屽眰绾у悕绉板彲閲嶅", "upstream": [], "downstream": ["璐ㄦ鏂规", "妫�楠屾姤鍛婃墦鍗�"], "keywords": "妫�楠屾寚鏍� indicator 鍒嗙粍 鍏紡 鍖栧伐"},
- {"name": "妫�楠屾姤鍛婃墦鍗�", "module": "璐ㄩ噺", "table": "mes_qc_indicator_result_detail", "doc": "鍖栧伐鎶ュ憡鑼冨紡锛氬钩琛屾祴閲忔壒娆�(measure_no)+鍒嗙粍鐭╅樀+鍏紡鍒�+绛惧瓧鍖猴紱/mes/qc/indicator-result/report 鑱氬悎锛屽墠绔祻瑙堝櫒鎵撳嵃", "upstream": ["IQC鏉ユ枡妫�楠�", "IPQC杩囩▼妫�楠�", "OQC鍑鸿揣妫�楠�", "RQC閫�璐ф楠�", "妫�楠屾寚鏍�"], "downstream": [], "keywords": "鎵撳嵃 鎶ュ憡 娴嬮噺鎵规 绛惧瓧 姝d竵閱� GB/T6027"},
+ {"name": "妫�楠屾姤鍛婃墦鍗�", "module": "璐ㄩ噺", "table": "mes_qc_indicator_result_detail", "doc": "鍖栧伐鎶ュ憡鑼冨紡锛氬钩琛屾祴閲忔壒娆�(measure_no)+鍒嗙粍鐭╅樀+鍏紡鍒�+绛惧瓧鍖猴紱/mes/qc/indicator-result/report 鑱氬悎锛屽墠绔祻瑙堝櫒鎵撳嵃锛涘彟鏈変骇鍝佹楠屽崟Word瀵煎嚭 /mes/qc/indicator-result/export-product-word锛堢焊璐ㄦ楠屽崟鐗堝紡锛氭棤鎶�鏈寚鏍囧垪锛屽垽瀹氱粨璁�/璐ㄦ涓撶敤绔犵暀绌烘墜濉紝骞宠娴嬮噺椤垮彿鍚堝苟锛岀敓浜у崟浣嶅啓姝汇�佺敓浜ф椂闂�=鍗曟嵁鍒涘缓鏃堕棿锛屼笅杞藉悗Word鎵撳嵃锛�", "upstream": ["IQC鏉ユ枡妫�楠�", "IPQC杩囩▼妫�楠�", "OQC鍑鸿揣妫�楠�", "RQC閫�璐ф楠�", "妫�楠屾寚鏍�"], "downstream": [], "keywords": "鎵撳嵃 鎶ュ憡 娴嬮噺鎵规 绛惧瓧 姝d竵閱� GB/T6027 Word 浜у搧妫�楠屽崟"},
{"name": "NCR涓嶅悎鏍煎搧", "module": "璐ㄩ噺", "table": "mes_qc_ncr", "doc": "寰呰瘎瀹�0鈫掑凡璇勫6鈫掑凡澶勭疆7鈫掑凡鍏抽棴8锛屽缃�:閫�璐�/鎶ュ簾/杩斿伐/璁╂鎺ユ敹/闄嶇骇", "upstream": ["IQC/IPQC/OQC/RQC"], "downstream": ["閫�璐�/鎶ュ簾/杩斿伐(鍙拌处)"], "keywords": "NCR 涓嶅悎鏍� 澶勭疆 鐗归噰 鎶ュ簾"},
{"name": "璁惧", "module": "璁惧", "table": "mes_dv_machinery", "doc": "鍙拌处鐘舵��:鍋滄満/鐢熶骇涓�/淇濆吇涓紱鐐规路淇濆吇路缁翠慨宸ュ崟锛汚I 椋庨櫓棰勬祴娑堣垂鍏舵暟鎹�", "upstream": [], "downstream": ["鐐规", "缁翠慨", "鐢熶骇椋庨櫓棰勬祴"], "keywords": "璁惧 鐐规 淇濆吇 缁翠慨 machinery"},
{"name": "鍞悗宸ュ崟", "module": "鍞悗", "table": "after_sale_ticket", "doc": "鑽夌0鈫掑鐞嗕腑10鈫掑緟鍏ュ簱30鈫掑緟閫�娆�40鈫掑畬缁�50鈫掑叧闂�60/鍙栨秷99锛屽垽瀹�:涓�鑸�/缁翠慨/閫�璐�", "upstream": ["瀹㈡埛鍙嶉(浜哄伐褰曞叆)"], "downstream": ["缁翠慨璁板綍", "閫�璐х敵璇�"], "keywords": "鍞悗 宸ュ崟 ticket 缁翠慨"},
@@ -516,13 +516,13 @@
{"stage": "鑱斿姩", "action": "瀹℃壒閫氳繃鎸夊伐搴忔爣璁�: 鍊掑啿鈫掕嚜鍔ㄧ墿鏂欐秷鑰楁墸绾胯竟搴�(鍏佽璐熷簱瀛�)锛涜川妫�鈫掍骇鍑哄緟妫�琛岀瓑 IPQC锛涘叧閿潪妫�鈫掔洿鎺ヤ骇鍑哄叆搴�", "roles": ["绯荤粺鑷姩"]},
{"stage": "瀹屽伐", "action": "浠呮湯閬撳伐搴忓洖鍐欏伐鍗曞凡鐢熶骇鏁伴噺锛岃揪鏍囪嚜鍔ㄥ畬鎴愶紱MPS 绱鍒ゆ柇瀹屾垚骞跺彂浜嬩欢缁欓攢鍞鍗�", "roles": ["绯荤粺鑷姩"]}]},
{"id": "quality", "name": "璐ㄩ噺娴佺▼", "mermaid": "mermaid/05-quality-flow.mmd", "color": "#e06c6c",
- "summary": "鍥涢亾妫�楠岄椄鍙�(IQC/IPQC/OQC/RQC锛屼簩鎬� 0鈫�4) + 鍒ゅ畾鍥涙灉(鍚堟牸/鐗归噰/閫�璐�/鎶ュ簾) + NCR 璇勫澶勭疆鍏抽棴锛汚I 鎻愪緵鍒ゅ畾寤鸿锛汵CR 褰撳墠浠呭彴璐︿笉瑙﹀彂杩斿伐鍗曘�傛敮鎸佸寲宸ユ姤鍛婅寖寮忥細鍒嗙粍鎸囨爣鏍�+鍏紡鏂囨湰+骞宠娴嬮噺鎵规+閲囨牱琛ㄥご+绛惧瓧鍖猴紝娴忚鍣ㄦ墦鍗版楠屾姤鍛娿��",
+ "summary": "鍥涢亾妫�楠岄椄鍙�(IQC/IPQC/OQC/RQC锛屼簩鎬� 0鈫�4) + 鍒ゅ畾鍥涙灉(鍚堟牸/鐗归噰/閫�璐�/鎶ュ簾) + NCR 璇勫澶勭疆鍏抽棴锛汚I 鎻愪緵鍒ゅ畾寤鸿锛汵CR 褰撳墠浠呭彴璐︿笉瑙﹀彂杩斿伐鍗曘�傛敮鎸佸寲宸ユ姤鍛婅寖寮忥細鍒嗙粍鎸囨爣鏍�+鍏紡鏂囨湰+骞宠娴嬮噺鎵规+閲囨牱琛ㄥご+绛惧瓧鍖猴紝娴忚鍣ㄦ墦鍗版楠屾姤鍛婏紱骞跺彲瀵煎嚭浜у搧妫�楠屽崟 Word锛堢焊璐ㄧ増寮忥紝鍒ゅ畾缁撹/璐ㄦ绔�/妫�楠屄峰鏍嘎锋壒鍑嗙瀛楃暀绌烘墜濉紝Word 鎵撳嵃锛夈��",
"steps": [
{"stage": "鏉ユ枡", "action": "鍒拌揣閫氱煡/澶栧崗鍏ュ簱鈫扞QC锛岀粨璁哄洖鍐欐帹杩涘緟鍏ュ簱鎴栬Е鍙戦��璐�", "roles": ["IQC 璐ㄦ鍛�"]},
{"stage": "杩囩▼", "action": "鎶ュ伐璐ㄦ宸ュ簭浜у嚭琛屸啋IPQC锛屽悎鏍兼媶琛屽叆搴撱�佷笉鍚堟牸鐢熸垚 NCR", "roles": ["IPQC 璐ㄦ鍛�"]},
{"stage": "鍑鸿揣", "action": "閿�鍞嚭搴撴彁浜も啋OQC锛屽畬鎴愬悗鍑哄簱鍗曡繘鍏ュ緟鎷h揣", "roles": ["OQC 璐ㄦ鍛�"]},
{"stage": "閫�璐�", "action": "閫�鏂�/閿�鍞��璐�/鍞悗閫�璐р啋RQC锛岀粨璁哄洖璋冨崟鎹笌鍞悗", "roles": ["RQC 璐ㄦ鍛�"]},
- {"stage": "鎶ュ憡", "action": "妫�楠岀粨鏋滄寜鍒嗙粍鏍�+娴嬮噺鎵规褰曞叆锛�/indicator-result/report 鑱氬悎鍚庡墠绔墦鍗版楠屾姤鍛�(鍚噰鏍峰湴鐐�/璇佷功缂栧彿/鎵ц鏍囧噯/澶嶆牳路瀹℃牳绛惧瓧鍖�)", "roles": ["璐ㄦ鍛�", "澶嶆牳浜�", "瀹℃牳浜�"]},
+ {"stage": "鎶ュ憡", "action": "妫�楠岀粨鏋滄寜鍒嗙粍鏍�+娴嬮噺鎵规褰曞叆锛�/indicator-result/report 鑱氬悎鍚庡墠绔墦鍗版楠屾姤鍛�(鍚噰鏍峰湴鐐�/璇佷功缂栧彿/鎵ц鏍囧噯/澶嶆牳路瀹℃牳绛惧瓧鍖�)锛�/indicator-result/export-product-word 瀵煎嚭浜у搧妫�楠屽崟Word(鏃犳妧鏈寚鏍囧垪路鍒ゅ畾缁撹/璐ㄦ绔�/妫�楠屄峰鏍嘎锋壒鍑嗙瀛楃暀绌烘墜濉稺ord鎵撳嵃锛涜鎯呮娴嬬粨鏋淭ab鍙寜鏍峰搧鏌ョ湅鍙鏄庣粏)", "roles": ["璐ㄦ鍛�", "澶嶆牳浜�", "瀹℃牳浜�"]},
{"stage": "涓嶅悎鏍�", "action": "NCR: 寰呰瘎瀹♀啋璇勫鈫掑缃�(閫�璐�/鎶ュ簾/杩斿伐/璁╂鎺ユ敹/闄嶇骇)鈫掑叧闂�", "roles": ["璐ㄩ噺宸ョ▼甯�"]}]},
{"id": "warehouse", "name": "浠撳偍娴佺▼", "mermaid": "mermaid/06-warehouse-flow.mmd", "color": "#7e6bd6",
"summary": "15 绫诲崟鎹┍鍔ㄥ簱瀛樺彴璐�(鍏厓缁勩�佸洓閲�)鍙樺姩锛屽叏閮ㄧ粡浜嬪姟娴佹按鐣欑棔锛涙敮鎸佽皟鎷ㄥ湪閫斻�佺洏鐐硅皟鏁淬�佹壒娆�/SN 杩芥函銆佸簱瀛樺崰鐢ㄤ笌鍥涚骇鍐荤粨銆佺嚎杈硅櫄鎷熷簱璐熷簱瀛橈紱瀵瑰 WmsStockApi 渚� ERP 鏀跺彂銆�",
diff --git a/docs/project-business/mermaid/05-quality-flow.mmd b/docs/project-business/mermaid/05-quality-flow.mmd
index 8fa15da..af16dd4 100644
--- a/docs/project-business/mermaid/05-quality-flow.mmd
+++ b/docs/project-business/mermaid/05-quality-flow.mmd
@@ -20,3 +20,4 @@
Q8[鏀拺鏁版嵁:璐ㄦ鏂规路妫�楠屾寚鏍嚶风己闄峰簱路鎸囨爣缁撴灉] --- A1
Q9[鍖栧伐鎶ュ憡澧炲己:鎸囨爣鍒嗙粍鏍�+鍏紡鏂囨湰路骞宠娴嬮噺鎵规路閲囨牱鍦扮偣/璇佷功缂栧彿/鎵ц鏍囧噯琛ㄥご路澶嶆牳浜�/瀹℃牳浜篯 --- Q8
A1 & A2 & A3 & A4 --> P1[妫�楠屾姤鍛婂崟鎵撳嵃路鍓嶇娴忚鍣ㄦ墦鍗奥峰惈绛惧瓧鍖篯
+ A1 & A2 & A3 & A4 --> P2[浜у搧妫�楠屽崟Word瀵煎嚭路export-product-word路鏃犳妧鏈寚鏍囧垪路鍒ゅ畾缁撹/璐ㄦ绔犵暀绌烘墜濉稺ord鎵撳嵃]
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/MesQcIndicatorResultController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/MesQcIndicatorResultController.java
index 6e5a382..6a8021e 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/MesQcIndicatorResultController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/MesQcIndicatorResultController.java
@@ -1,8 +1,10 @@
package cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO;
@@ -16,6 +18,7 @@
import cn.iocoder.yudao.module.mes.enums.qc.MesQcIndicatorItemTypeEnum;
import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService;
import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService;
+import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcProductReportWordBuilder;
import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcReportService;
import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcLineService;
import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcLineService;
@@ -26,11 +29,13 @@
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@@ -137,6 +142,29 @@
return success(reportService.getQcReportData(qcId, qcType, resultId));
}
+ @GetMapping("/export-product-word")
+ @Operation(summary = "瀵煎嚭浜у搧妫�楠屽崟 Word锛堢焊璐ㄦ楠屽崟鐗堝紡锛氭棤鎶�鏈寚鏍囧垪锛屽垽瀹氱粨璁�/璐ㄦ涓撶敤绔犵暀绌烘墜濉紝鎵撳嵃鐢� Word 鎵撳紑锛�")
+ @Parameters({
+ @Parameter(name = "qcId", description = "璐ㄦ鍗旾D", required = true, example = "1"),
+ @Parameter(name = "qcType", description = "璐ㄦ绫诲瀷", required = true, example = "1"),
+ @Parameter(name = "resultId", description = "妫�楠岀粨鏋滐紙鏍峰搧锛夌紪鍙凤紝鍙笉浼狅紱澶氭牱鍝佹椂鐢ㄤ簬閫夋嫨", example = "1")
+ })
+ @PreAuthorize("@ss.hasAnyPermissions('mes:qc-iqc:query', 'mes:qc-ipqc:query', 'mes:qc-oqc:query', 'mes:qc-rqc:query')")
+ public void exportProductWord(
+ @RequestParam("qcId") Long qcId,
+ @RequestParam("qcType") Integer qcType,
+ @RequestParam(value = "resultId", required = false) Long resultId,
+ HttpServletResponse response) throws IOException {
+ MesQcQcReportRespVO report = reportService.getQcReportData(qcId, qcType, resultId);
+ byte[] docx = MesQcProductReportWordBuilder.build(report);
+ String productName = StrUtil.isNotBlank(report.getItemName()) ? report.getItemName() : "浜у搧";
+ String filename = productName + "浜у搧璐ㄩ噺妫�楠屽崟"
+ + (StrUtil.isNotBlank(report.getDocCode()) ? "-" + report.getDocCode() : "") + ".docx";
+ response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
+ response.addHeader("Content-Disposition", "attachment;filename=" + HttpUtils.encodeUtf8(filename));
+ response.getOutputStream().write(docx);
+ }
+
// ==================== 鎷兼帴 VO ====================
/**
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/vo/MesQcQcReportRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/vo/MesQcQcReportRespVO.java
index cb51007..9ca3a6f 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/vo/MesQcQcReportRespVO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/vo/MesQcQcReportRespVO.java
@@ -52,6 +52,12 @@
@Schema(description = "妫�娴嬬粨鏋滐紙瀛楀吀 mes_qc_check_result锛�", example = "1")
private Integer checkResult;
+ @Schema(description = "妫�楠屾棩鏈�", example = "2026-08-30T01:00:00")
+ private LocalDateTime inspectDate;
+
+ @Schema(description = "璐ㄦ鍗曞垱寤烘椂闂达紝浜у搧妫�楠屽崟鎵撳嵃涓虹敓浜ф椂闂�", example = "2026-08-29T10:00:00")
+ private LocalDateTime docCreateTime;
+
// ========== 绛惧瓧鍖� ==========
@Schema(description = "鍒嗘瀽鑰咃紙妫�娴嬩汉锛夌敤鎴风紪鍙�", example = "1")
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilder.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilder.java
new file mode 100644
index 0000000..bee442a
--- /dev/null
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilder.java
@@ -0,0 +1,326 @@
+package cn.iocoder.yudao.module.mes.service.qc.indicatorresult;
+
+import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.MesQcQcReportRespVO;
+import cn.iocoder.yudao.module.mes.enums.qc.MesQcIndicatorItemTypeEnum;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 浜у搧妫�楠屽崟锛堢焊璐�"脳脳浜у搧璐ㄩ噺妫�楠屽崟"鐗堝紡锛塛ord 鏋勫缓鍣�
+ *
+ * 鐗堝紡锛氭爣棰橈紙鍏徃 + 浜у搧妫�楠屽崟锛夆啋 琛ㄥご淇℃伅 5 琛� 鈫� 妫�楠岄」鐩�/妫�楠岀粨鏋� 涓ゅ垪鐭╅樀 鈫�
+ * 鍒ゅ畾缁撹/璐ㄦ涓撶敤绔狅紙鐣欑┖锛屾墦鍗板悗鎵嬪~锛夆啋 澶囨敞 鈫� 妫�楠�/澶嶆牳/鎵瑰噯绛惧瓧琛屻��
+ * 涓嶅惈鎶�鏈寚鏍囧垪锛涘垎缁勯」涓嶅睍绀猴紝褰曞叆椤瑰钩閾猴紱骞宠娴嬮噺澶氬�奸】鍙峰悎骞躲��
+ */
+public class MesQcProductReportWordBuilder {
+
+ /** 鐢熶骇鍗曚綅鍥哄畾鏂囨锛堜笌绾歌川鎶ュ憡涓�鑷达紝鍐欐锛� */
+ private static final String COMPANY_NAME = "瀹佸涔濇硴鍖栧伐绉戞妧鏈夐檺鍏徃";
+
+ /** 澶囨敞榛樿鏂囨锛堟棤鍗曟嵁澶囨敞鏃朵娇鐢紝涓庣焊璐ㄦ姤鍛婁竴鑷达級 */
+ private static final String DEFAULT_REMARK = "妫�楠岀粨鏋滀粎瀵规牱鍝佹湰韬垨鏈壒娆¤礋璐c��";
+
+ /** 绌哄�煎崰浣嶇锛屼笌绾歌川鎶ュ憡 "/" 鍐欐硶涓�鑷� */
+ private static final String EMPTY = "/";
+
+ /** 鍥涘垪琛ㄥ锛坱wips锛夛紝鎬诲 9000 鈮� 15.9cm锛岄�傞厤 A4 绔栫増 2.5cm 椤佃竟璺� */
+ private static final int[] COL_WIDTHS = {1700, 2800, 1700, 2800};
+ private static final int TABLE_WIDTH = 9000;
+
+ private static final String FONT = "瀹嬩綋";
+ private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+ private MesQcProductReportWordBuilder() {
+ }
+
+ /**
+ * 鏋勫缓浜у搧妫�楠屽崟 docx 瀛楄妭
+ */
+ public static byte[] build(MesQcQcReportRespVO report) throws IOException {
+ try (XWPFDocument doc = new XWPFDocument(); ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ setupPage(doc);
+ writeTitle(doc, report);
+ writeHeaderTable(doc, report);
+ writeItemTable(doc, report);
+ writeConclusionTable(doc);
+ writeRemarkTable(doc, report);
+ writeSignLine(doc);
+ doc.write(out);
+ return out.toByteArray();
+ }
+ }
+
+ // ========== 椤甸潰/鏍囬 ==========
+
+ private static void setupPage(XWPFDocument doc) {
+ CTBody body = doc.getDocument().getBody();
+ CTSectPr sectPr = body.isSetSectPr() ? body.getSectPr() : body.addNewSectPr();
+ // A4 绔栫増
+ CTPageSz pageSz = sectPr.addNewPgSz();
+ pageSz.setW(BigInteger.valueOf(11906));
+ pageSz.setH(BigInteger.valueOf(16838));
+ CTPageMar pageMar = sectPr.addNewPgMar();
+ BigInteger margin = BigInteger.valueOf(1418); // 2.5cm
+ pageMar.setLeft(margin);
+ pageMar.setRight(margin);
+ pageMar.setTop(margin);
+ pageMar.setBottom(margin);
+ }
+
+ private static void writeTitle(XWPFDocument doc, MesQcQcReportRespVO report) {
+ String product = notBlank(report.getItemName()) ? report.getItemName()
+ : (notBlank(report.getDocName()) ? report.getDocName() : "浜у搧");
+ addParagraph(doc, COMPANY_NAME, 16, true, ParagraphAlignment.CENTER);
+ addParagraph(doc, product + "浜у搧璐ㄩ噺妫�楠屽崟", 14, true, ParagraphAlignment.CENTER);
+ }
+
+ // ========== 琛ㄥご淇℃伅 ==========
+
+ private static XWPFTable writeHeaderTable(XWPFDocument doc, MesQcQcReportRespVO report) {
+ XWPFTable table = createTable(doc);
+ addRow(table, label("鐢熶骇鍗曚綅"), value(COMPANY_NAME, 3));
+ addRow(table, label("鐢熶骇鏃堕棿"), value(formatDate(report.getDocCreateTime())),
+ label("鎵� 鍙�"), value(blank(report.getBatchNo())));
+ addRow(table, label("閲囨牱鍦扮偣"), value(blank(report.getSamplingLocation())),
+ label("鎵� 閲�"), value(formatQuantity(report.getBatchQuantity())));
+ addRow(table, label("閲� 鏍� 鑰�"), value(blank(report.getInspectorName())),
+ label("鍙栨牱鏃ユ湡"), value(formatDate(report.getSamplingTime())));
+ addRow(table, label("鎵ц鏍囧噯"), value(blank(report.getExecuteStandard())),
+ label("妫�楠屾棩鏈�"), value(formatDate(report.getInspectDate())));
+ return table;
+ }
+
+ // ========== 妫�楠岄」鐩煩闃� ==========
+
+ private static XWPFTable writeItemTable(XWPFDocument doc, MesQcQcReportRespVO report) {
+ XWPFTable table = createTable(doc);
+ addRow(table, labelSpan("妫�楠岄」鐩�", 2), labelSpan("妫�楠岀粨鏋�", 2));
+ List<MesQcQcReportRespVO.ReportItem> records = new ArrayList<>();
+ collectRecordItems(report.getItems(), records);
+ if (records.isEmpty()) {
+ addRow(table, valueSpan(EMPTY, 2), valueSpan(EMPTY, 2));
+ return table;
+ }
+ for (MesQcQcReportRespVO.ReportItem item : records) {
+ addRow(table, valueSpan(blank(item.getIndicatorName()), 2), valueSpan(joinMeasures(item), 2));
+ }
+ return table;
+ }
+
+ /**
+ * 骞抽摵褰曞叆椤癸細鍒嗙粍椤癸紙itemType=2锛変笉灞曠ず琛屾湰韬紝浠呭睍寮�鍏跺瓙褰曞叆椤�
+ */
+ private static void collectRecordItems(List<MesQcQcReportRespVO.ReportItem> nodes,
+ List<MesQcQcReportRespVO.ReportItem> out) {
+ if (nodes == null) {
+ return;
+ }
+ for (MesQcQcReportRespVO.ReportItem node : nodes) {
+ boolean group = node.getItemType() != null
+ && node.getItemType().equals(MesQcIndicatorItemTypeEnum.GROUP.getType());
+ if (group) {
+ collectRecordItems(node.getChildren(), out);
+ } else {
+ out.add(node);
+ }
+ }
+ }
+
+ /**
+ * 骞宠娴嬮噺澶氬�奸】鍙峰悎骞讹紱鏃犲�兼椂 "/"
+ */
+ private static String joinMeasures(MesQcQcReportRespVO.ReportItem item) {
+ List<MesQcQcReportRespVO.ReportMeasure> measures = item.getMeasures();
+ if (measures == null || measures.isEmpty()) {
+ return EMPTY;
+ }
+ return measures.stream()
+ .map(MesQcQcReportRespVO.ReportMeasure::getValue)
+ .filter(MesQcProductReportWordBuilder::notBlank)
+ .reduce((a, b) -> a + "銆�" + b)
+ .orElse(EMPTY);
+ }
+
+ // ========== 鍒ゅ畾缁撹 / 璐ㄦ涓撶敤绔狅紙鐣欑┖鍚庡~锛� ==========
+
+ private static XWPFTable writeConclusionTable(XWPFDocument doc) {
+ XWPFTable table = createTable(doc);
+ XWPFTableRow row = addRow(table, valueLeftSpan("鍒ゅ畾缁撹锛�", 2), valueLeftSpan("璐ㄦ涓撶敤绔狅細", 2));
+ // 棰勭暀鎵嬪啓/鐩栫珷楂樺害
+ setRowHeight(row, 2550);
+ return table;
+ }
+
+ // ========== 澶囨敞 ==========
+
+ private static XWPFTable writeRemarkTable(XWPFDocument doc, MesQcQcReportRespVO report) {
+ XWPFTable table = createTable(doc);
+ return addRowTo(table, label("澶� 娉�"),
+ valueLeftSpan(notBlank(report.getRemark()) ? report.getRemark() : DEFAULT_REMARK, 3));
+ }
+
+ // ========== 绛惧瓧琛� ==========
+
+ /** 绛惧瓧琛屽浐瀹氱暀绌猴紝涓庡垽瀹氱粨璁�/璐ㄦ涓撶敤绔犱竴鑷达紝鎵撳嵃鍚庢墜鍐� */
+ private static void writeSignLine(XWPFDocument doc) {
+ XWPFParagraph paragraph = doc.createParagraph();
+ paragraph.setAlignment(ParagraphAlignment.LEFT);
+ paragraph.setSpacingBefore(400);
+ addRun(paragraph, "妫�楠岋細銆�銆�銆�銆�銆�銆�銆�銆�銆�澶嶆牳锛氥��銆�銆�銆�銆�銆�銆�銆�銆�鎵瑰噯锛氥��銆�銆�銆�銆�銆�銆�銆�", 12, true);
+ }
+
+ // ========== 琛ㄦ牸鍩虹 ==========
+
+ private static XWPFTable createTable(XWPFDocument doc) {
+ // POI 榛樿琛ㄨ嚜甯� 1 涓┖琛� + tblPr锛堝惈鍏ㄨ竟妗嗭級锛屽垹鎺夐粯璁よ澶嶇敤鍏� tblPr 鍗冲彲
+ XWPFTable table = doc.createTable();
+ while (table.getNumberOfRows() > 0) {
+ table.removeRow(0);
+ }
+ CTTbl ctTbl = table.getCTTbl();
+ CTTblPr tblPr = ctTbl.getTblPr();
+ CTTblWidth tblW = tblPr.getTblW();
+ tblW.setType(STTblWidth.DXA);
+ tblW.setW(BigInteger.valueOf(TABLE_WIDTH));
+ if (!tblPr.isSetTblLayout()) {
+ tblPr.addNewTblLayout().setType(STTblLayoutType.FIXED);
+ }
+ // POI 鏂板缓鐨勮〃涓嶅惈 tblGrid锛岀洿鎺ヨˉ涓�
+ CTTblGrid grid = ctTbl.addNewTblGrid();
+ for (int width : COL_WIDTHS) {
+ grid.addNewGridCol().setW(BigInteger.valueOf(width));
+ }
+ return table;
+ }
+
+ /**
+ * 杩藉姞涓�琛岋紱姣忎釜鐗囨鎸夌粰瀹� span 鐢熸垚鍚堝苟鍗曞厓鏍硷紝span 鍚堣椤讳负 4
+ */
+ private static XWPFTableRow addRow(XWPFTable table, CellSpec... specs) {
+ XWPFTableRow row = table.createRow();
+ // createRow() 浼氭寜棣栬鍒楁暟鑷姩琛ユ牸锛屾竻鎺夊悗鎸夌墖娈甸噸寤�
+ while (row.getCtRow().sizeOfTcArray() > 0) {
+ row.getCtRow().removeTc(0);
+ }
+ int colIndex = 0;
+ for (CellSpec spec : specs) {
+ XWPFTableCell cell = row.createCell();
+ applyCell(cell, spec, colIndex);
+ colIndex += spec.span();
+ }
+ return row;
+ }
+
+ private static XWPFTable addRowTo(XWPFTable table, CellSpec... specs) {
+ addRow(table, specs);
+ return table;
+ }
+
+ private static void applyCell(XWPFTableCell cell, CellSpec spec, int colIndex) {
+ CTTc tc = cell.getCTTc();
+ CTTcPr tcPr = tc.isSetTcPr() ? tc.getTcPr() : tc.addNewTcPr();
+ int width = 0;
+ for (int i = 0; i < spec.span(); i++) {
+ width += COL_WIDTHS[colIndex + i];
+ }
+ CTTblWidth tcW = tcPr.isSetTcW() ? tcPr.getTcW() : tcPr.addNewTcW();
+ tcW.setType(STTblWidth.DXA);
+ tcW.setW(BigInteger.valueOf(width));
+ if (spec.span() > 1) {
+ if (!tcPr.isSetGridSpan()) {
+ tcPr.addNewGridSpan().setVal(BigInteger.valueOf(spec.span()));
+ } else {
+ tcPr.getGridSpan().setVal(BigInteger.valueOf(spec.span()));
+ }
+ }
+ cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+ XWPFParagraph paragraph = cell.getParagraphArray(0) != null
+ ? cell.getParagraphArray(0) : cell.addParagraph();
+ paragraph.setAlignment(spec.align());
+ addRun(paragraph, spec.text(), 12, spec.bold());
+ }
+
+ // ========== 鍗曞厓鏍肩墖娈垫弿杩� ==========
+
+ private record CellSpec(String text, int span, boolean bold, ParagraphAlignment align) {
+ }
+
+ private static CellSpec label(String text) {
+ return new CellSpec(text, 1, true, ParagraphAlignment.CENTER);
+ }
+
+ private static CellSpec labelSpan(String text, int span) {
+ return new CellSpec(text, span, true, ParagraphAlignment.CENTER);
+ }
+
+ private static CellSpec value(String text) {
+ return new CellSpec(text, 1, false, ParagraphAlignment.CENTER);
+ }
+
+ private static CellSpec value(String text, int span) {
+ return new CellSpec(text, span, false, ParagraphAlignment.CENTER);
+ }
+
+ private static CellSpec valueSpan(String text, int span) {
+ return new CellSpec(text, span, false, ParagraphAlignment.CENTER);
+ }
+
+ private static CellSpec valueLeftSpan(String text, int span) {
+ return new CellSpec(text, span, false, ParagraphAlignment.LEFT);
+ }
+
+ // ========== 灏忓伐鍏� ==========
+
+ private static void setRowHeight(XWPFTableRow row, int twips) {
+ CTRow ctRow = row.getCtRow();
+ CTTrPr trPr = ctRow.isSetTrPr() ? ctRow.getTrPr() : ctRow.addNewTrPr();
+ CTHeight height = trPr.addNewTrHeight();
+ height.setVal(BigInteger.valueOf(twips));
+ height.setHRule(STHeightRule.AT_LEAST);
+ }
+
+ private static void addParagraph(XWPFDocument doc, String text, int size, boolean bold,
+ ParagraphAlignment align) {
+ XWPFParagraph paragraph = doc.createParagraph();
+ paragraph.setAlignment(align);
+ addRun(paragraph, text, size, bold);
+ }
+
+ private static void addRun(XWPFParagraph paragraph, String text, int size, boolean bold) {
+ XWPFRun run = paragraph.createRun();
+ run.setText(text);
+ run.setFontSize(size);
+ run.setBold(bold);
+ run.setFontFamily(FONT);
+ run.setFontFamily(FONT, XWPFRun.FontCharRange.eastAsia);
+ }
+
+ private static boolean notBlank(String s) {
+ return s != null && !s.isBlank();
+ }
+
+ private static String blank(String s) {
+ return notBlank(s) ? s : EMPTY;
+ }
+
+ private static String formatDate(LocalDateTime time) {
+ return time == null ? EMPTY : time.format(DATE_FORMATTER);
+ }
+
+ private static String formatQuantity(BigDecimal quantity) {
+ if (quantity == null) {
+ return EMPTY;
+ }
+ return quantity.stripTrailingZeros().toPlainString();
+ }
+
+}
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcReportServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcReportServiceImpl.java
index 9bb028c..e6245ab 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcReportServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcReportServiceImpl.java
@@ -109,6 +109,7 @@
.setExecuteStandard(doc.getExecuteStandard())
.setInspectorUserId(doc.getInspectorUserId()).setAuditUserId(doc.getAuditUserId())
.setApproveUserId(doc.getApproveUserId()).setCheckResult(doc.getCheckResult())
+ .setInspectDate(doc.getInspectDate()).setDocCreateTime(doc.getCreateTime())
.setRemark(doc.getRemark());
List<MesQcIqcLineDO> lines = iqcLineService.getIqcLineListByIqcId(qcId);
for (MesQcIqcLineDO line : lines) {
@@ -126,6 +127,7 @@
.setExecuteStandard(doc.getExecuteStandard())
.setInspectorUserId(doc.getInspectorUserId()).setAuditUserId(doc.getAuditUserId())
.setApproveUserId(doc.getApproveUserId()).setCheckResult(doc.getCheckResult())
+ .setInspectDate(doc.getInspectDate()).setDocCreateTime(doc.getCreateTime())
.setRemark(doc.getRemark());
List<MesQcIpqcLineDO> lines = ipqcLineService.getIpqcLineListByIpqcId(qcId);
for (MesQcIpqcLineDO line : lines) {
@@ -143,6 +145,7 @@
.setExecuteStandard(doc.getExecuteStandard())
.setInspectorUserId(doc.getInspectorUserId()).setAuditUserId(doc.getAuditUserId())
.setApproveUserId(doc.getApproveUserId()).setCheckResult(doc.getCheckResult())
+ .setInspectDate(doc.getInspectDate()).setDocCreateTime(doc.getCreateTime())
.setRemark(doc.getRemark());
List<MesQcOqcLineDO> lines = oqcLineService.getOqcLineListByOqcId(qcId);
for (MesQcOqcLineDO line : lines) {
@@ -160,6 +163,7 @@
.setExecuteStandard(doc.getExecuteStandard())
.setInspectorUserId(doc.getInspectorUserId()).setAuditUserId(doc.getAuditUserId())
.setApproveUserId(doc.getApproveUserId()).setCheckResult(doc.getCheckResult())
+ .setInspectDate(doc.getInspectDate()).setDocCreateTime(doc.getCreateTime())
.setRemark(doc.getRemark());
List<MesQcRqcLineDO> lines = rqcLineService.getRqcLineListByRqcId(qcId);
for (MesQcRqcLineDO line : lines) {
diff --git a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilderTest.java b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilderTest.java
new file mode 100644
index 0000000..9de4db1
--- /dev/null
+++ b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilderTest.java
@@ -0,0 +1,124 @@
+package cn.iocoder.yudao.module.mes.service.qc.indicatorresult;
+
+import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.MesQcQcReportRespVO;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
+import org.junit.jupiter.api.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.time.LocalDateTime;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * {@link MesQcProductReportWordBuilder} 鐨勫崟鍏冩祴璇曪紙鐗堝紡鍐掔儫锛氱敓鎴愬彲璇诲洖 + 鍏抽敭鍐呭鏂█锛�
+ *
+ * 鐢熸垚鐨勬牱渚嬫枃浠朵細杈撳嚭鍒� target/MesQcProductReportWordBuilder-sample.docx锛屽彲鐢� Word 浜哄伐鏍稿鐗堝紡銆�
+ */
+public class MesQcProductReportWordBuilderTest {
+
+ @Test
+ public void testBuild() throws IOException {
+ byte[] docx = MesQcProductReportWordBuilder.build(randomReport());
+ assertTrue(docx.length > 0);
+
+ // 杈撳嚭鏍蜂緥鏂囦欢锛屼究浜庝汉宸ョ敤 Word 鎵撳紑鏍稿
+ Path sample = Path.of("target", "MesQcProductReportWordBuilder-sample.docx");
+ Files.createDirectories(sample.getParent());
+ try (OutputStreamHolder ignored = new OutputStreamHolder(sample, docx)) {
+ // no-op
+ }
+
+ try (InputStream in = new ByteArrayInputStream(docx); XWPFDocument doc = new XWPFDocument(in)) {
+ List<XWPFTable> tables = doc.getTables();
+ assertEquals(4, tables.size(), "琛ㄥご/妫�楠岄」鐩�/鍒ゅ畾缁撹/澶囨敞 鍏� 4 寮犺〃");
+
+ // 琛ㄥご棣栬锛氱敓浜у崟浣� + 鍏徃鍚�
+ assertTrue(tables.get(0).getRow(0).getCell(0).getText().contains("鐢熶骇鍗曚綅"));
+ assertTrue(tables.get(0).getRow(0).getCell(1).getText().contains("瀹佸涔濇硴鍖栧伐绉戞妧鏈夐檺鍏徃"));
+
+ // 妫�楠岄」鐩〃锛氳〃澶磋 + 澶栬 + 鍒嗙粍灞曞紑鐨勫綍鍏ラ」锛堥吀鍚噺鍒嗙粍琚殣钘忥級
+ XWPFTable itemTable = tables.get(1);
+ assertEquals(4, itemTable.getNumberOfRows());
+ assertEquals("澶栬", itemTable.getRow(1).getCell(0).getText().trim());
+ assertEquals("閫忔槑娑蹭綋锛屾棤鍙鏉傝川", itemTable.getRow(1).getCell(1).getText().trim());
+ // 骞宠娴嬮噺椤垮彿鍚堝苟
+ assertEquals("10.023銆�10.115", itemTable.getRow(2).getCell(1).getText().trim());
+ assertEquals("/", itemTable.getRow(3).getCell(1).getText().trim());
+
+ // 鍒ゅ畾缁撹/璐ㄦ涓撶敤绔犵暀绌�
+ assertTrue(itemTable.getRow(2).getCell(0).getText().contains("璇曟牱璐ㄩ噺 m /g"));
+ assertEquals("鍒ゅ畾缁撹锛�", tables.get(2).getRow(0).getCell(0).getText().trim());
+ assertEquals("璐ㄦ涓撶敤绔狅細", tables.get(2).getRow(0).getCell(1).getText().trim());
+
+ // 澶囨敞榛樿鏂囨
+ assertTrue(tables.get(3).getRow(0).getCell(1).getText().contains("妫�楠岀粨鏋滀粎瀵规牱鍝佹湰韬垨鏈壒娆¤礋璐�"));
+
+ // 绛惧瓧琛岀暀绌猴紙鎵撳嵃鍚庢墜鍐欙級锛屼笉寰楀嚭鐜板鍚�
+ String signLine = doc.getParagraphs().stream()
+ .filter(p -> p.getText().contains("鎵瑰噯锛�"))
+ .findFirst().orElseThrow().getText();
+ assertTrue(signLine.contains("妫�楠岋細") && signLine.contains("澶嶆牳锛�"));
+ assertTrue(!signLine.contains("鏉庡崥") && !signLine.contains("鍛ㄤ簹娲�") && !signLine.contains("鍖呯繝钀�"),
+ "绛惧瓧琛屽簲鐣欑┖锛屼笉杈撳嚭妫�楠�/澶嶆牳/鎵瑰噯濮撳悕");
+ }
+ }
+
+ private static MesQcQcReportRespVO randomReport() {
+ MesQcQcReportRespVO report = new MesQcQcReportRespVO();
+ report.setQcType(3).setDocCode("OQC20260106001").setItemName("宸ヤ笟鐢ㄦ涓侀唶")
+ .setBatchNo("20260100001").setSamplingLocation("鎴愬搧姝d竵閱囧偍缃愶紙V0008A锛�")
+ .setExecuteStandard("GB/T 6027-2023")
+ .setSamplingTime(LocalDateTime.of(2026, 1, 6, 9, 0))
+ .setInspectDate(LocalDateTime.of(2026, 1, 6, 15, 0))
+ .setDocCreateTime(LocalDateTime.of(2026, 1, 6, 8, 0))
+ .setInspectorName("鏉庡崥").setAuditName("鍛ㄤ簹娲�").setApproveName("鍖呯繝钀�");
+
+ MesQcQcReportRespVO.ReportItem appearance = new MesQcQcReportRespVO.ReportItem();
+ appearance.setIndicatorName("澶栬").setItemType(1).setSortOrder(10);
+ appearance.setMeasures(List.of(measure(1, "閫忔槑娑蹭綋锛屾棤鍙鏉傝川")));
+
+ MesQcQcReportRespVO.ReportItem acidGroup = new MesQcQcReportRespVO.ReportItem();
+ acidGroup.setIndicatorName("閰稿惈閲�").setItemType(2).setSortOrder(20);
+ acidGroup.setFormulaText("w3 = c 脳 V 脳 0.06005 / m 脳 100%");
+ MesQcQcReportRespVO.ReportItem mass = new MesQcQcReportRespVO.ReportItem();
+ mass.setIndicatorName("璇曟牱璐ㄩ噺 m /g").setItemType(1).setSortOrder(1);
+ mass.setMeasures(List.of(measure(1, "10.023"), measure(2, "10.115")));
+ acidGroup.setChildren(List.of(mass));
+
+ MesQcQcReportRespVO.ReportItem water = new MesQcQcReportRespVO.ReportItem();
+ water.setIndicatorName("姘村垎锛寃/%锛屸墹").setItemType(1).setSortOrder(30);
+ water.setMeasures(List.of());
+
+ report.setItems(List.of(appearance, acidGroup, water));
+ report.setBatchQuantity(null);
+ return report;
+ }
+
+ private static MesQcQcReportRespVO.ReportMeasure measure(int measureNo, String value) {
+ MesQcQcReportRespVO.ReportMeasure measure = new MesQcQcReportRespVO.ReportMeasure();
+ measure.setMeasureNo(measureNo);
+ measure.setValue(value);
+ return measure;
+ }
+
+ /** try-with-resources 杈呭姪锛氬啓鍑烘牱渚嬫枃浠� */
+ private static class OutputStreamHolder implements AutoCloseable {
+ OutputStreamHolder(Path path, byte[] content) throws IOException {
+ Files.write(path, content);
+ }
+
+ @Override
+ public void close() {
+ }
+ }
+
+}
diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml
index c169c66..1984163 100644
--- a/yudao-server/src/main/resources/application-local.yaml
+++ b/yudao-server/src/main/resources/application-local.yaml
@@ -1,5 +1,5 @@
server:
- port: 48080
+ port: 48081
--- #################### 鏁版嵁搴撶浉鍏抽厤缃� ####################
spring:
@@ -65,7 +65,7 @@
primary: master
datasource:
master:
- url: jdbc:mysql://localhost:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 杩炴帴鐨勭ず渚�
+ url: jdbc:mysql://localhost:3306/mom-jhhg?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 杩炴帴鐨勭ず渚�
username: root
password: 123456
--
Gitblit v1.9.3