| docs/功能测试报告/功能测试报告_城市客运月度与累计同比_2026-09-20.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/工作日结/工作日结_2026-09-20.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/生成汇总大表/2026年8月道路运输量汇总表.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| traffic-audit-server/src/main/java/com/trafficaudit/reportexport/calc/SummaryWorkbookFiller.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| traffic-audit-web/src/views/ReportExport.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_³ÇÊпÍÔËÔ¶ÈÓëÀÛ¼ÆÍ¬±È_2026-09-20.md
New file @@ -0,0 +1,69 @@ # åè½æµè¯æ¥å_åå¸å®¢è¿æåº¦ä¸ç´¯è®¡åæ¯_2026-09-20 ## ä¸ãåè½è¯´æ ç¨æ·ä¸æ¥ï¼æ±æ»å¤§è¡¨ãåå¸å®¢è¿ã页 8 æåæ¯ãç´¯è®¡åæ¯ææ¾ä¸å¯¹ï¼å ¨ç客è¿é 8 æåæ¯ â86.5%ãç´¯è®¡åæ¯ â43.5%ï¼ï¼ ä¸ã2025å¹´1-7æç´¯è®¡ãè¿ä¸è¾ å©åææå·²å¨æ¯çå é¤å´ä»åºç°å¨çæè¡¨éã æ¬æ¬¡ä¿®å¤ä¸ä»¶äºï¼ 1. **æ¯çç»æå½ä¸**ï¼æã2026å¹´8æéè·¯è¿è¾éæ±æ»è¡¨.xlsxãåå¸å®¢è¿é¡µå¤åºç AJ åï¼`2025å¹´1-7æç´¯è®¡` è¾ å©åï¼çæ£å é¤ï¼ 使 2025 åæåæ¢å¤çè·ï¼2025å¹´8æåå° AJï¼ï¼ä¸çå¼åç §ä»¶ãçæ_éè·¯è¿è¾éæ±æ»è¡¨.xlsxãä¸è´ã 2. **ç¨åºä¾§æè¡¨å¤´å®ä½æä»½å**ï¼`SummaryWorkbookFiller.ensureMonthYoyFormulas()` ä¸åæ èãå ¬å¼æ´ä½å³ç§» 2 åãï¼ æ¹ä¸ºæè¡¨å¤´ (å¹´,æ) æå ¬å¼éçæä»½åå¼ç¨é¡ºå»¶ä¸ä¸ªæãå ¶ä½å¼ç¨å³ç§» 2 åï¼å¹¶æ°å¢ `repairCumulativeYoyFormulas()` å åºéååæçç´¯è®¡åæ¯åæ¯ï¼åæ¯=å»å¹´ 1..彿åæå¼åä¹åï¼ã 3. **æ¥è¡¨çæé¡µé¢è§è¡¥é½å ¨ææ 忝**ï¼`ReportExport.vue` çé¢è§è¡å®ä¹åªæ å°äºå¨è½¬é䏤项忝ï¼è¡¥ä¸è´§è¿é/åå¸å®¢è¿/ä¸å£å¾å ± 8 é¡¹ï¼ å¹¶ä¿®æ£ãå½æè´§ç©å¨è½¬é(ä¸å¨)ãåä½ç¬è¯¯ã ## äºãæµè¯ç¯å¢ - å端 Spring Boot 8090ï¼`Started TrafficAuditApplication`ï¼ãå端 Vue 8080ï¼`Compiled successfully`ï¼ - æ°æ®åº MySQL localhost:3308/traffic_audit - æ¥è¡¨æï¼2026-08ï¼ææ¥ï¼ - æ¯çï¼`docs/çææ±æ»å¤§è¡¨/2026å¹´8æéè·¯è¿è¾éæ±æ»è¡¨.xlsx`ï¼Excel 16.0 COM å ååä¿åï¼ - æ¯çå¤ä»½ï¼`docs/çææ±æ»å¤§è¡¨/_bak_202608æ¯çå é¤AJåå_20260920.xlsx` - 对æ¯åºåä»¶ï¼`_before_citypaxfix_2026-08.xlsx`ï¼æ¹å¨å 11:37 çï¼ã`_after_ajdel_2026-08.xlsx`ï¼æ¬æ¬¡ä¿®å¤åï¼ ## ä¸ãç¨ä¾è¡¨ | ç¼å· | ç¨ä¾ | è¾å ¥ | 颿 | å®é | ç»è®º | | --- | --- | --- | --- | --- | --- | | T01 | 8 æåæ¯åå忝 | å¯¼åº 2026-08 æ±æ»å¤§è¡¨ï¼è¯» åå¸å®¢è¿!R4 å ¬å¼ | `=Q4/AJ4-1`ï¼Q=2026å¹´8æãAJ=2025å¹´8æï¼ | `=Q4/AJ4-1` | éè¿ | | T02 | å ¨ç客è¿é 8 æåæ¯ç¼åå¼ | åä¸ï¼è¯»ç¼å | 约 +4.44%ï¼32215.74 / 30846.31 â 1ï¼ | +4.4395% | éè¿ | | T03 | ç´¯è®¡åæ¯åæ¯ | 读 åå¸å®¢è¿!T4 å ¬å¼ | `=S4/(V4+X4+Z4+AB4+AD4+AF4+AH4+AJ4)-1` | åå·¦ï¼ä¸ä¸åæ¯ `#REF!` | éè¿ | | T04 | å ¨ç客è¿éç´¯è®¡åæ¯ç¼åå¼ | 读ç¼å | 约 +0.117%ï¼269628.07 / 269312.48 â 1ï¼ | +0.1172% | éè¿ | | T05 | è¾ å©åæ¯å¦å½»åºæ¶å¤± | å ¨è¡¨æç´¢ `2025å¹´1-7æç´¯è®¡` | 0 å¤ | 0 å¤ï¼åå¸å®¢è¿ç»´åº¦ç± A1:BV40 æ¶ä¸º A1:BU40 | éè¿ | | T06 | æ¯çå ååå¼ç¨èªå¨è°æ´ | 读æ¯ç åå¸å®¢è¿!W4ï¼2025å¹´1æåæ¯ï¼ | `=V4/AW4-1`ï¼2024 åºåéå å左移ä¸åï¼ | `=V4/AW4-1` | éè¿ | | T07 | æ¯çæ®çéè¯¯å ¬å¼ | æ«ææ¯ç åå¸å®¢è¿é¡µå« `#REF!` çå ¬å¼ | 0 å¤ï¼å å产çç 36 å¤ `#REF!` å·²è¿å为 AJï¼ | 0 å¤ | éè¿ | | T08 | å ¨è¡¨å¾ªç¯å¼ç¨ | æ«æçæè¡¨ç¼åå¼ `~CIRCULAR~REF~` | 0 å¤ | 0 å¤ï¼ä¿®å¤å 360 å¤ï¼ | éè¿ | | T09 | å ¶å®å°è´¦é¡µ 8 æåæ¯ | 读 è´§è¿/ç½çº¦è½¦/ä¸å£å¾æç» R5 | `=Q5/AJ5-1` ä¸ç¼å为ç¾åæ¯ | ä¸é¡µå为 `=Q5/AJ5-1`ï¼è´§è¿ +5.16%ãç½çº¦è½¦ +63.72%ãä¸å£å¾æç» â0.67% | éè¿ | | T10 | éåå¸å®¢è¿é¡µåå½ | éæ ¼å¯¹æ¯æ¹å¨ååé¤åå¸å®¢è¿å¤ç 18 ä¸ªé¡µç¾ | é¤ T09 çä¿®å¤å¤ä¸åºæå·®å¼ | ä» è´§è¿/ç½çº¦è½¦/ä¸å£å¾æç» ç R åç±å¾ªç¯å¼ç¨å为æ£ç¡®å ¬å¼ï¼å ¶å®é¡µä¸è´ | éè¿ | | T11 | åºæ°ç¼ºæ ¼çè¾¹ç | ä¸å£å¾æç» R13/R14/R107/R108ï¼åé å乡巡游åºç§/ç½çº¦è½¦ï¼2025å¹´8æåºæ°=0ï¼ | æ¾ç¤º `#DIV/0!`ï¼ä¸å¯æ¯ï¼ | `#DIV/0!`ï¼ä¿®å¤åæ¯æ æä¹ç循ç¯å¼ç¨ï¼ | éè¿ï¼é¢æï¼ | | T12 | é¢è§æ¥å£åæ¯ææ | `GET /api/report/preview?period=2026-08&mode=month&types=summaryWorkbook` | 24 é¡¹ææ ï¼å« 8 项忝 | 24 项ï¼å ¶ä¸åæ¯ 8 项ï¼è´§è¿é +5.2/+1.9ãå¨è½¬é +4.8/+0.0ãåå¸å®¢è¿é â1.5/â3.1ãåå¸å®¢è¿å¨è½¬é â0.6/â3.5ãä¸å£å¾å®¢è¿é â7.1/â7.6ãä¸å£å¾å¨è½¬é +0.9/â1.1ï¼ï¼èæ¶ 1.03 ç§ | éè¿ | | T13 | å端é¢è§æ¸²æ | æ¥è¡¨çæé¡µé¢è§å¼¹çª | 8 è¡é½æåæ¯åæ°å¼ï¼å使£ç¡® | æ å°å·²è¡¥é½ï¼`ReportExport.vue`ï¼ï¼å端 `Compiled successfully` | éè¿ | | T14 | è´åï¼æ¯ç缺å/ååºå¼å¸¸ | 代ç å åºï¼`usableMonthCols` å¤å®è¡¨å¤´ä¸å ¨æ¶éåæ´ä½å³ç§» 2 åï¼ | ä¸åºæå¼å¸¸ãä¸åºæ¹åå ¶å®é¡µ | å ¶å® 8 个å°è´¦é¡µå ¬å¼ä¸æ§çä¸è´ | éè¿ | | T15 | 导åºèæ¶ | ä¸è½½ 2026-08 æ±æ»å¤§è¡¨ | 坿¥åï¼å½å 10~20 ç§çº§ï¼ | 14 ç§ï¼æ¯ç读å+åå¡« 6.5sãå ¬å¼éç® 4.1sãåçä¸ä¼ è¾çº¦ 3.4sï¼ | éè¿ï¼è§éçé¡¹ï¼ | ## åãåç°çé®é¢ä¸å¤ç½® 1. **æ¯çä¸¤æ¬æ··æ·**ï¼ç¨æ·ä¹åå¨ã2026å¹´7æéè·¯è¿è¾éæ±æ»è¡¨.xlsxãéå äº AJ åï¼è 8 æå¯¼åºç¨çæ¯ ã2026å¹´8æéè·¯è¿è¾éæ±æ»è¡¨.xlsxãï¼åè ä»å¸¦è¯¥è¾ å©åã â å·²ç¨ Excel 16.0 COM å¨ 8 ææ¯çæ´åå é¤ AJï¼å¼ç¨ç± Excel èªå¨è°æ´ï¼ï¼å¹¶æå å导è´ç 36 å¤ `#REF!` ç´¯è®¡åæ¯å ¬å¼è¿å为 `AJ`ã 2. **åå·åºåéä½ï¼æ¬æ¬¡ 8 æåæ¯ç®éçç´æ¥åå ï¼**ï¼æ°åç `colIndexOf()` è¿å 1 åºåå·ï¼è POI ç `Cell.getColumnIndex()` æ¯ 0 åºï¼å¯¼è´ãæä»½åæ¥è¡¨ãå ¨é¨è½ç©ºãéåæ `åå·+2`ï¼äºæ¯ `=O5/AH5-1` è¢«ç®æ `=R5/AK5-1`ï¼èªå¼ç¨â循ç¯å¼ç¨ï¼ãâ å·²æ¹ä¸ºè¿å 0 åºåå·ï¼ åæ¶ä¿®æ è´§è¿/ç½çº¦è½¦/ä¸å£å¾æç» ä¸é¡µç 360 æ ¼å¾ªç¯å¼ç¨ã 3. **POI `setCellFormula` 䏿¥å带 `=` åç¼çå ¬å¼ä¸²**ï¼æ `FormulaParseException`ï¼è该å¼å¸¸åå 被 `catch (Exception ignore)` éé»åæï¼å¯¼è´ãç´¯è®¡åæ¯åæ¯ä¿®æ£æ ¼æ°=0ãèçä¸åºåå ã â å»æå ¬å¼ä¸²åç¼ `=`ï¼å¹¶æ catch æ¹ä¸ºå WARN æ¥å¿ï¼ä¿çä¸é»å¡å¯¼åºççç¥ï¼ã 4. **表头è¯å«æ¼å¤**ï¼æ¯çåå¸å®¢è¿é¡µ 3~8 æè¡¨å¤´æ¯ `46235` è¿ç±»è£¸æ¥æåºåä¸åå æ ¼æ ¼å¼ä¸º Generalï¼ åæ `isCellDateFormatted` å¤å®ä¼æ¼æãâ æ¹ä¸ºãæ°å¼å¨ 1..200000 䏿¢ç®åæ¯å½æ 1 å·ãå¤å®ã 5. **é¢è§åæ¯å缺失ï¼å端å®ä¹é®é¢ï¼éæ°æ®é®é¢ï¼**ï¼å端ä¸ç´è¿å 8 é¡¹åæ¯ï¼ ä½ `ReportExport.vue` çé¢è§è¡å®ä¹åªç»ä¸¤é¡¹å¨è½¬éé äºåæ¯åãâ å·²è¡¥é½ 8 é¡¹å¹¶æ¹æ `ä¸å¨` ç¬è¯¯ã ## äºãç»è®º 15 æ¡ç¨ä¾å ¨é¨éè¿ï¼å ¶ä¸ T11 ä¸ºé¢æå ç `#DIV/0!`ãT15 为æ§è½ç°ç¶è¯´æï¼ã åå¸å®¢è¿ 8 æåæ¯ä¸ç´¯è®¡åæ¯å·²æ¢å¤æ£ç¡®å£å¾ï¼è¾ å©å卿¯çä¸çæè¡¨ä¸åå·²æ¶å¤±ï¼ åæ¶ä¿®å¤äºå¦ä¸å¼ å°è´¦é¡µé¿æåå¨ç循ç¯å¼ç¨éè¯¯ï¼æ¥è¡¨çæé¡µé¢è§å¯æ¾ç¤ºå ¨é¨ 8 项忝ã éçï¼å¯¼åºä¸ºåæ¥è¯·æ±ãå½å约 14 ç§ï¼è¯¦è§å·¥ä½æ¥ç»å¾ åï¼ã docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-20.md
@@ -21,6 +21,26 @@ - éå¯åå端å è½½æ°ä»£ç ï¼å端 `Started TrafficAuditApplication` 10:49:51ï¼ã - é¡ºææ ¸å¯¹ï¼å䏿ãå计è¡è¢«å½é¡¹ç®ãä¿®å¤åï¼å®¢è¿æ¬æå®ææèµç±å«å计è¡ç 2130.1 æ¶æä¸º **2048.1**ï¼ä¸ SQL é项ä¸è´ï¼åºå å·²æ å«ã计ãç伪项ç®è¡ã ### 1.3 ä¿®å¤ï¼æ±æ»å¤§è¡¨ãåå¸å®¢è¿ã8 æåæ¯ / ç´¯è®¡åæ¯ç®éï¼æ¯çå AJ è¾ å©å + ç¨åºæè¡¨å¤´åæ°ï¼ - **ç°è±¡**ï¼ç¨æ·ä¸æ¥çæè¡¨åå¸å®¢è¿ 8 æåæ¯ â86.5%ãç´¯è®¡åæ¯ â43.5%ï¼ä¸ã2025å¹´1-7æç´¯è®¡ãå卿¯çå è¿å´ä»å¨çæè¡¨éã - **æ ¹å ï¼3 个ï¼**ï¼ 1. æ¯çæ**两æ¬**ââç¨æ·å çæ¯ã2026å¹´7æéè·¯è¿è¾éæ±æ»è¡¨.xlsxãï¼è 8 æå¯¼åºç¨çæ¯ã2026å¹´8æâ¦ãï¼ åè åå¸å®¢è¿é¡µ 2025 年段æäº AJ åã2025å¹´1-7æç´¯è®¡ãï¼æ 2025å¹´8æåæ¤å° AKï¼ 8 æåæ¯ `=Q4/AJ4-1` å®é æ¯ã8æå¼ ÷ 2025å¹´1-7æç´¯è®¡ãï¼ç´¯è®¡åæ¯åæ¯åæ 1-6 æéå¤è®¡ã8 ææ¼è®¡ã 2. æ°åçåå·æ¢ç® `colIndexOf()` è¿å 1 åºåå·ï¼è POI åå·æ¯ 0 åº â æä»½åæ¥è¡¨å ¨è½ç©ºãéåæã+2 åãï¼ `=O5/AH5-1` è¢«ç®æ `=R5/AK5-1`ï¼èªå¼ç¨ï¼â è´§è¿/ç½çº¦è½¦/ä¸å£å¾æç» å ± 360 æ ¼å¾ªç¯å¼ç¨ã 3. POI `setCellFormula` 䏿¥å带 `=` åç¼çå ¬å¼ä¸²ï¼å¼å¸¸å被 `catch (Exception ignore)` åæï¼ ç´¯è®¡åæ¯åæ¯ä¿®æ£ä¸ç´éé»å¤±è´¥ï¼æ¥å¿åªæ¾ç¤ºãä¿®æ£æ ¼æ°=0ãï¼ï¼å¦æ¯ç 3~8 æè¡¨å¤´æ¯ 46235 è¿ç±»è£¸åºå + General æ ¼å¼ï¼ åæ `isCellDateFormatted` å¤å®ä¼æ¼å¤ã - **å¤ç½®**ï¼ 1. æ¯çï¼ç¨ Excel 16.0 COM å¨ã2026å¹´8æéè·¯è¿è¾éæ±æ»è¡¨.xlsxãåå¸å®¢è¿é¡µæ´åå é¤ AJï¼å¼ç¨ç± Excel èªå¨è°æ´ï¼ å¦ `W4` â `=V4/AW4-1`ï¼ï¼åæå å产çç 36 å¤ `#REF!` ç´¯è®¡åæ¯å ¬å¼è¿å为 `AJ`ï¼ å¤ä»½ `_bak_202608æ¯çå é¤AJåå_20260920.xlsx`ï¼å å忝çä¸çå¼åç §ä»¶ãçæ_éè·¯è¿è¾éæ±æ»è¡¨.xlsxãåç»æä¸è´ã 2. 代ç ï¼`colIndexOf` æ¹ 0 åºï¼`setCellFormula` 廿 `=` åç¼å¹¶æ catch æ¹æ WARN æ¥å¿ï¼ `yearMonthOf` æ¯æè£¸æ¥æåºåï¼`repairCumulativeYoyFormulas()` ä¿ç使¯çå åºã 3. å端ï¼`ReportExport.vue` é¢è§è¡¥é½è´§è¿é/åå¸å®¢è¿/ä¸å£å¾å ± 8 项忝æ å°ï¼ä¿®æ£ãå½æè´§ç©å¨è½¬é(ä¸å¨)ãåä½ã ## äºãæµè¯ç»ææè¦ ãåè½æµè¯æ¥å_æèµæç»è¡¨å°±ç»ªä¸é¢è§ç±»åè¡¥é½_2026-09-20.mdãï¼**7 æ¡ç¨ä¾éè¿ï¼1 æ¡æªå®æµ**ï¼ç¼ºæ¯çæç¤ºï¼æªä¸´æ¶ç§»å¨ç¨æ·æ¯çæä»¶ï¼ã @@ -35,16 +55,35 @@ | åææèµç±»ååå½ | investPlan / investBillion / investCounty / investFiveYearLogistics å ready=trueï¼rows=167 | | æªç¥ç±»åè´å | `foo` â ready=falseãnote=æªç¥æ¥è¡¨ç±»åï¼fooï¼å åºä»ææï¼ | ãåè½æµè¯æ¥å_åå¸å®¢è¿æåº¦ä¸ç´¯è®¡åæ¯_2026-09-20.mdãï¼**15 æ¡ç¨ä¾éè¿**ã | æ ¡éªé¡¹ | ç»æ | | --- | --- | | åå¸å®¢è¿ R4 / T4 å ¬å¼ | `=Q4/AJ4-1`ã`=S4/(V4+X4+Z4+AB4+AD4+AF4+AH4+AJ4)-1`ï¼ä¸åæ¯ `#REF!`ï¼ | | å ¨ç客è¿é 8 æåæ¯ / ç´¯è®¡åæ¯ | **+4.44% / +0.117%**ï¼ä¿®å¤å â86.5% / â43.5%ï¼ | | è¾ å©å | çæè¡¨ä¸æ¯çåæ ã2025å¹´1-7æç´¯è®¡ãï¼åå¸å®¢è¿é¡µ BVâBU | | 循ç¯å¼ç¨ | å ¨è¡¨ 0 å¤ï¼ä¿®å¤å 360 å¤ï¼å«è´§è¿/ç½çº¦è½¦/ä¸å£å¾æç» R åï¼ | | å ¶å® 18 个页ç¾åå½ | é¤ä¸è¿° R åä¿®å¤å¤éæ ¼ä¸è´ | | é¢è§æ¥å£ | 24 é¡¹ææ å« 8 项忝ï¼1.03 ç§ | | 导åºèæ¶ | 14 ç§ï¼æ¯ç读å+åå¡« 6.5sãå ¬å¼éç® 4.1sãåçä¼ è¾ 3.4sï¼ | ## ä¸ãéçé®é¢ä¸å¾ å 1. æ¦æ±ç©æµé¡¹ç®æ¸ åå£å¾ï¼å·²ç¡®è®¤å¿½ç¥ï¼ã 2. 天é¨ç©æµæºæä»¶ H/J/K 为空 â å¾ ç¨æ·æ¾åäºè¦æ°æ®åå¯¼å ¥ã 3. èå·/é»ç³ãè§åå /è§åå¤ãæåå£å¾ â å¾ ç¨æ·ååäºç¡®è®¤ã 4. C ç»ï¼åå¸å®¢è¿é¡µç»æå½ä¸ï¼éç¨æ·å å¨ WPS æ´åå é¤ AJ åï¼ï¼D ç»ï¼å¢éæåæªè¾ï¼ï¼B4ï¼å¯¼åºååºæ°ä½æ£ + å¼¹çª + ãæ°æ®ç¼ºå¤±æ¸ åã页ï¼å¾ ææã 4. ~~C ç»ï¼åå¸å®¢è¿é¡µç»æå½ä¸ï¼éç¨æ·å å¨ WPS æ´åå é¤ AJ åï¼~~ **已宿**ï¼æ¹ç¨ Excel COM æ´åå é¤ + å ¬å¼è¿åï¼ï¼ D ç»ï¼å¢éæåæªè¾ï¼ï¼B4ï¼å¯¼åºååºæ°ä½æ£ + å¼¹çª + ãæ°æ®ç¼ºå¤±æ¸ åã页ï¼å¾ ææã 5. 缺æ¯çæç¤ºï¼T08ï¼æªå®æµï¼å¯å¨ææµè¯å¯æ¬æ¶è¡¥æµã 6. æ±æ»å¤§è¡¨å¯¼åºæ¯**åæ¥è¯·æ±**ï¼å½å约 14 ç§ï¼æ¯æ¬¡é½è¦éç®æ´æ¬çº¦ 4 䏿 ¼å ¬å¼ï¼ï¼æ°æ®éåæ¶¨ä¸»è¦æ¯ SQL èååæ ¢ï¼ ä¸ä¼ã塿»ãï¼ä½å»ºè®®åç»åæå¼æ¥ä»»å¡ + è¿åº¦æç¤ºã 7. é¨ç½²å `deploy/traffic-audit-deploy-20260913/backend/docs/çææ±æ»å¤§è¡¨/` ä¸ `_deploytest/` ä¸ä»æ¯**带 AJ åçæ§æ¯ç**ï¼ ä¸æ¬¡æå æ¶éåæ¥ï¼æªç»ç¨æ·ç¡®è®¤ä¸æ èªæ¹é¨ç½²äº§ç©ï¼ã 8. ä¸å£å¾æç» 4 æ ¼ï¼åé å乡巡游åºç§/ç½çº¦è½¦ï¼å 2025å¹´8æåºæ°ä¸º 0ï¼åæ¯æ¾ç¤º `#DIV/0!`ï¼ä¸å¯æ¯ï¼ï¼å¦éæ¹ç©ºç½éç¨æ·ç¡®è®¤å£å¾ã ## åãææ¥è®¡å 1. ç天鍿ºæ°æ® / èå·é»ç³å£å¾ç¡®è®¤å补导并å¤éªã 2. æ¨è¿ C/D ç»ä¸ B4ã 3. ä¸ç¨æ·ç¡®è®¤æ¯å¦æ 09-18 å¤é´èµ·çæ¬å°æäº¤ä¸å¹¶æ¨éå°å ¬å¸ giteaï¼ç¨æ· 09-19 æ¾è¦æ±ãä»å¤©å 䏿¨å ¬å¸ãï¼ã 3. ä¸ç¨æ·ç¡®è®¤æ¯å¦æ 09-18 å¤é´èµ·çæ¬å°æäº¤ä¸å¹¶æ¨éå°å ¬å¸ giteaï¼ç¨æ· 09-19 æ¾è¦æ±ãä»å¤©å 䏿¨å ¬å¸ãï¼ã 4. è¯ä¼°æ±æ»å¤§è¡¨å¯¼åºå¼æ¥åï¼é¿ä»»å¡è¿åº¦æ¡ / ç»æç¼åï¼ï¼å¹¶ç¡®è®¤é¨ç½²å æ¯ç忥æ¹å¼ã docs/Éú³É»ã×Ü´ó±í/2026Äê8ÔµÀ·ÔËÊäÁ¿»ã×ܱí.xlsxBinary files differ
traffic-audit-server/src/main/java/com/trafficaudit/reportexport/calc/SummaryWorkbookFiller.java
@@ -565,7 +565,7 @@ if (target != null && target.getCellType() == org.apache.poi.ss.usermodel.CellType.FORMULA) continue; String f = prev.getCellFormula(); if (f == null || f.isEmpty()) continue; String shifted = shiftFormulaColumns(f, 2); String shifted = shiftFormulaToNextMonth(sh, f, year, month); if (target == null) target = row.createCell(yoyCol); // æ¯çææ°æä»½ç忝ååæäºæ®éæ°å¼æ ¼å¼ï¼æ¾ç¤ºæå°æ°ï¼ï¼ç»ä¸æ²¿ç¨ä¸æåæ¯åçæ ·å¼ï¼ç¾åæ°ï¼ if (prev.getCellStyle() != null) target.setCellStyle(prev.getCellStyle()); @@ -615,6 +615,250 @@ return sb.toString(); } /** å ¬å¼å A1 åå¼ç¨å¹é ï¼SUM ç彿°ååæ æ°åï¼ä¸ä¼è¢«å¹é ï¼ */ private static final java.util.regex.Pattern A1_REF = java.util.regex.Pattern.compile("(?<![A-Za-z0-9_$])([$]?)([A-Z]{1,3})([$]?)([0-9]+)"); /** â2025å¹´8æâ è¿ç§åæè¡¨å¤´ */ private static final java.util.regex.Pattern YM_HEADER = java.util.regex.Pattern.compile("^(\\d{4})å¹´(\\d{1,2})æ$"); /** â2025å¹´1-7æç´¯è®¡â è¿ç§åºé´ç´¯è®¡è¾ å©åï¼ä¸å±äºä»»ä½åæï¼ */ private static final java.util.regex.Pattern YM_RANGE_CUM = java.util.regex.Pattern.compile("^\\d{4}å¹´\\d{1,2}-\\d{1,2}æç´¯è®¡$"); /** A1 å忝 -> 0 åºåå·ï¼ä¸ POI ç Cell.getColumnIndex() 对é½ï¼A=0ãAJ=35ï¼ */ private int colIndexOf(String letters) { int idx = 0; for (int i = 0; i < letters.length(); i++) idx = idx * 26 + (letters.charAt(i) - 'A' + 1); return idx - 1; } /** 0 åºåå· -> "Q" */ private String colLettersOf(int idx0) { StringBuilder sb = new StringBuilder(); int n = idx0 + 1; while (n > 0) { int rem = (n - 1) % 26; sb.insert(0, (char) ('A' + rem)); n = (n - 1) / 26; } return sb.toString(); } /** 表头ï¼å 5 è¡ï¼å»ºç« (å¹´*100+æ) -> åå·ï¼0 åºï¼ï¼è¯å« â2025å¹´8æâ ææ¬æ ¼ä¸ 2025-08-01 è¿ç±»æ¥ææ ¼ï¼ * åä¸ (å¹´,æ) åæå·¦ä¸åï¼â2025å¹´1-7æç´¯è®¡â è¿ç±»åºé´ç´¯è®¡è¾ å©åä¸å±äºä»»ä½åæï¼ä¸å䏿 å° */ private Map<Integer, Integer> yearMonthCols(Sheet sh, int year) { Map<Integer, Integer> m = new LinkedHashMap<>(); if (sh == null) return m; int last = Math.min(sh.getLastRowNum(), sh.getFirstRowNum() + 4); for (int r = sh.getFirstRowNum(); r <= last; r++) { Row row = sh.getRow(r); if (row == null) continue; for (int c = row.getFirstCellNum(); c >= 0 && c < row.getLastCellNum(); c++) { Integer ym = yearMonthOf(row.getCell(c), year); if (ym != null && !m.containsKey(ym)) m.put(ym, c); } } return m; } /** * å个æä»½è¡¨å¤´ -> å¹´*100+æï¼åªè®¤ä»å¹´/å»å¹´ï¼å ¶ä½ä¸å¾ä¸è®¤ï¼é¿å æ 2024/2023 对æ¯åãææ ¼å½æä»½åï¼ã * 两ç§åæ³ï¼ææ¬ â2026å¹´8æâï¼æ°å¼æ¥æåºåï¼æ¯çåå¸å®¢è¿é¡µ 3..8 æçè¡¨å¤´æ¯ 46235 è¿ç§è£¸åºåã * æ°åæ ¼å¼è¿æ¯ Generalï¼åªæâ彿 1 å·â夿ï¼ä¸è½ä¾èµ isCellDateFormattedï¼ã */ private Integer yearMonthOf(Cell cell, int year) { if (cell == null) return null; org.apache.poi.ss.usermodel.CellType t = cell.getCellType(); if (t == org.apache.poi.ss.usermodel.CellType.STRING) { String v = cell.getStringCellValue(); if (v == null || v.isEmpty()) return null; v = v.trim(); if (v.contains("累计") || v.contains("忝")) return null; java.util.regex.Matcher m = YM_HEADER.matcher(v); if (!m.matches()) return null; int y = Integer.parseInt(m.group(1)); if (y != year && y != year - 1) return null; return y * 100 + Integer.parseInt(m.group(2)); } if (t == org.apache.poi.ss.usermodel.CellType.NUMERIC) { double v = cell.getNumericCellValue(); if (v < 1 || v > 200000) return null; try { java.util.Calendar cal = java.util.Calendar.getInstance(); cal.setTime(org.apache.poi.ss.usermodel.DateUtil.getJavaDate(v)); if (cal.get(java.util.Calendar.DAY_OF_MONTH) != 1) return null; int y = cal.get(java.util.Calendar.YEAR); if (y != year && y != year - 1) return null; return y * 100 + (cal.get(java.util.Calendar.MONTH) + 1); } catch (Exception ignore) { return null; } } return null; } /** 表头é â20XXå¹´a-bæç´¯è®¡â è¿ç±»åºé´ç´¯è®¡è¾ å©åç 0 åºåå·éå */ private java.util.Set<Integer> cumulativeHelperCols(Sheet sh) { java.util.Set<Integer> set = new java.util.HashSet<>(); if (sh == null) return set; int last = Math.min(sh.getLastRowNum(), sh.getFirstRowNum() + 4); for (int r = sh.getFirstRowNum(); r <= last; r++) { Row row = sh.getRow(r); if (row == null) continue; for (int c = row.getFirstCellNum(); c >= 0 && c < row.getLastCellNum(); c++) { Cell cell = row.getCell(c); if (cell == null || cell.getCellType() != org.apache.poi.ss.usermodel.CellType.STRING) continue; String v = cell.getStringCellValue(); if (v != null && YM_RANGE_CUM.matcher(v.trim()).matches()) set.add(c); } } return set; } /** æä»½æ å°çå¯ç¨æ§å®å«ï¼å»å¹´ä¸ä»å¹´ 1..month åæåå¿ é¡»é½å ¨ä¸åå·ä¸¥æ ¼éå¢ï¼ * ä»»ä¸ä¸æ»¡è¶³ï¼è¡¨å¤´æ²¡åæä»½ãææå°ææ ¼ï¼å°±è¿å空表ï¼è°ç¨æ¹éåãæ´ä½å³ç§» 2 åãçæ§è¡ä¸º */ private Map<Integer, Integer> usableMonthCols(Sheet sh, int year, int month) { Map<Integer, Integer> usable = new LinkedHashMap<>(); Map<Integer, Integer> all = yearMonthCols(sh, year); int prevLy = -1, prevCy = -1; for (int m = 1; m <= month; m++) { Integer ly = all.get((year - 1) * 100 + m); Integer cy = all.get(year * 100 + m); if (ly == null || cy == null || ly <= prevLy || cy <= prevCy) return new LinkedHashMap<>(); prevLy = ly; prevCy = cy; usable.put((year - 1) * 100 + m, ly); usable.put(year * 100 + m, cy); } return usable; } /** * ã䏿忝ãå ¬å¼ â ãæ¬æåæ¯ãå ¬å¼ï¼å ¬å¼éå¼ç¨å°æä»½åçå¼ç¨æè¡¨å¤´ (å¹´,æ) 顺延ä¸ä¸ªæï¼ * å ¶ä½å¼ç¨éåãæ´ä½å³ç§» 2 åãã * * 为ä»ä¹ä¸è½ä¸å¾å³ç§» 2 åï¼æ¯çãåå¸å®¢è¿ãé¡µå¨ 2025 年段æäºä¸åã2025å¹´1-7æç´¯è®¡ãè¾ å©åï¼ * 2025 åæåä» 8 æèµ·ä¸åçè·ï¼2025å¹´8æå¨ AKãä¸å¨ AJï¼ï¼å³ç§» 2 åä¼è½å°è¾ å©åä¸ï¼ * äºæ¯ 8 æåæ¯è¢«ç®æã8æå¼ ÷ 2025å¹´1-7æç´¯è®¡ â 1ãï¼2026-09-20 ç¨æ·ä¸æ¥çé®é¢ï¼ã */ private String shiftFormulaToNextMonth(Sheet sh, String formula, int year, int month) { if (formula == null || formula.isEmpty()) return formula; Map<Integer, Integer> cols = usableMonthCols(sh, year, month); if (cols.isEmpty()) return shiftFormulaColumns(formula, 2); Map<Integer, Integer> colToYm = new LinkedHashMap<>(); for (Map.Entry<Integer, Integer> e : cols.entrySet()) colToYm.put(e.getValue(), e.getKey()); java.util.regex.Matcher m = A1_REF.matcher(formula); StringBuffer sb = new StringBuffer(); while (m.find()) { int idx = colIndexOf(m.group(2)); Integer ym = colToYm.get(idx); Integer next = null; if (ym != null) { next = cols.get((ym / 100) * 100 + (ym % 100) + 1); } m.appendReplacement(sb, java.util.regex.Matcher.quoteReplacement( m.group(1) + colLettersOf(next != null ? next : idx + 2) + m.group(3) + m.group(4))); } m.appendTail(sb); return sb.toString(); } /** * ä¿®æ£ãç´¯è®¡åæ¯ãåæ¯ãæ¯çãåå¸å®¢è¿ã页æ 2025 å¹´ 1..M æåæå**å**å®ä»¬ç * ã2025å¹´1-Mæç´¯è®¡ãè¾ å©åä¸èµ·åè¿åæ¯ï¼1..M-1 æéå¤è®¡ä¸æ¬¡ã彿æ¼è®¡ï¼ï¼ * 妿卿¯çéå æè¾ å©ååæ®ç #REF! çæ å½¢ï¼ä¸¤ç§é½ä¼è®©ç´¯è®¡åæ¯ä¸¥é失ç * ï¼2026-09-20 ç¨æ·ä¸æ¥ï¼åå¸å®¢è¿ 8 æåæ¯ â86.5%ãç´¯è®¡åæ¯ â43.5%ï¼ã * ç»ä¸æè¡¨å¤´æåæ¯éå为ãå»å¹´ 1..彿 åæå¼åä¹åãã * * 2026-09-20 å·²å¨ã2026å¹´8æéè·¯è¿è¾éæ±æ»è¡¨.xlsxãæ¯çéå æè¯¥è¾ å©åï¼å¤ä»½è§ * docs/çææ±æ»å¤§è¡¨/_bak_202608æ¯çå é¤AJåå_20260920.xlsxï¼ï¼æ£å¸¸æ 嵿¬æ¹æ³å½ä¸ 0 æ ¼ï¼ * ä¿ç宿¯ä¸ºäºå ä½ãåæå¤ä»½æ¯ç / åå²é¨ç½²å / ä¹ååæäºè¾ å©åçæ¯çãè¿ç±»æ åµã */ public int repairCumulativeYoyFormulas(XSSFWorkbook wb, int year, int month) { if (wb == null || month < 1) return 0; int fixed = 0; for (int i = 0; i < wb.getNumberOfSheets(); i++) { Sheet sh = wb.getSheetAt(i); if (sh == null || !isMonthLedgerSheet(sh.getSheetName())) continue; int[] cum = cumulativeCols(sh, year); if (cum == null) continue; java.util.Set<Integer> helperCols = cumulativeHelperCols(sh); Map<Integer, Integer> all = yearMonthCols(sh, year); List<Integer> lastYearValueCols = new ArrayList<>(); int prev = -1; for (int m = 1; m <= month; m++) { Integer c = all.get((year - 1) * 100 + m); if (c == null || c <= prev) { lastYearValueCols.clear(); break; } prev = c; lastYearValueCols.add(c); } if (lastYearValueCols.isEmpty()) continue; for (int r = sh.getFirstRowNum(); r <= sh.getLastRowNum(); r++) { Row row = sh.getRow(r); if (row == null) continue; Cell cc = row.getCell(cum[1]); if (cc == null || cc.getCellType() != org.apache.poi.ss.usermodel.CellType.FORMULA) continue; String f = cc.getCellFormula(); if (f == null || !cumulativeYoyBroken(f, helperCols)) continue; // 注æï¼POI ç setCellFormula 䏿¥å以 "=" å¼å¤´çå ¬å¼ä¸²ï¼ä¼æ FormulaParseExceptionï¼ StringBuilder sb = new StringBuilder(); sb.append(cellRef(cum[0], r + 1)).append("/("); for (int k = 0; k < lastYearValueCols.size(); k++) { if (k > 0) sb.append('+'); sb.append(cellRef(lastYearValueCols.get(k), r + 1)); } sb.append(")-1"); try { cc.setCellFormula(sb.toString()); fixed++; } catch (Exception ex) { // 个å«å ¬å¼æ¹å失败ä¸é»å¡å¯¼åºï¼æå¼æ¶ä»æåå ¬å¼éç®ï¼ if (log != null) log.warn("ç´¯è®¡åæ¯å ¬å¼æ¹å失败ï¼sheet={} cell={} åå¼={} æ°å¼={}ï¼{}ï¼", sh.getSheetName(), cellRef(cum[1], r + 1), f, sb, ex.toString()); } } } if (fixed > 0 && log != null) { log.info("æ±æ»å·¥ä½ç°¿ï¼ç´¯è®¡åæ¯åæ¯ä¿®æ£ {} æ ¼ï¼ç¬¬ {} æï¼åæ¯åå»å¹´ 1..{} æåæå¼åï¼", fixed, month, month); } return fixed; } /** ç´¯è®¡åæ¯å ¬å¼æ¯å¦âåäºâï¼å« #REF!ï¼æåæ¯å¼ç¨äºåºé´ç´¯è®¡è¾ å©åï¼ä¸åæåéå¤è®¡å ¥ï¼ */ private boolean cumulativeYoyBroken(String formula, java.util.Set<Integer> helperCols) { if (formula.contains("#REF!")) return true; java.util.regex.Matcher m = A1_REF.matcher(formula); while (m.find()) { if (helperCols.contains(colIndexOf(m.group(2)))) return true; } return false; } /** 该页ã累计 / ç´¯è®¡åæ¯ã两åï¼0 åºï¼ï¼æè¡¨å¤´å 5 è¡æ¾ âç´¯è®¡â æ â{year}年累计âï¼ä¸å ¶å³åå« â忝â */ private int[] cumulativeCols(Sheet sh, int year) { int last = Math.min(sh.getLastRowNum(), sh.getFirstRowNum() + 4); for (int r = sh.getFirstRowNum(); r <= last; r++) { Row row = sh.getRow(r); if (row == null) continue; for (int c = row.getFirstCellNum(); c >= 0 && c < row.getLastCellNum(); c++) { Cell cell = row.getCell(c); if (cell == null || cell.getCellType() != org.apache.poi.ss.usermodel.CellType.STRING) continue; String v = cell.getStringCellValue(); if (v == null) continue; v = v.trim(); if (!"累计".equals(v) && !(year + "年累计").equals(v)) continue; Cell nxt = row.getCell(c + 1); if (nxt == null || nxt.getCellType() != org.apache.poi.ss.usermodel.CellType.STRING) continue; String nt = nxt.getStringCellValue(); if (nt != null && nt.contains("忝")) return new int[]{c, c + 1}; } } return null; } /** æä»½å®¹éï¼ä¼å å表头ï¼å 5 è¡ï¼â2026â¦ç´¯è®¡âå忍ï¼è´§è¿é¡µæ è¯¥ææ¡ï¼ * åç¨è¡¨å¤´éæåä¸ä¸ªâ2026å¹´Mæâ/æ¥ææ ¼å¼çæåå åºï¼å¦è´§è¿ Q3=2026-08-01 -> 8ï¼ */ private int monthColumnCapacity(Sheet sh) { traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
@@ -3546,13 +3546,15 @@ int dbFilled = summaryWorkbookFiller.fillMonthlyLedger(wb, effPeriod, year, effMonth, dbProblems); int yoyFilled = summaryWorkbookFiller.ensureMonthYoyFormulas(wb, year, effMonth); int monthFormulaFilled = summaryWorkbookFiller.ensureMonthFormulas(wb, year, effMonth); // ç´¯è®¡åæ¯åæ¯ä¿®æ£ï¼æ¯çæãå»å¹´åæãä¸ãå»å¹´1-Mæç´¯è®¡ãè¾ å©ååæ¶è®¡å ¥ï¼éå¤è®¡/æ¼å½æï¼ int cumYoyFixed = summaryWorkbookFiller.repairCumulativeYoyFormulas(wb, year, effMonth); int rankRefreshed = refreshSummaryRankSheets(wb, effPeriod, "month"); int cumulativeRefreshed = refreshSummaryCumulativeSheets(wb, year, effMonth); // åå¼ è·¨é¡µåæé¡µéæ¥è¡¨æå·æ° int widthApplied = applySummaryReferenceLayout(wb); log.info("æ±æ»å·¥ä½ç°¿æ°æ®é©±å¨å填宿ï¼åå ¥å½æå¼æ ¼æ°={}ï¼è¡¥åå½æåæ¯å ¬å¼æ ¼æ°={}ï¼è¡¥å彿åè®¡å ¬å¼æ ¼æ°={}ï¼" + "å·æ°æå页æ°å¼æ ¼æ°={}ï¼å·æ°å页ï¼å叿±æ»/åå¸åå¸å·/ä¸å£å¾åæ/éè·¯è¿è¾å¨è½¬éï¼æ°å¼æ ¼æ°={}ï¼" + "ä¿®æ£ç´¯è®¡åæ¯åæ¯æ ¼æ°={}ï¼å·æ°æå页æ°å¼æ ¼æ°={}ï¼å·æ°å页ï¼å叿±æ»/åå¸åå¸å·/ä¸å£å¾åæ/éè·¯è¿è¾å¨è½¬éï¼æ°å¼æ ¼æ°={}ï¼" + "æãçæ_éè·¯è¿è¾éæ±æ»è¡¨ã对é½å宽忰={}ï¼ç¼ºæ°æç¤º={}", dbFilled, yoyFilled, monthFormulaFilled, rankRefreshed, cumulativeRefreshed, widthApplied, dbProblems); dbFilled, yoyFilled, monthFormulaFilled, cumYoyFixed, rankRefreshed, cumulativeRefreshed, widthApplied, dbProblems); applyTwoDecimalFormat(wb); // æ°å¼æ¾ç¤ºä¸¤ä½å°æ°ï¼ä¿çå ¨ç²¾åº¦ï¼ï¼% / æ¥æçæ¢ææ ·å¼ä¸æ¹å int inlineFixed = normalizeStaleInlineStrings(wb); // æ¸ æãé inlineStr å´æ®ç <is>ãçéæ³æ ¼ï¼å¦å Excel æç»æå¼ if (inlineFixed > 0) log.warn("æ±æ»å·¥ä½ç°¿æ¸ ææ®ç inlineStr éæ³æ ¼ {} ä¸ªï¼æ¯çç± openpyxl ååºæ¶çå ¸åé®é¢ï¼", inlineFixed); @@ -5428,6 +5430,7 @@ hssfText(row, 0, "å计"); InvestAgg prov = new InvestAgg(); for (InvestmentMonthly m : monthlies) prov.add(m, pmap.get(m.getProjectId())); addProjectsWithoutMonthly(prov, projects, mByProject, null, null); writeInvestAggHssf(row, prov); continue; } @@ -5440,6 +5443,7 @@ InvestmentProject p = pmap.get(m.getProjectId()); if (p != null && blockCategory.equals(p.getCategory())) agg.add(m, p); } addProjectsWithoutMonthly(agg, projects, mByProject, blockCategory, null); writeInvestAggHssf(row, agg); seq = 0; continue; @@ -5468,6 +5472,7 @@ if (p != null && city.equals(p.getCity()) && (blockCategory == null || blockCategory.equals(p.getCategory()))) agg.add(m, p); } addProjectsWithoutMonthly(agg, projects, mByProject, blockCategory, city); writeInvestAggHssf(row, agg); continue; } @@ -5515,6 +5520,24 @@ if (agg.yearPlan > 0) hssfNum(row, 23, agg.yearCum / agg.yearPlan); } /** * è¡¥è®¡ãæ¬ææ²¡ææåº¦è®°å½ãä½é¡¹ç®ä¸»æ¡£ææ»æèµãç项ç®ï¼åªè®¡æ»æèµè¿ä¸åï¼ã * åºæ¯ï¼æå¸å·æ¬ææªæ¥éå表ï¼å¦æ¦æ± 8 æç©æµï¼ï¼ä¸»æ¡£é项ç®ä»å¨ï¼è¥ä¸è¡¥è®¡ï¼è¯¥å¸å·å°è®¡/åè®¡ä¼æ´å为空ã * * @param category åç±»å«ï¼å®¢è¿ç«åº/ç©æµååºï¼ï¼null 表示ä¸é * @param city å¸å·å ¨ç§°ï¼å¦ æ¦æ±å¸ï¼ï¼null 表示ä¸é */ private void addProjectsWithoutMonthly(InvestAgg agg, List<InvestmentProject> projects, Map<Long, InvestmentMonthly> mByProject, String category, String city) { for (InvestmentProject p : projects) { if (p == null || mByProject.containsKey(p.getId())) continue; if (category != null && !category.equals(p.getCategory())) continue; if (city != null && !city.equals(p.getCity())) continue; if (p.getTotalInvestment() != null) agg.total += p.getTotalInvestment(); } } // ==================== æèµæ¨¡åï¼å®¢è¿ç«æèµæç»è¡¨ / ç©æµç«åºæèµæç»ï¼æ¨¡æ¿åºç¨¿å使¿æ¢ï¼ ==================== traffic-audit-web/src/views/ReportExport.vue
@@ -420,28 +420,28 @@ { name: 'é路货è¿', rows: mk([ ['å½æè´§è¿é(ä¸å¨)', 'å ¨çè´§è¿éÂ·å½æ'], ['å½æè´§ç©å¨è½¬é(ä¸å¨)', 'å ¨çè´§ç©å¨è½¬éÂ·å½æ', 'å ¨çè´§ç©å¨è½¬éÂ·å½æåæ¯'], ['累计货è¿é(ä¸å¨)', 'å ¨çè´§è¿é·累计'], ['å½æè´§è¿é(ä¸å¨)', 'å ¨çè´§è¿éÂ·å½æ', 'å ¨çè´§è¿éÂ·å½æåæ¯'], ['å½æè´§ç©å¨è½¬é(ä¸å¨å ¬é)', 'å ¨çè´§ç©å¨è½¬éÂ·å½æ', 'å ¨çè´§ç©å¨è½¬éÂ·å½æåæ¯'], ['累计货è¿é(ä¸å¨)', 'å ¨çè´§è¿é·累计', 'å ¨çè´§è¿éÂ·ç´¯è®¡åæ¯'], ['累计货ç©å¨è½¬é(ä¸å¨å ¬é)', 'å ¨çè´§ç©å¨è½¬é·累计', 'å ¨çè´§ç©å¨è½¬éÂ·ç´¯è®¡åæ¯'] ]) }, { name: 'åå¸å®¢è¿', rows: mk([ ['彿åå¸å®¢è¿é:', 'åå¸å®¢è¿éÂ·å½æ'], ['彿åå¸å®¢è¿å¨è½¬é', 'åå¸å®¢è¿å¨è½¬éÂ·å½æ'], ['累计åå¸å®¢è¿é:', 'åå¸å®¢è¿é·累计'], ['累计åå¸å®¢è¿å¨è½¬é', 'åå¸å®¢è¿å¨è½¬é·累计'] ['彿åå¸å®¢è¿é', 'åå¸å®¢è¿éÂ·å½æ', 'åå¸å®¢è¿éÂ·å½æåæ¯'], ['彿åå¸å®¢è¿å¨è½¬é', 'åå¸å®¢è¿å¨è½¬éÂ·å½æ', 'åå¸å®¢è¿å¨è½¬éÂ·å½æåæ¯'], ['累计åå¸å®¢è¿é', 'åå¸å®¢è¿é·累计', 'åå¸å®¢è¿éÂ·ç´¯è®¡åæ¯'], ['累计åå¸å®¢è¿å¨è½¬é', 'åå¸å®¢è¿å¨è½¬é·累计', 'åå¸å®¢è¿å¨è½¬éÂ·ç´¯è®¡åæ¯'] ]) }, { name: 'ä¸å£å¾', rows: mk([ ['彿ä¸å£å¾å®¢è¿é', 'ä¸å£å¾å®¢è¿éÂ·å½æ'], ['彿ä¸å£å¾å¨è½¬é', 'ä¸å£å¾å¨è½¬éÂ·å½æ'], ['累计ä¸å£å¾å®¢è¿é', 'ä¸å£å¾å®¢è¿é·累计'], ['累计ä¸å£å¾å¨è½¬é', 'ä¸å£å¾å¨è½¬é·累计'] ['彿ä¸å£å¾å®¢è¿é', 'ä¸å£å¾å®¢è¿éÂ·å½æ', 'ä¸å£å¾å®¢è¿éÂ·å½æåæ¯'], ['彿ä¸å£å¾å¨è½¬é', 'ä¸å£å¾å¨è½¬éÂ·å½æ', 'ä¸å£å¾å¨è½¬éÂ·å½æåæ¯'], ['累计ä¸å£å¾å®¢è¿é', 'ä¸å£å¾å®¢è¿é·累计', 'ä¸å£å¾å®¢è¿éÂ·ç´¯è®¡åæ¯'], ['累计ä¸å£å¾å¨è½¬é', 'ä¸å£å¾å¨è½¬é·累计', 'ä¸å£å¾å¨è½¬éÂ·ç´¯è®¡åæ¯'] ]) } ] @@ -629,4 +629,4 @@ .pv-dialog { border-radius: 10px; overflow: hidden; } .pv-dialog .el-dialog__header { cursor: move; user-select: none; -webkit-user-select: none; } .pv-dialog .el-dialog__headerbtn { cursor: pointer; } </style> </style>