From 2b1bfd1f5fa86378f2a86541d16d7e46963a0631 Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期二, 08 九月 2026 15:29:31 +0800
Subject: [PATCH] feat: 汇总大表日期格式/小数位复核+VBA列宽宏+DataView滚动加载+RULE_004双向与P005阈值联动

---
 traffic-audit-server/src/main/java/com/trafficaudit/rulemanage/controller/RuleManageController.java |   30 +++++
 docs/工具/VBA_生成物全表自动列宽_2026-09-08.txt                                                                |   39 +++++++
 docs/功能测试报告/功能测试报告_汇总大表日期格式与规则联动及数据查看滚动加载_2026-09-08.md                                             |   49 +++++++++
 docs/init.sql                                                                                       |    4 
 docs/工作日结/工作日结_2026-09-08.md                                                                        |   17 +++
 traffic-audit-web/src/views/DataView.vue                                                            |   66 +++++++++++++
 docs/生成汇总大表/2026年7月道路运输量汇总表.xlsx                                                                    |    0 
 traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java     |   22 +++-
 docs/生成汇总大表/2026年8月道路运输量汇总表.xlsx                                                                    |    0 
 docs/要求与验收基线清单.md                                                                                   |   63 ++++++++++++
 10 files changed, 277 insertions(+), 13 deletions(-)

diff --git a/docs/init.sql b/docs/init.sql
index f5b8a64..f75c5d7 100644
--- a/docs/init.sql
+++ b/docs/init.sql
@@ -290,7 +290,7 @@
 ('杞﹁締鏁拌繍鏀垮姣�', 'RULE_001', '浼佷笟涓婃姤杞﹁締鏁颁笌杩愭斂鏁版嵁瀵规瘮锛屽樊璺�>5鍙伴渶鏍稿疄', 'vehicleTotal', 'DIFF', '5', 'RED', 'H2032', 1, 1),
 ('鍚ㄤ綅杩愭斂瀵规瘮', 'RULE_002', '浼佷笟涓婃姤鍚ㄤ綅涓庤繍鏀挎暟鎹姣旓紝宸窛>50闇�鏍稿疄', 'tonsTotal', 'DIFF', '50', 'RED', 'H2032', 1, 2),
 ('鍛ㄨ浆閲忚建杩瑰姣�', 'RULE_003', '涓婃姤鍛ㄨ浆閲忎笌杞ㄨ抗娴嬬畻鍛ㄨ浆閲忓姣旓紝楂樺嚭30%闇�鏍稿疄', 'turnoverTotal,trackMileage', 'RATIO', '1.3', 'RED', 'H2032', 1, 3),
-('璐ц繍绫诲瀷鐜瘮', 'RULE_004', '鏈湀鏂板璐ц繍绫诲瀷闇�鏍稿疄锛堜笂鏈堜负0銆佹湰鏈堟湁閲忥級', 'freightContainer,freightCoal,freightOilGas,freightCrudeOil,freightMetalOre,freightIronOre,freightBuilding,freightGrain', 'MOM', '0', 'YELLOW', 'H2032', 1, 4),
+('璐ц繍绫诲瀷鐜瘮', 'RULE_004', '涓婃湀鏃狅紝鏈湀鏂板锛屾彁閱掞紱涓婃湀鏈夛紝鏈湀鏃狅紝鎻愰啋锛堣揣杩愮被鍨嬬幆姣旓級', 'freightContainer,freightCoal,freightOilGas,freightCrudeOil,freightMetalOre,freightIronOre,freightBuilding,freightGrain', 'MOM', '0', 'YELLOW', 'H2032', 1, 4),
 ('闆嗚绠卞紓甯�', 'RULE_005', '鏃犻泦瑁呯杞︿絾鏈夐泦瑁呯璐ц繍閲忛渶鏍稿疄', 'freightContainer,vehicleContainer', 'NULL_CHECK', '0', 'RED', 'H2032', 1, 5),
 ('鏁磋溅鍚ㄤ綅鑼冨洿', 'RULE_006', '鏁磋溅鍚ㄤ綅涓嶅湪4-40鍚ㄤ箣闂�', 'tonsWhole', 'OUT_RANGE', '4,40', 'YELLOW', 'H2032', 1, 6);
 
@@ -446,7 +446,7 @@
 ('杞藉浣嶆暟杩愭斂瀵规瘮(鏃呭)', 'RULE_P002', '鏍稿畾杞藉浣嶆暟涓庤繍鏀胯浇瀹綅鏁板姣旓紝宸窛>50闇�鏍稿疄', 'seatTotal', 'DIFF', '50', 'RED', 'H2031', 1, 22),
 ('瀹㈣繍閲忕幆姣�=0鏍稿疄', 'RULE_P003', '涓�绫�/浜岀被/涓夌被/鍥涚被/鍖呰溅瀹㈣繍閲忕幆姣斾笂涓湀绛変簬0闇�鏍稿疄', 'passengerClass1,passengerClass2,passengerClass3,passengerClass4,passengerCharter', 'MOM_EQ_ZERO', '0', 'YELLOW', 'H2031', 1, 23),
 ('鏃呭鍛ㄨ浆閲忕幆姣�=0鏍稿疄', 'RULE_P004', '涓�绫�/浜岀被/涓夌被/鍥涚被/鍖呰溅鏃呭鍛ㄨ浆閲忕幆姣斾笂涓湀绛変簬0闇�鏍稿疄', 'turnoverClass1,turnoverClass2,turnoverClass3,turnoverClass4,turnoverCharter', 'MOM_EQ_ZERO', '0', 'YELLOW', 'H2031', 1, 24),
-('骞冲潎杩愯窛鐜瘮瓒吢�10%鏍稿疄', 'RULE_P005', '涓�绫�/浜岀被/涓夌被/鍥涚被骞冲潎杩愯窛鐜瘮涓婁釜鏈堣秴杩嚶�10%闇�鏍稿疄', 'avgDistanceClass1,avgDistanceClass2,avgDistanceClass3,avgDistanceClass4', 'MOM_PCT', '10', 'YELLOW', 'H2031', 1, 25),
+('骞冲潎杩愯窛鐜瘮瓒吢�20%鏍稿疄', 'RULE_P005', '涓�绫�/浜岀被/涓夌被/鍥涚被骞冲潎杩愯窛鐜瘮涓婁釜鏈堣秴杩嚶�20%闇�鏍稿疄', 'avgDistanceClass1,avgDistanceClass2,avgDistanceClass3,avgDistanceClass4', 'MOM_PCT', '20', 'YELLOW', 'H2031', 1, 25),
 ('鍖呰溅骞冲潎杩愯窛绛変簬涓婃湀鏍稿疄', 'RULE_P006', '鏃呮父鍖呰溅骞冲潎杩愯窛绛変簬涓婁釜鏈堥渶鏍稿疄', 'avgDistanceCharter', 'MOM_EQ', '0', 'YELLOW', 'H2031', 1, 26),
 ('鏃犵彮绾挎湁鐝嚎瀹㈣繍閲忔牳瀹�', 'RULE_P007', '鏃犲杩愮彮杞︼紙鐝嚎杞﹁締鏁颁负0锛変絾鏈夌彮绾垮杩愰噺闇�鏍稿疄', 'vehicleSchedule,passengerClass1,passengerClass2,passengerClass3,passengerClass4', 'EXISTENCE', '0', 'RED', 'H2031', 1, 27),
 ('鏃犲寘杞︽湁鍖呰溅瀹㈣繍閲忔牳瀹�', 'RULE_P008', '鏃犲杩愬寘杞︼紙鍖呰溅杞﹁締鏁颁负0锛変絾鏈夊寘杞﹀杩愰噺闇�鏍稿疄', 'vehicleCharter,passengerCharter', 'EXISTENCE', '0', 'RED', 'H2031', 1, 28);
diff --git "a/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\346\261\207\346\200\273\345\244\247\350\241\250\346\227\245\346\234\237\346\240\274\345\274\217\344\270\216\350\247\204\345\210\231\350\201\224\345\212\250\345\217\212\346\225\260\346\215\256\346\237\245\347\234\213\346\273\232\345\212\250\345\212\240\350\275\275_2026-09-08.md" "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\346\261\207\346\200\273\345\244\247\350\241\250\346\227\245\346\234\237\346\240\274\345\274\217\344\270\216\350\247\204\345\210\231\350\201\224\345\212\250\345\217\212\346\225\260\346\215\256\346\237\245\347\234\213\346\273\232\345\212\250\345\212\240\350\275\275_2026-09-08.md"
new file mode 100644
index 0000000..b011afe
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\346\261\207\346\200\273\345\244\247\350\241\250\346\227\245\346\234\237\346\240\274\345\274\217\344\270\216\350\247\204\345\210\231\350\201\224\345\212\250\345\217\212\346\225\260\346\215\256\346\237\245\347\234\213\346\273\232\345\212\250\345\212\240\350\275\275_2026-09-08.md"
@@ -0,0 +1,49 @@
+# 鍔熻兘娴嬭瘯鎶ュ憡_姹囨�诲ぇ琛ㄦ棩鏈熸牸寮忎笌瑙勫垯鑱斿姩鍙婃暟鎹煡鐪嬫粴鍔ㄥ姞杞絖2026-09-08
+
+- 鍔熻兘鑼冨洿锛氭湰鎵� 7 椤硅姹傦紙鏃ユ湡缁熶竴鏄剧ず銆乂BA 鍒楀瀹忋�佹暟鎹煡鐪嬫粴鍔ㄥ姞杞姐�佸皬鏁颁綅/鎺掑悕澶嶆牳銆佽姹傚熀绾挎竻鍗曘�丷ULE_004 鍙屽悜鎻愰啋銆丷ULE_P005 闃堝�间笌鍚嶇О/璇存槑鑱斿姩锛�
+- 娴嬭瘯鐜锛氭湰鏈� traffic-audit锛堝悗绔� 8090銆佸墠绔� 8080 鐑紪璇戣繍琛屼腑锛夛紱MySQL 5.7 @ localhost:3308 traffic_audit锛汣hrome 鍐呭祵娴忚鍣ㄧ湡鏈猴紙Playwright/CUA锛夊疄娴� UI
+- 楠岃瘉鍩虹嚎锛歚docs/瑕佹眰涓庨獙鏀跺熀绾挎竻鍗�.md`锛涘喅绛栧熀绾裤�婄‘璁ゅ洖鎵ф眹鎬烩�2026-09-07銆�
+
+## 鐢ㄤ緥涓庣粨璁�
+
+| # | 鐢ㄤ緥锛堣緭鍏ワ級 | 棰勬湡 | 瀹為檯 | 缁撹 |
+|---|---|---|---|---|
+| 1 | 鐢熸垚姹囨�诲ぇ琛� 2026-07/08锛屾鏌ヨ揣杩愰〉 CQ 鍒楃瓑鏃ユ湡閿氱偣鏄剧ず | 鏈熸鏄剧ず `yyyy"骞�"m"鏈�"`锛屼笉寰楁樉绀烘垚鏁板瓧 | 涓ゆ枃浠跺叏绨挎壂鎻忥細鏃ユ湡鍨嬪崟鍏冩牸鍧忔牸寮�=0锛沗璐ц繍`椤� CQ3 绛� = datetime(2023-10-01) 涓旀牸寮� `yyyy"骞�"m"鏈�"`锛涙棤 General 鏁板瓧娈嬬暀 | 鉁� 閫氳繃 |
+| 2 | 鍏ㄧ翱鏍煎紡浣撴锛堝鍑虹殑 7/8 鏈堝ぇ琛級 | 鏁板�� 0.00 / 鐧惧垎姣� 0.00% / 鎺掑悕 0锛涙棤 3/4 浣嶅皬鏁般�佹棤搴曡壊 | bad3=0銆丟eneral 鏁板��=0銆乫ills=0锛堜袱浠芥枃浠讹級 | 鉁� 閫氳繃 |
+| 3 | 鎺掑悕涓庢暟鍊煎熬鏁版娊鏌ワ細璐ц繍閲忔帓鍚�/璐ц繍鍛ㄨ浆閲忔帓鍚�/涓彛寰勬帓鍚�/閬撹矾杩愯緭鍛ㄨ浆閲� | 鎺掑悕鏁村垪鏁存暟锛屾暟鍊煎垪鏄剧ず涓や綅灏忔暟涓斾繚鐣欏叏绮惧害 | 璐ц繍閲忔帓鍚� C/F/H/K/M/P 鍒楁牸寮� `0`锛�34 琛岋級锛涜揣杩愬懆杞噺鎺掑悕/閬撹矾杩愯緭鍛ㄨ浆閲忔帓鍚嶄负 `=RANK()(0)` 鍏紡鍒楋紱鏁板��/鍚屾瘮鍒� 0.00/0.00%锛涘懆杞噺鏃� 3/4 浣嶅皬鏁� | 鉁� 閫氳繃 |
+| 4 | VBA 瀹忎氦浠樼墿 | 鎻愪緵鍙鍏ユā鍧楋紝鍚叏琛�/褰撳墠琛ㄤ袱涓畯涓庣敤娉� | `docs/宸ュ叿/VBA_鐢熸垚鐗╁叏琛ㄨ嚜鍔ㄥ垪瀹絖2026-09-08.txt`锛圓utoFitAllSheets + AutoFitActiveSheet + 璇存槑锛� | 鉁� 閫氳繃 |
+| 5 | 鏁版嵁鏌ョ湅椤垫粴鍔ㄥ埌搴曡嚜鍔ㄥ姞杞� | 鏅��/鍏ㄥ睆婊氬姩鑷冲簳閮ㄨ拷鍔犱笅涓�椤碉紝琛屾暟閫掑銆佹�绘暟涓嶅彉銆佹棤 JS 鎶ラ敊 | Chrome 鐪熸満锛氳鏁� 20鈫�40鈫�60鈫�80鈫�100鈫�120鈫�140锛屽叡 13056 鏉′笉鍙橈紱鎺у埗鍙� error/warning=0 | 鉁� 閫氳繃 |
+| 6 | RULE_004 鍙屽悜锛堣揣杩愮被鍨嬬幆姣旓級瀹℃牳 2026-07 | 涓婃湀鏃犫啋鏈湀鏈夈�佷笂鏈堟湁鈫掓湰鏈堟棤鍧囨彁閱� | 鍛戒腑 7 瀹讹細鏂板 6銆佹秷澶� 3锛�1 瀹跺弻鍚戯級锛涙牱渚� `91420700090568838U 鏈湀娑堝け: 闆嗚绠憋紙涓婃湀=32210锛屾湰鏈堟棤锛塦 涓庡簱涓� 6/7 鏈堟暟鎹�愬瓧鍚诲悎锛沗91429006793269842X` 鏂板鐓ょ偔+娑堝け娌规皵鍙屽悜鍛戒腑涓斿惢鍚� | 鉁� 閫氳繃 |
+| 7 | RULE_P005 闃堝�艰仈鍔細20 鈫� 30 鈫� 20 | 鍚嶇О/璇存槑閲岀殑 卤N% 闅忛槇鍊艰嚜鍔ㄦ敼鍐欏苟鎸佷箙鍖� | 鍒楄〃 20 鏃跺悕绉�=骞冲潎杩愯窛鐜瘮瓒吢�20%鏍稿疄锛涙敼 30 鍚庡垪琛ㄤ笌 DB 鍧囦负 卤30%锛涙敼鍥� 20 鎭㈠ 卤20%锛汥B id=11 threshold=20 鎸佷箙鍖栫‘璁� | 鉁� 閫氳繃 |
+
+## 鍏抽敭鏁版嵁涓庢娊鏌ヨ瘉鎹�
+- 鏍煎紡浣撴锛堜袱浠藉鍑猴級姹囨�昏锛歚SUM: bad3=0 genNum=0 dtBadFmt=0`锛屽悇鎺掑悕椤垫牸寮� TOP 瑙佷笅琛細
+  - 璐ц繍閲忔帓鍚嶏細`0`脳204 / `0.00`脳108 / `0.00%`脳210
+  - 璐ц繍鍛ㄨ浆閲忔帓鍚嶏細`0.00`脳85 / `0.00%`脳108锛堟帓鍚嶅垪涓� RANK 鍏紡锛屾牸寮� 0锛�
+  - 閬撹矾杩愯緭鍛ㄨ浆閲忥細`0.00`脳216 / `0.00%`脳107锛屾棤 3/4 浣嶅皬鏁�
+- RULE_004 搴撴牳瀵� SQL锛�6/7 鏈堝悇 636 瀹讹紱瀹℃牳缁撴灉锛坄audit_result` join `audit_rule` id=4锛�2026-07 鍏� 7 鏉★細
+  - `鏈湀鏂板: 闆嗚绠�=9716`銆乣鏈湀鏂板: 閾佺熆鐭�=2114`銆乣鏈湀娑堝け: 闆嗚绠憋紙涓婃湀=32210锛屾湰鏈堟棤锛塦銆�
+  - `鏈湀鏂板: 閲戝睘鐭跨煶=223041`銆乣鏈湀鏂板: 鐭虫补澶╃劧姘斿強鍒跺搧=10757锛涙湰鏈堟秷澶�: 鐓ょ偔鍙婂埗鍝侊紙涓婃湀=10137锛屾湰鏈堟棤锛塦銆�
+  - `鏈湀鏂板: 鐓ょ偔鍙婂埗鍝�=20231锛涙湰鏈堟秷澶�: 鐭虫补澶╃劧姘斿強鍒跺搧锛堜笂鏈�=22310锛屾湰鏈堟棤锛塦 绛�
+- RULE_P005 API 搴忓垪锛歚GET /api/rules/list?reportType=H2031`锛坕d=11锛塼hreshold=20 鍚嶇О卤20% 鈫� `POST /api/rules/update {id:11,threshold:"30"}` 鍚庡悕绉�/鎻忚堪卤30% 鈫� 鏀瑰洖 20 鍚庢仮澶� 卤20%锛沗audit_rule` 琛ㄦ牳瀵逛竴鑷淬��
+- 鏁版嵁鏌ョ湅锛歚GET /api/data/list?type=h2032&page=1&size=20` total=13056銆侀〉闂� 0 閲嶅锛沀I 婊氬姩瀹炴祴瑙� #5銆�
+
+## 娑夊強鏀瑰姩
+- `docs/鐢熸垚姹囨�诲ぇ琛�/2026骞�7鏈堥亾璺繍杈撻噺姹囨�昏〃.xlsx`銆乣2026骞�8鏈堥亾璺繍杈撻噺姹囨�昏〃.xlsx`锛堢増寮忓綊涓�锛氭棩鏈熼敋鐐�/0.00/鎺掑悕 0/鍘诲簳鑹诧紝鏈澶嶉獙瀵煎嚭鎸夋姣嶇増锛�
+- `traffic-audit-server/.../auditengine/service/AuditEngineService.java`锛圧ULE_004 鏂板/娑堝け鍙屽悜锛�
+- `traffic-audit-server/.../rulemanage/controller/RuleManageController.java`锛堥槇鍊� 卤N% 鈫� 鍚嶇О/璇存槑鑱斿姩锛�
+- `traffic-audit-web/src/views/DataView.vue`锛堟粴鍔ㄦ崟鑾风洃鍚慨澶� + 鍔犺浇鏇村锛岃涓嬶級
+- `docs/init.sql`锛圧ULE_004 璇存槑銆丷ULE_P005 鍚嶇О/璇存槑绉嶅瓙鍚屾锛�
+- `docs/宸ュ叿/VBA_鐢熸垚鐗╁叏琛ㄨ嚜鍔ㄥ垪瀹絖2026-09-08.txt`锛堟柊澧烇級
+- `docs/瑕佹眰涓庨獙鏀跺熀绾挎竻鍗�.md`锛堟柊澧烇紝鍚湰鎵圭櫥璁帮級
+
+## 淇杩囩▼璁板綍锛圖ataView锛�
+- 鍒濈増浠呯洃鍚� window 涓� `.table-wrap`锛涘疄娴嬪彂鐜版櫘閫�/鍏ㄥ睆涓嬬湡姝f粴鍔ㄥ鍣ㄦ槸 el-table 鍐呴儴 `.el-table__body-wrapper`锛坥verflow-y:auto锛夛紝鍒濈増鍦ㄦ櫘閫氭ā寮忎笉浼氳Е鍙戙��
+- 淇锛歚onScroll` 鏀逛负鍙栦簨浠� target 鐨勫疄闄呮粴鍔ㄥ鍣ㄥ害閲忥紙scrollTop/clientHeight/scrollHeight锛夛紝scroll 鐩戝惉鍔� `capture:true`锛坰croll 涓嶅啋娉′絾鍙崟鑾凤級锛宮ounted/beforeDestroy 鎴愬娉ㄥ唽/绉婚櫎銆�
+- 淇鍚� Chrome 鐪熸満澶嶆祴锛堣 #5锛夐�氳繃锛屾帶鍒跺彴鏃犲紓甯搞��
+
+## 鍙戠幇鐨勯棶棰樹笌澶勭疆
+- 鏃犻樆濉為棶棰樸�傚緟鍔炴部鐢ㄥ熀绾匡細8 鏈堟暟鎹鍏ュ悗 M2/M3 濉�煎楠岋紱鏃ユ湡閿氱偣鍦� 8 鏈堟瘝鐗堜腑鏄剧ず涓哄簭鍒楀彿鏈熺殑鏄剧ず鍙e緞宸插湪鍩虹嚎 F3 鍏抽棴銆�
+
+## 缁撹
+鏈壒 7 椤硅姹傚叏閮ㄥ疄鐜板苟閫氳繃瀹炴祴锛屽彲浜や粯銆傜浉鍏充骇鐗╋細瀵煎嚭楠岃瘉鏂囦欢鍦� `docs/鐢熸垚姹囨�诲ぇ琛�/杈撳嚭/鐢熸垚_閬撹矾杩愯緭閲忔眹鎬昏〃_2026-07_鏍煎紡楠岃瘉.xlsx` 涓� `_2026-08_鏍煎紡楠岃瘉.xlsx`銆�
diff --git "a/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-08.md" "b/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-08.md"
index e7b68a6..77f966a 100644
--- "a/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-08.md"
+++ "b/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-08.md"
@@ -58,4 +58,19 @@
 - `mvn -q -DskipTests compile` exit=0銆�
 ### 閬楃暀涓庝笅涓�姝�
 - 8 鏈堝綋鏈堟暟鎹鍏ュ悗鎸� M2/M3 濉�煎楠岋紱鏃ユ湡閿氱偣鍒楋紙鍘熻〃 General 搴忓垪鍙锋湡娆¤锛夋樉绀烘柟寮忓緟涓氬姟纭銆�
-- 涓存椂鑴氭湰 `_unify_all.py` 鍙� `_test_tmp/` 鍓湰涓嶅垹涓嶅叆搴撱��
\ No newline at end of file
+- 涓存椂鑴氭湰 `_unify_all.py` 鍙� `_test_tmp/` 鍓湰涓嶅垹涓嶅叆搴撱��
+---
+
+## 琛ュ厖锛�2026-09-08 鏅氶棿锛屽悓涓�浼氳瘽缁級锛氭棩鏈熸牸寮�/灏忔暟澶嶆牳/VBA/婊氬姩鍔犺浇/瑙勫垯鍙屽悜涓庨槇鍊艰仈鍔�
+### 浠婃棩鏂板
+1. **鏃ユ湡閿氱偣缁熶竴**锛�7/8 鏈堟瘝鐗堜笌瀵煎嚭鍏ㄧ翱鏃ユ湡鍨嬪崟鍏冩牸缁熶竴 `yyyy"骞�"m"鏈�"`锛屼慨澶嶈揣杩愰〉 CQ 鍒楃瓑鏈熸鏄剧ず鎴愭暟瀛楃殑闂锛堝叏绨挎壂鎻忔棩鏈熷潖鏍煎紡=0锛夈��
+2. **灏忔暟浣�/鎺掑悕澶嶆牳锛堢害瀹氾細鏁板�间繚鐣欏叏绮惧害鏄剧ず 0.00锛屾帓鍚嶆暣鏁� 0锛�**锛氬鍑� 2026-07/08 澶嶉獙鈥斺�旀棤 3/4 浣嶅皬鏁般�佹棤 General 鏁板�笺�佹棤搴曡壊锛涜揣杩愰噺鎺掑悕鍒� `0`锛屽懆杞噺/閬撹矾杩愯緭鍛ㄨ浆閲忔帓鍚嶄负 RANK 鍏紡鍒楁牸寮� `0`銆�
+3. **VBA 鍒楀瀹忎氦浠�**锛歚docs/宸ュ叿/VBA_鐢熸垚鐗╁叏琛ㄨ嚜鍔ㄥ垪瀹絖2026-09-08.txt`锛圓utoFitAllSheets/AutoFitActiveSheet锛夈��
+4. **鏁版嵁鏌ョ湅婊氬姩鍔犺浇淇+鐪熸満楠岃瘉**锛氬畾浣嶇湡姝f粴鍔ㄥ鍣ㄤ负 el-table 鍐呴儴 body-wrapper锛宱nScroll 鍙栦簨浠� target 搴﹂噺 + capture 鐩戝惉锛汣hrome 鐪熸満婊氬姩 20鈫�40鈫掆�︹啋140 琛岄�掑銆佹�绘暟 13056 涓嶅彉銆佹帶鍒跺彴 0 鎶ラ敊銆�
+5. **RULE_004 鍙屽悜**锛氫笂鏈堟棤鈫掓湰鏈堟柊澧炪�佷笂鏈堟湁鈫掓湰鏈堟棤鍧囨彁閱掞紱2026-07 瀹炴祴鍛戒腑 7 瀹讹紙鏂板 6銆佹秷澶� 3銆�1 瀹跺弻鍚戯級锛屾秷澶辨牱渚嬩笌搴撴暟鎹�愬瓧鍚诲悎銆�
+6. **RULE_P005 闃堝�艰仈鍔�**锛氬悕绉�/璇存槑 卤N% 闅忛槇鍊煎瓧娈靛悓姝ュ苟鎸佷箙鍖栵紙瀹炴祴 20鈫�30鈫�20锛孌B 澶嶆牳涓�鑷达級锛屽叾瀹冨惈 卤N% 瑙勫垯鍚岀悊銆�
+### 娴嬭瘯缁撴灉鎽樿
+- 璇﹁銆婂姛鑳芥祴璇曟姤鍛奯姹囨�诲ぇ琛ㄦ棩鏈熸牸寮忎笌瑙勫垯鑱斿姩鍙婃暟鎹煡鐪嬫粴鍔ㄥ姞杞絖2026-09-08.md銆嬨��
+- `mvn` 缂栬瘧閫氳繃锛堝墠涓�浜ゆ帴宸插畬鎴愶級锛涘墠绔儹缂栬瘧 3 娆℃垚鍔燂紙15:19/15:24锛夈��
+### 閬楃暀涓庝笅涓�姝�
+- 8 鏈堝綋鏈堟暟鎹鍏ュ悗 M2/M3 濉�煎楠岋紱涓存椂鑴氭湰 `_verify_*.py/.sql`銆乣_do_patch1.py` 涓嶅垹涓嶅叆搴撱��
\ No newline at end of file
diff --git "a/docs/\345\267\245\345\205\267/VBA_\347\224\237\346\210\220\347\211\251\345\205\250\350\241\250\350\207\252\345\212\250\345\210\227\345\256\275_2026-09-08.txt" "b/docs/\345\267\245\345\205\267/VBA_\347\224\237\346\210\220\347\211\251\345\205\250\350\241\250\350\207\252\345\212\250\345\210\227\345\256\275_2026-09-08.txt"
new file mode 100644
index 0000000..88e1673
--- /dev/null
+++ "b/docs/\345\267\245\345\205\267/VBA_\347\224\237\346\210\220\347\211\251\345\205\250\350\241\250\350\207\252\345\212\250\345\210\227\345\256\275_2026-09-08.txt"
@@ -0,0 +1,39 @@
+VBA 瀹忥細鐢熸垚姹囨�诲ぇ琛紙鎴栦换鎰忓伐浣滅翱锛夊叏宸ヤ綔琛ㄥ垪瀹借嚜閫傚簲
+鏃ユ湡锛�2026-09-08
+璇存槑锛氭墦寮�瑕佸鐞嗙殑 xlsx 鈫� Alt+F11 鈫� 鑿滃崟鈥滄彃鍏モ啋妯″潡鈥� 鈫� 绮樿创浠ヤ笅浠g爜 鈫� 鍏抽棴缂栬緫鍣� 鈫� Alt+F8 杩愯 AutoFitAllSheets銆�
+      涔熷彲灏嗘湰鏂囦欢鍙﹀瓨涓� .bas锛屽湪 VBA 缂栬緫鍣ㄩ噷鈥滄枃浠垛啋瀵煎叆鏂囦欢鈥濄��
+
+--------------------------------------------------------------------------------
+Option Explicit
+
+' 涓诲畯锛氬鍏ㄩ儴宸ヤ綔琛ㄥ仛鏁村垪鍒楀鑷�傚簲锛堝叕寮忓厛鏁翠綋閲嶇畻锛屼互鏄剧ず鍊煎搴︿负鍑嗭級
+Public Sub AutoFitAllSheets()
+    Application.ScreenUpdating = False
+    Application.Calculation = xlCalculationAutomatic
+    Application.CalculateFullRebuild
+    Dim ws As Worksheet
+    For Each ws In ThisWorkbook.Worksheets
+        ws.Activate
+        On Error Resume Next
+        ' 鑷姩閫傚簲鏁村垪瀹藉害锛堥殣钘忚/鍒椾笉褰卞搷锛涘悎骞跺崟鍏冩牸鍐呯殑鏂囧瓧涓嶄細琚� Excel 鑷姩璁″叆锛�
+        ws.Cells.EntireColumn.AutoFit
+        On Error GoTo 0
+    Next ws
+    Application.ScreenUpdating = True
+    MsgBox "鍏ㄩ儴宸ヤ綔琛ㄥ垪瀹借嚜閫傚簲瀹屾垚銆�", vbInformation, "瀹屾垚"
+End Sub
+
+' 澶囩敤瀹忥細鍙鈥滃綋鍓嶉�変腑鐨勫伐浣滆〃鈥濇墽琛岃嚜閫傚簲
+Public Sub AutoFitActiveSheet()
+    Application.ScreenUpdating = False
+    Application.CalculateFullRebuild
+    ActiveSheet.Cells.EntireColumn.AutoFit
+    Application.ScreenUpdating = True
+    MsgBox "褰撳墠琛ㄥ垪瀹借嚜閫傚簲瀹屾垚銆�", vbInformation, "瀹屾垚"
+End Sub
+--------------------------------------------------------------------------------
+
+娉ㄦ剰锛�
+1) 杩愯鍓嶅厛鍏ㄩ�夌湅涓�閬嶆槸鍚︽湁鈥�###鈥濇孩鍑哄垪锛涜嫢涓埆鍒楀洜鍚堝苟鏍囬浠嶅亸绐勶紝鍙墜鍔ㄦ嫋涓�涓嬭鍒椼��
+2) 鏈畯鍙敼鍒楀锛屼笉鏀逛换浣曟暟鎹�佸叕寮忋�佸簳鑹蹭笌杈规銆�
+3) 寤鸿鐢熸垚鍚庣珛鍒昏繍琛屼竴娆★紝鍐嶅彟瀛樹负姝e紡浜や粯鏂囦欢銆�
\ No newline at end of file
diff --git "a/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2647\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx" "b/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2647\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
index f6dbc96..112d6ff 100644
--- "a/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2647\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
+++ "b/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2647\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
Binary files differ
diff --git "a/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2648\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx" "b/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2648\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
index 47e58a4..c7cccde 100644
--- "a/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2648\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
+++ "b/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2648\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
Binary files differ
diff --git "a/docs/\350\246\201\346\261\202\344\270\216\351\252\214\346\224\266\345\237\272\347\272\277\346\270\205\345\215\225.md" "b/docs/\350\246\201\346\261\202\344\270\216\351\252\214\346\224\266\345\237\272\347\272\277\346\270\205\345\215\225.md"
new file mode 100644
index 0000000..fe015c3
--- /dev/null
+++ "b/docs/\350\246\201\346\261\202\344\270\216\351\252\214\346\224\266\345\237\272\347\272\277\346\270\205\345\215\225.md"
@@ -0,0 +1,63 @@
+# 瑕佹眰涓庨獙鏀跺熀绾挎竻鍗曪紙骞叉椿鍓嶅繀璇伙級
+
+> 鐢ㄩ�旓細姹囨�荤敤鎴凤紙涓氬姟锛夐檰缁彁鍑虹殑**鏄庣‘瑕佹眰/鍙e緞**锛屾瘡娆℃敼浠g爜/姣嶇増/瑙勫垯鍓嶅厛瀵圭収鏈〃锛岄伩鍏嶁�滃仛涓�鍗娿�佹紡鍙e緞銆侀噸澶嶉棶鈥濄��
+> 鍩虹嚎鏂囨。锛氥�婄‘璁ゅ洖鎵ф眹鎬讳笌鍓╀綑鐤戦棶_姹囨�诲ぇ琛ㄦ暟鎹┍鍔ㄦ敼閫燺2026-09-07.md銆嬶紙鍞竴鍐崇瓥鍩虹嚎锛岀鍏妭涓� 09-08 鎷嶆澘锛夈��
+> 缁存姢锛氫細璇濇帹杩涙椂鍚屾澧炶ˉ锛涚姸鎬侊細鉁呭凡瀹炵幇 / 馃毀杩涜涓� / 猬滃緟鍔炪��
+
+## 涓�銆佹眹鎬诲ぇ琛ㄧ増寮忎笌鐢熸垚鍙e緞
+| 缂栧彿 | 瑕佹眰/鍙e緞 | 鐘舵�� | 澶囨敞 |
+|---|---|---|---|
+| F1 | 鏁板�硷紙鍚叕寮忕粨鏋滐級涓�寰�**鏄剧ず涓や綅灏忔暟**锛�0.00锛夛紝浣�**淇濈暀鍏ㄧ簿搴﹀皬鏁�**锛屼笉寰楀洓鑸嶄簲鍏ユ敼鍊� | 鉁� 2026-09-08 | 7/8鏈堟瘝鐗�+瀵煎嚭宸查獙锛氭棤 3/4 浣嶅皬鏁版畫鐣� |
+| F2 | **鎺掑悕涓�寰嬫樉绀烘暣鏁�**锛�0 鏍煎紡锛屽惈澧為�熸帓鍚嶏級 | 鉁� 2026-09-08 | 琛ㄥご鈥滄帓鍚�/澧為�熸帓鍚嶁�濓紙鍏佽甯︾┖鏍硷級鏁村垪鐢熸晥 |
+| F3 | 鏃ユ湡/鏈熸绫诲崟鍏冩牸缁熶竴鏄剧ず **yyyy"骞�"m"鏈�"**锛堝璐ц繍椤� CQ 鍒楃瓑鏃ユ湡閿氱偣涓嶅緱鏄剧ず鎴愭暟瀛楋級 | 鉁� 2026-09-08 | 姣嶇増+瀵煎嚭鍧囬獙 |
+| F4 | 鑳屾櫙鑹插叏閮ㄧ粺涓�锛�**鏃犲~鍏�/鍘诲簳鑹�**锛夛紝鐢熸垚浜х墿涓嶅緱浠庤繕鍘熸簮甯︽棫搴曡壊澶嶆椿 | 鉁� 2026-09-08 | 杩樺師婧愬浠藉悓鍋氬綊涓� |
+| F5 | 鍒楀鎸夋樉绀哄唴瀹�**鑷�傚簲**锛涢暱鍏紡鏂囨湰涓嶅緱鎾戠垎鍒楀锛涚敓鎴愮殑鏈�缁堣〃鍙湪 Excel 閲岃窇 VBA 鍏ㄨ〃鑷�傚簲 | 鉁� 2026-09-08 | VBA 瑙� `docs/宸ュ叿/VBA_鐢熸垚鐗╁叏琛ㄨ嚜鍔ㄥ垪瀹絖2026-09-08.txt` |
+| F6 | 鐢熸垚閾捐矾 = 澶嶅埗姣嶇増鈫掑~鍊�/杩樺師锛�**姣嶇増鏂囦欢鏈韩涓嶅甫涓氬姟鏁版嵁浣滀吉瑁�**锛屾暟鎹竴寰嬬敱瀵煎叆+璁$畻鍐欏叆 | 馃毀 鎺ㄨ繘涓� | 渚濄�婄‘璁ゅ洖鎵с�婨1 鍏堝洖褰�7鏈堝啀濉�8鏈� |
+| F7 | 姹囨�诲ぇ琛ㄥ惈褰撴湀 + 1-X鏈堢疮璁� + 鍚屾瘮锛涙帓鍚�/鍒嗘瀽琛ㄩ渶褰撴湀涓庣疮璁′袱濂� | 鉁咃紙褰撴湀+绱缁撴瀯锛� | 褰撴湀鎺掑悕淇宸插叆 M2 楠岃瘉 |
+| F8 | 2025 骞村墠鏁版嵁浠ユ瘝鐗堢紦瀛樹负鍑嗭紱**姣嶇増缂撳瓨浼樺厛浣滃悓姣斿熀鍑�**锛屽簱鍙仛鏍¢獙锛屼汉宸ユ牳瀵归噸瀵间竴鑷村悗鎵嶅垏搴撳�硷紙Q1锛� | 鉁� 鍙e緞纭 | |
+| F9 | 鍐呴儴璁$畻椤典笉瀵瑰锛涜揣杩�/鍏矾鏃呭/鍩庡競瀹㈣繍灏忚〃鍓嶇鍏ㄩ儴闅愯棌锛堝唴閮ㄤ腑闂磋〃淇濈暀锛� | 鉁� 鎷嶆澘 | |
+| F10 | 鎵╁垪鎸夋湀鎸夐渶锛堝姞鏈堜唤鎵嶆墿鍒楋紝涓嶉鍋� 12 鏈堟弧鐗堬級锛涙柊澧炲垪鈥滃綋鏈�/鍚屾瘮鈥濇爣棰樹负涓よ鍚堝苟鍗曞厓鏍硷紝鎵╁垪椤讳繚鐣� | 鉁� M0 v4 | |
+| F11 | 鍚屾瘮鏃犳暟鎹殑鈥滃閫熶负 0 闇�鏍稿疄鈥濈被瑙勫垯宸插叆鍏氦/鍑虹/璐ц繍/鏃呭瀹℃牳瑙勫垯锛堣ˉ鍏呰鍒欑被鍏堢紦锛� | 馃毀 | 瀹℃牳瑙勫垯绫昏繎鏈熶互瀵煎叆涓庢姤琛ㄤ负鍏� |
+
+## 浜屻�佹暟鎹鍏�
+| 缂栧彿 | 瑕佹眰 | 鐘舵�� | 澶囨敞 |
+|---|---|---|---|
+| I1 | 瀵煎叆杩囩▼鏄剧ず**杩涘害**锛涘鍏ュけ璐ユ彁绀哄埌**琛屽彿** | 鉁� | |
+| I2 | 鍏佽閲嶅瀵煎叆锛堥噸鏂板鍏ヨ鐩栵級 | 鉁� 鎷嶆澘 | |
+| I3 | 鍩庡競瀹㈣繍瀵煎叆绫诲瀷涓嬫媺闇�鍚細**鍏氦/鍑虹鏈堟姤銆佺綉绾﹁溅鎷嗗垎銆佺綉绾﹁溅璁㈠崟銆佸叏鐪佹�婚噺绛�**妯℃澘 | 鉁� 宸插姞 | 姣嶇増鍦� `docs/鍩庡競瀹㈣繍` |
+| I4 | 瀵煎叆妯℃澘宸紓锛堜紒涓氫唬鐮�/鍗曚綅璇︾粏鍚嶇О鍒楁湁鏃狅級瑕佷笌涓夌妯℃澘鐨勫樊寮傚吋瀹� | 鉁� 宸插吋瀹� | 瑙� 09-04 娴嬭瘯鎶ュ憡 |
+| I5 | 鏁版嵁鏌ョ湅锛�**婊氬姩鍒板簳閮ㄨ嚜鍔ㄥ姞杞藉苟鏄剧ず鏇村琛�**锛堝叏灞�/鏅�氭ā寮忓潎鍙炕椤碉級 | 鉁� 2026-09-08 | DataView.vue 淇婊氬姩瀹瑰櫒+capture 鐩戝惉锛汣hrome 鐪熸満 20鈫�140 琛岄�掑楠岃瘉 |
+
+## 涓夈�佹姤琛ㄧ敓鎴�
+| 缂栧彿 | 瑕佹眰 | 鐘舵�� | 澶囨敞 |
+|---|---|---|---|
+| R1 | 閫愭湀鎵╁睍鐢熸垚锛涗繚鐣欐瘝鐗堢紦瀛樹笌姣嶇増绋嬪簭澶嶅埗锛涚疮璁″叕寮忓幓鎺夋湭鍒版湀浠姐�佸悓姣斿垎姣嶈仈鍔� | 鉁� M0/M1 | |
+| R2 | 鐢熸垚鈥滈亾璺繍杈撻噺姹囨�昏〃锛堟暣鏈級鈥�= 褰撴湀琛� + 绱锛�1-X鏈堬級| 鉁� | |
+| R3 | 鐢熸垚鐗╀笌姣嶇増/搴� 0 宸紓涓洪獙鏀舵爣鍑嗭紙鍚腑鍙e緞鍒嗘瀽椤点�佹帓鍚嶉〉绱鍧楋級 | 鉁� 7鏈堝洖褰� | |
+| R4 | 鐙珛灏忚〃淇濈暀浣嗗墠绔殣钘忥紝绛夊ぇ琛ㄨ窇閫氬悗鍙彇娑� | 鉁� 鎷嶆澘 | |
+| R5 | 鎺掑悕/鍒嗘瀽/姹囨�荤殑**褰撴湀鏁版嵁**瑕佷笌绱鏁版嵁鍒嗗埆璁$畻锛岀姝㈡妸绱鍊煎綋褰撴湀鍊� | 馃毀 M2/M3 瀹炲脊 | |
+
+## 鍥涖�佸鏍歌鍒�
+| 缂栧彿 | 瑕佹眰 | 鐘舵�� | 澶囨敞 |
+|---|---|---|---|
+| A1 | RULE_004锛堣揣杩愮被鍨嬬幆姣旓級锛�**涓婃湀鏃犫啋鏈湀鏂板锛屾彁閱掞紱涓婃湀鏈夆啋鏈湀鏃狅紝鎻愰啋**锛堝弻鍚戯級 | 鉁� 2026-09-08 | 寮曟搸+DB+init.sql 宸叉敼锛�2026-07 瀹炴祴锛氭柊澧�6/娑堝け3/鍙屽悜1 瀹讹紝涓庢簮鏁版嵁鍚诲悎 |
+| A2 | 瑙勫垯鍚嶇О/璇存槑閲岀殑闃堝�硷紙卤N%锛�**闅忛槇鍊煎瓧娈垫敼鍔ㄨ嚜鍔ㄥ悓姝�**锛堝 卤10%鈫捖�20%锛夛紝鍏跺畠鍚槇鍊艰鍒欏悓鐞� | 鉁� 2026-09-08 | 瀹炴祴 20鈫�30鈫�20锛氬悕绉�/璇存槑闅忓姩骞舵寔涔呭寲锛汥B id=11 澶嶆牳涓�鑷� |
+| A3 | 鏁磋溅鍚ㄤ綅鍒ゅ畾鐢�**骞冲潎鍚ㄤ綅=鏁磋溅鍚ㄤ綅/鏁磋溅鏁�**锛屽尯闂� 4-40 | 鉁� | 09-04 淇 |
+| A4 | 瀹℃牳缁撴灉閲岀殑寮傚父鏁板�艰鍙В閲婏紙濡傗�滆建杩规祴绠�=1.04E7鈥濋渶缁欏嚭绠楁硶璇存槑/鍙e緞鏍囨敞锛� | 猬� | 鍙e緞瑙i噴椤垫帹杩涗腑 |
+
+## 浜斻�佸伐浣滅邯寰嬩笌浜や粯
+| 缂栧彿 | 瑕佹眰 | 鐘舵�� |
+|---|---|---|
+| W1 | 姣忓畬鎴愪竴涓姛鑳斤細绔嬪嵆娴嬭瘯骞跺啓銆婂姛鑳芥祴璇曟姤鍛奯<鍔熻兘>_<鏃ユ湡>.md銆嬪埌 `docs/鍔熻兘娴嬭瘯鎶ュ憡/` | 鉁� 甯告�佹墽琛� |
+| W2 | 姣忓ぉ涓嬬彮鍐欍�婂伐浣滄棩缁揰<鏃ユ湡>.md銆嬪埌 `docs/宸ヤ綔鏃ョ粨/` | 鉁� 甯告�佹墽琛� |
+| W3 | 骞叉椿鍓嶈鏈竻鍗曚笌銆婄‘璁ゅ洖鎵ф眹鎬烩�︺�嬶紝宸茬‘璁ら」涓嶅啀閲嶅鍚戠敤鎴锋彁闂� | 鉁� 鎵ц |
+| W4 | 涓汉 gitee(origin) 鏈夋敼鍔ㄥ厛 fetch/鍚堝苟锛涘叕鍙� gitea(main) 鍏堟祴璇�+鎶ュ憡鈫掑悎骞垛啋commit鈫抪ush锛岀寮烘帹 | 鉁� 鎵ц |
+
+## 鍏�佹湰浼氳瘽锛�2026-09-08 涓嬪崍/鏅氶棿锛夊鐞嗙櫥璁�
+1. 鏃ユ湡閿氱偣缁熶竴 yyyy骞磎鏈堬紙F3锛�+ 淇璐ц繍椤� CQ 鍒楁棩鏈熸樉绀烘垚鏁板瓧鐨勯棶棰橈紱
+2. 鎻愪緵鍏ㄨ〃鍒楀鑷�傚簲 VBA锛團5锛夛紱
+3. DataView 婊氬姩鍒板簳鍔犺浇鏇村锛圛5锛夛紱
+4. 鎺掑悕/灏忔暟浣嶆牸寮忓鏍革紙F1/F2锛氳揣杩愰噺鎺掑悕鎺掑悕=鏁存暟銆佸懆杞噺鎺掑悕鏁版嵁=0.00銆侀亾璺繍杈撳懆杞噺鏃� 3/4 浣嶅皬鏁帮級锛�
+5. 鏈竻鍗曞缓绔嬶紙W3锛夛紱
+6. RULE_004 鍙屽悜鎻愰啋锛圓1锛夛紱RULE_P005 闃堝�� 20% 涓庡悕绉�/璇存槑鑱斿姩锛圓2锛夈��
+7. 鏈壒瀹炴祴鏀跺彛锛氬叏绨挎牸寮忎綋妫�锛坆ad3/General/搴曡壊=0锛夈�丷ULE_004 鍙屽悜 2026-07 鍛戒腑鏍稿銆丳005 鑱斿姩 20鈫�30鈫�20銆丏ataView Chrome 鐪熸満婊氬姩鍔犺浇 20鈫�140 琛屸�斺�旇瑙併�婂姛鑳芥祴璇曟姤鍛奯姹囨�诲ぇ琛ㄦ棩鏈熸牸寮忎笌瑙勫垯鑱斿姩鍙婃暟鎹煡鐪嬫粴鍔ㄥ姞杞絖2026-09-08.md銆嬨��
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java b/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java
index 5d343bb..799c2fc 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java
@@ -1645,26 +1645,34 @@
         return null;
     }
 
-    /** 璐ц繍绫诲瀷鐜瘮锛氭湰鏈堟柊澧烇紙涓婃湀涓�0銆佹湰鏈�>0锛夐渶鏍稿疄锛屽皯鐨勪笉绠� */
+    /** 璐ц繍绫诲瀷鐜瘮锛圧ULE_004锛夛細涓婃湀鏃犫啋鏈湀鏂板 鎴� 涓婃湀鏈夆啋鏈湀鏃狅紝鍧囨彁閱掓牳瀹� */
     private AuditResult checkMom(AuditRule rule, H2032EnterpriseMonthly report,
                                  Map<String, H2032EnterpriseMonthly> lastMonthMap) {
         H2032EnterpriseMonthly lastMonth = lastMonthMap.get(key(report.getEnterpriseCode()));
         if (lastMonth == null) return null;
-        List<String> hits = new ArrayList<>();
+        List<String> addHits = new ArrayList<>();
+        List<String> delHits = new ArrayList<>();
         for (String field : rule.getCheckField().split(",")) {
             double current = getH2032FieldValue(report, field);
             double last = getH2032FieldValue(lastMonth, field);
             if (current > 0 && last == 0) {
-                hits.add(h2032FieldLabel(field) + "=" + fmt(current));
+                addHits.add(h2032FieldLabel(field) + "=" + fmt(current));
+            } else if (last > 0 && current == 0) {
+                delHits.add(h2032FieldLabel(field) + "锛堜笂鏈�=" + fmt(last) + "锛屾湰鏈堟棤锛�");
             }
         }
-        if (!hits.isEmpty()) {
-            return buildResult(rule, report, "鏈湀鏂板: " + String.join("銆�", hits),
-                "涓婃湀璇ョ被鍨嬩负0", "鏈湀鏂板璐ц繍绫诲瀷锛堜笂鏈堟棤锛�");
+        if (!addHits.isEmpty() || !delHits.isEmpty()) {
+            StringBuilder msg = new StringBuilder();
+            if (!addHits.isEmpty()) msg.append("鏈湀鏂板: ").append(String.join("銆�", addHits));
+            if (!delHits.isEmpty()) {
+                if (msg.length() > 0) msg.append("锛�");
+                msg.append("鏈湀娑堝け: ").append(String.join("銆�", delHits));
+            }
+            return buildResult(rule, report, msg.toString(),
+                "涓婃湀鏃犫啋鏈湀鏂板 鎴� 涓婃湀鏈夆啋鏈湀鏃�", "璐ц繍绫诲瀷鐜瘮鏂板/娑堝け闇�鏍稿疄");
         }
         return null;
     }
-
     /** 鏈夎揣杩愰噺浣嗗搴旇溅杈嗕负0 闇�鏍稿疄锛堝 鏈夐泦瑁呯璐ц繍閲忔棤闆嗚绠辫溅杈嗭級 */
     private AuditResult checkNull(AuditRule rule, H2032EnterpriseMonthly report) {
         String[] fields = rule.getCheckField().split(",");
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/rulemanage/controller/RuleManageController.java b/traffic-audit-server/src/main/java/com/trafficaudit/rulemanage/controller/RuleManageController.java
index 1ed1c90..b55fea1 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/rulemanage/controller/RuleManageController.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/rulemanage/controller/RuleManageController.java
@@ -8,6 +8,8 @@
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
 import java.util.List;
 
 /** 瑙勫垯绠$悊锛氭寜鎶ヨ〃绫诲瀷鏌ョ湅/鍚仠/璋冩暣闃堝�� */
@@ -26,7 +28,9 @@
             qw.eq(AuditRule::getReportType, reportType.trim());
         }
         qw.orderByAsc(AuditRule::getSortOrder);
-        return Result.ok(ruleMapper.selectList(qw));
+        List<AuditRule> list = ruleMapper.selectList(qw);
+        for (AuditRule r : list) syncThresholdText(r); // 鍚嶇О/璇存槑闅忛槇鍊煎姩鎬佸睍绀猴紙濡� 卤10% 鈫� 卤20%锛�
+        return Result.ok(list);
     }
 
     /** 鍚仠瑙勫垯 */
@@ -47,11 +51,33 @@
         if (body.getId() == null) return Result.error("缂哄皯瑙勫垯ID");
         AuditRule rule = ruleMapper.selectById(body.getId());
         if (rule == null) return Result.error("瑙勫垯涓嶅瓨鍦�");
+        String oldThreshold = rule.getThreshold();
         if (body.getThreshold() != null) rule.setThreshold(body.getThreshold());
         if (body.getAlertLevel() != null) rule.setAlertLevel(body.getAlertLevel());
         if (body.getDescription() != null) rule.setDescription(body.getDescription());
+        // 闃堝�煎彉鍖栨椂鍚屾瑙勫垯鍚嶇О涓庤鏄庯紙鍚嶇О/璇存槑閲岀殑 卤N% 鎸夋柊闃堝�兼敼鍐欙級锛屽苟闅忎繚瀛樻寔涔呭寲
+        if (body.getThreshold() != null && !body.getThreshold().equals(oldThreshold)) {
+            syncThresholdText(rule);
+        }
         rule.setUpdatedAt(LocalDateTime.now());
         ruleMapper.updateById(rule);
         return Result.ok("宸蹭繚瀛�");
     }
-}
+
+    /** 卤N% 瀛楁牱鍖归厤锛堝悕绉�/璇存槑涓殢闃堝�煎姩鎬佸彉鍖栫殑鐗囨锛� */
+    private static final Pattern PCT_TOKEN = Pattern.compile("卤\\s*\\d+(?:\\.\\d+)?\\s*%");
+
+    /** 鎶婃枃鏈腑鐨� 卤N% 鏇挎崲涓� 卤threshold%锛堝惈宸插甫 卤 鐨勫墠缂�锛岄伩鍏嶅弻 卤锛� */
+    private String decorateThresholdText(String text, String threshold) {
+        if (text == null || text.trim().isEmpty() || threshold == null || threshold.trim().isEmpty()) return text;
+        String token = "卤" + threshold.trim() + "%";
+        return PCT_TOKEN.matcher(text).replaceAll(Matcher.quoteReplacement(token));
+    }
+
+    /** 鍚嶇О/璇存槑闅忛槇鍊煎悓姝ワ紙璇诲垪琛ㄦ椂涔熷姩鎬佹牎姝o紝DB 涓棫鏂囨湰涓嶉樆濉炴樉绀猴級 */
+    private void syncThresholdText(AuditRule rule) {
+        if (rule == null || rule.getThreshold() == null) return;
+        rule.setRuleName(decorateThresholdText(rule.getRuleName(), rule.getThreshold()));
+        rule.setDescription(decorateThresholdText(rule.getDescription(), rule.getThreshold()));
+    }
+}
\ No newline at end of file
diff --git a/traffic-audit-web/src/views/DataView.vue b/traffic-audit-web/src/views/DataView.vue
index 8ef5b0d..1ec3c5e 100644
--- a/traffic-audit-web/src/views/DataView.vue
+++ b/traffic-audit-web/src/views/DataView.vue
@@ -81,12 +81,14 @@
       total: 0,
       records: [],
       columns: [],
-      loading: false
+      loading: false,
+      loadingMore: false
     }
   },
   methods: {
     loadData() {
       this.loading = true
+      this.loadingMore = false
       api.get('/data/list', {
         params: {
           type: this.type,
@@ -111,6 +113,57 @@
         this.loading = false
       })
     },
+    // 婊氬姩鍒板簳閮ㄨ嚜鍔ㄨ拷鍔犱笅涓�椤碉紙淇濈暀鎵嬪姩鍒嗛〉璺抽〉鑳藉姏锛�
+    loadMore() {
+      if (this.loading || this.loadingMore) return
+      if (this.records.length >= this.total || this.total <= 0) return
+      const nextPage = this.page + 1
+      this.loadingMore = true
+      api.get('/data/list', {
+        params: {
+          type: this.type,
+          period: this.period || undefined,
+          keyword: this.keyword || undefined,
+          page: nextPage,
+          size: this.size
+        }
+      }).then(res => {
+        const d = res.data || {}
+        const addRows = d.records || []
+        if (!addRows.length) {
+          this.page = nextPage - 1
+          return
+        }
+        this.records = this.records.concat(addRows)
+        this.page = nextPage
+        if (d.total != null) this.total = d.total
+        if (d.columns && d.columns.length) this.columns = d.columns
+      }).catch(e => {
+        if (e && e._toast) return
+        this.$message.error('鍔犺浇鏇村澶辫触')
+      }).finally(() => {
+        this.loadingMore = false
+      })
+    },
+    onScroll(e) {
+      // 鏅��/鍏ㄥ睆涓嬬湡姝g殑婊氬姩瀹瑰櫒閮芥槸 el-table 鍐呴儴 body-wrapper锛堟崟鑾烽樁娈靛彲鏀跺埌锛夛紱
+      // 椤甸潰鏁翠綋婊氬姩鏃朵互 window/document 涓哄噯銆�
+      const t = e && e.target
+      let scrollTop, clientHeight, scrollHeight
+      if (t && t.nodeType === 1 && t !== document && typeof t.scrollTop === 'number' && t.scrollHeight > t.clientHeight) {
+        scrollTop = t.scrollTop
+        clientHeight = t.clientHeight
+        scrollHeight = t.scrollHeight
+      } else {
+        const se = document.scrollingElement || document.documentElement
+        scrollTop = se.scrollTop
+        clientHeight = window.innerHeight
+        scrollHeight = se.scrollHeight
+      }
+      if (scrollHeight > 0 && scrollTop + clientHeight >= scrollHeight - 80) {
+        this.loadMore()
+      }
+    },
     toggleFullscreen() {
       const el = this.$refs.tableWrap
       if (!document.fullscreenElement) {
@@ -131,6 +184,17 @@
     if (q.period) this.period = q.period
     if (q.keyword) this.keyword = q.keyword
     this.loadData()
+    window.addEventListener('scroll', this.onScroll, { passive: true })
+    if (this.$refs.tableWrap) {
+      // capture=true锛歟l-table 鍐呴儴 body-wrapper 鐨勬粴鍔ㄥ湪鎹曡幏闃舵涔熻兘鏀跺埌
+      this.$refs.tableWrap.addEventListener('scroll', this.onScroll, { passive: true, capture: true })
+    }
+  },
+  beforeDestroy() {
+    window.removeEventListener('scroll', this.onScroll)
+    if (this.$refs.tableWrap) {
+      this.$refs.tableWrap.removeEventListener('scroll', this.onScroll, { capture: true })
+    }
   }
 }
 </script>

--
Gitblit v1.9.1