From a9caf6e7c0ce5fd36c2eb38c27ea709e1091020b Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 2 Mar 2026 16:29:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extractor_rules.cpython-39.pyc | Bin 4462 -> 5568 bytes .../realtime_conflict_service.cpython-39.pyc | Bin 11489 -> 15012 bytes crawler/extractor_rules.py | 56 ++++++++++++-- crawler/realtime_conflict_service.py | 36 ++++++++- package-lock.json | 6 ++ package.json | 1 + server/data.db-shm | Bin 0 -> 32768 bytes server/data.db-wal | Bin 0 -> 1582112 bytes server/seed.js | 13 +++- server/situationData.js | 2 +- src/components/IranBaseStatusPanel.tsx | 72 ++++++++++++++++++ src/components/NewsTicker.tsx | 56 ++++++++++++++ src/components/TimelinePanel.tsx | 13 ++++ src/index.css | 6 ++ src/pages/Dashboard.tsx | 7 +- src/store/situationStore.ts | 2 +- src/utils/tickerText.ts | 35 +++++++++ tailwind.config.js | 5 ++ 18 files changed, 295 insertions(+), 15 deletions(-) create mode 100644 server/data.db-shm create mode 100644 server/data.db-wal create mode 100644 src/components/IranBaseStatusPanel.tsx create mode 100644 src/components/NewsTicker.tsx create mode 100644 src/utils/tickerText.ts diff --git a/crawler/__pycache__/extractor_rules.cpython-39.pyc b/crawler/__pycache__/extractor_rules.cpython-39.pyc index 52ddb935b73beafae40ec6ed92d206504a9da677..64d4792e383ec4f8f2155b36aedc4e4fa1f2741c 100644 GIT binary patch delta 2663 zcmai0Yitx%6rP!#eLvcYlnUFjB9Cs1AXq_bu^<&hkZ3hAj@4$`JFw$!r}fTGi{>^9 zR^(-6$?!5%-SUt|LMRrbrKS4IUz!-=FB1QCwrpbjVMzRAjAtG@>}Z2+a_%?hJLfy+ z+;h|P_a)!gNBD3!K*3MVwhQ7L)mJ0mGK|ly{=n?W5H{yU?qM3S3WYn;o`V$f3@{Rd z*nSW3fS1O-#6wu*ZlVmLZx#>;IAsi8~lP2Ee1CjT$QzqM@qR2e#IacTI8Zq z5~mC<+C-u1gH$h-W#ql6#zc4uEw+3kC}yKaZM38qXAH1#n1<{r^cV~UwQRl2&z7JI z$IwzE#U+Q(G8-+o(Fz;Y+9+-!95aeUp@>V48AYIJ<0k4#26Ev&sNTwLMJsibfrM7{ zxFw^%02ZxkqNFHVZTWh@=Qe!iqXX6ue!?LfD(K-XMIDpm@20cB*5Eps|vKmdlyahdLqb3_| zu+eiiYSvLE%i`BTXd~KWNIh@whLsc6YS``^+H9uv z5^vUx+1*sXZ#RWrI7|2YiNA$1+#KG?mG=l(?v^AW)t(enDFG=pkpAE-Wz&B{ zYMUEP?F`Y+Gq<2j;q;f*hu#51fQ-||Ir|fG`8t3f9j3VY?&NKHQb6lBS!DF_sZub4! zJlDk9#8`gxn0Y_uQiyp?ajvXW>=jcYFIlTmWBzsOZhs@qsb~Fff&JUCT%a|=xe{WU z^T=tebS63VX5hne&c}BNSnTAb4_wMBnNxQJ-wblTJ|4>nu?N0KgKJ}o2PW5!4r&J` z3)=z4nLF-YKBWkE*tFOsaO$7I*7_I_crh3**vF?*?NCJ!pcQE>Ob|O>J|CO=JVuwn%j*YP6z6 z;LvVd%YSi-bnpqxixRe&a$sgJ9@9ql%^sQ{Nu`e$(?w42v~c=6J@Mp~{P-2ZcXaSF zC`gFMG2;VQn+0?kZTd!G@|d=Nl%xfyApw`sFG8u%$?<`i$-Ua>anhm43E+#FdLR0Z zp~BdS*;^-wDDUDEyhH@^EXEm)-W=0D|4Q3GK_os6>nL(%pfP)OY!>M80n#N(e1}P8 z7)9r_!QuRoL)ztYB*|m`-D288o!Wl{n#!M<%763O-RqY~QovojBq!jOtkLG_QRgqt zj1LwLe4?GZMAD!x+O>7MFf^!(42|fmCAx8!V$z-Jwa7bkPMue_W&^w;W6J_6Fpv^w zxv&K9sy!*Z-`9W1)1~1as;^@9v0_H_Q|*oB5|c|mZ~k~vCK3;imjwsI>ZEA0on(@ zQNxYv?M#KKRE% O{iA#<-JmvBH2ecnl}hda delta 1528 zcmY+ET}&KR6vyYz?8oc}vje+OY$;M)DGP|U#kRCd{UT~o;h{cRH8^lan6NDL&hC;n zce^SkU9k_u`=E)WfhL;xsL}eMHcd>7iD-Aa1wVg}e&WPBJ~!^D>XycTP+zK*B6S5KD{3{uA`mJQ3M|4x5Y8)7 zi8d+MrK0;vtV#I@m2glKZ&JQEpd^}EUg1^qz*5(}-V^d<{2Z9|8gqim|s zi`g({Z?kYywht#W;9u(=3_(($62MS z&nj^KHmSx~Y+QLg|C(BjR}-b!4dqP&c^G?FXYq|VT-YSz$_iN_SjCvWkzjF_fT!ST zcxFAcNeK44f_cxA=`5kavp7EOWhM6<|1G-8tr$&D3UkS(?qacM7pCT&Lcs?9d+hzR zXx&dQFP4jd`9I@-@c$C0(;_wFRGfli75$29XE{ms^Qojs1Yb(Nig8QE{+3II(B_=d z<%nCN<(YZG>n-n?Lbn!d>daWhYg&2O75uRAN78OP#^^Pih3?fO!<-i>Aj_vmfK9W*^3% z%^b#m&9PD6vJEYFzxsH){@LzZcbIEkEjU-LIqIv1-|*Il*lmtlP7%8;v>ri^pW3EL zg%77swBan|wQabsdiM+oekGkbByeC>sqBg*SPRyyJyozPc0usZ+;c3CY zPhZ4or!qrX5iKu)RkGd7`n2WR?i3bl^UE$hj|XXo7f$gvGCicu-_E3u#fgqz8MP+f p&+xx8V_n_EAbDbhCP{>ZRNYLHZqkXYt8{{ox4%Fp_|5i_{{czkz-Ise diff --git a/crawler/__pycache__/realtime_conflict_service.cpython-39.pyc b/crawler/__pycache__/realtime_conflict_service.cpython-39.pyc index 716af21c71c668c0cc60e06ca5b887c5b03d67b1..438cbafc7d3f5a5fe4b2e00cf2cfc7a6d4be2fd9 100644 GIT binary patch delta 7040 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 A(EtDd delta 3465 zcmZuzYfN0%5x(c{vb!v>JPgKQ8|-4hiveSU4aPjo!zm8N4*V^f=K$B-ePr%k zY*Q?p;<&1sw6sS`qt-qCp*Z@(2Z+PKaS-(kFiAHh|-2wgdhoTDi3bMl`B-(UFy zhK;iuY+1`hxqer>r`^zbU|C<(VBa$1!EWsa;{|Hnf$NZ3hiUDO@yO5RYH#eKEnz<*7DdW4ZSF^NlxHUe6rm8h z2#z86#db1dB|Otjq(ML@?X2(vbHejWJ+M+PS{7#3vmF=ONk57{SSbOfWkUxs0~Ih5s6)8VpjSzJCbrv&^f^{? zhFb%-<@-Cn$9m)vRkNf#T{RLDUaz&zf<> zw~^&iL(*8ZI2r{TDYO#Gorre+yK9w|96&B!vkrLN3Fz|cYF(E(L zy*j#&NL6N(252Cllg`C;l@VwpPLkls^g;%C?-PGw{gpk>vw6BR%n?u~vDC6jXriS> zK#vUu2nGo*6U-CL5WIxoM*VxjiTx$4FW35-R99m^eTaI$J5L{zW>%~?zrg^2j(kr`Leownw zA%Ae7v2n*5yZ#2#ZWJ+X>9|+9T(ru(C=d5NsriosQ=v9;;;rQi% z9*r}<09)joFyx(h9gEA~#P`<#y)jrO$Vcx}whz80{}r#V0J6e-Y;j59dR8(MmrX6b zD=w*f1X+S&1S5h$Q`TV(mws5J7HvqUR7i|caSi)z!b^h*Sx2})@82kX%*B4I3jRA} zkLuqqpple;=ZQhl@=InRjYBIvo0flXXui@6uG)=yGXq>&a{+B}~Y?5LP zf=tFntW-kK^gIoahAnTkz;%Sk6ao<-*j-A{@+2eqpfmp8$KVm0@XAY(REhA zcCr}G%osbs;J)lW@=2(k3@ym^qlYSP5~*sMUIKQ4@5+UvGf&GDERyO~0%|^fMAcFn zr`{6rR7k%;l$tL=pk(83ff+N6ea1_BmXm8RPj(bPmcR*!6Wqi)@v?3|IsXNDwzG*n zkZz~hN}b7w;gpzlY?{cZ<)WM0+8m`G=hA1LHC>PGD@sksD30#UsWeRoL{VJ}P}%D& z_-}Y`eY`8kLaLe<gW9^Rd83ME%qcK>F(ThW8K! zFOeU0NND)%V(3RqWhtnK&?|Z2coBOjFCBNr-$D&|o8TRS$2C)w0Q{XrbJ1OZ`y~4j z0*?G26a6>}6aaXH@Uq;|o$dcQDHSMPoZFZ_Ka^0#2kNAEpWK`eA^ZXbOY)E1CtFAS zuxavi!ZdSHd6TwK(*39_JT7LftmDBbaTjH4PrQ^2`(Y Dict[str, A loss_us, loss_ir = {}, {} - # 美军人员伤亡 + # 美军人员伤亡(中文,优先匹配) + v = _first_int(t, r"造成\s*(\d+)\s*名?\s*美军\s*伤亡") + if v is not None: + loss_us["personnel_killed"] = v + v = _first_int(t, r"(\d+)\s*名?\s*美军\s*伤亡") if loss_us.get("personnel_killed") is None else None + if v is not None: + loss_us["personnel_killed"] = v + v = _first_int(t, r"(\d+)\s*名?\s*(?:美军|美国军队|美国)\s*(?:死亡|阵亡)") + if v is not None: + loss_us["personnel_killed"] = v + v = _first_int(t, r"(\d+)\s*名?\s*(?:美军|美国)\s*受伤") + if v is not None: + loss_us["personnel_wounded"] = v + v = _first_int(t, r"美军\s*伤亡\s*(\d+)") + if v is not None and loss_us.get("personnel_killed") is None: + loss_us["personnel_killed"] = v + + # 美军人员伤亡(英文) v = _first_int(t, r"(?:us|american|u\.?s\.?)[\s\w]*(?:say|report)[\s\w]*(\d+)[\s\w]*(?:troop|soldier|military)[\s\w]*(?:killed|dead)") if v is not None: loss_us["personnel_killed"] = v @@ -36,7 +53,18 @@ def extract_from_news(text: str, timestamp: Optional[str] = None) -> Dict[str, A if v is not None: loss_us["personnel_wounded"] = v - # 伊朗人员伤亡 + # 伊朗人员伤亡(中文) + v = _first_int(t, r"(\d+)\s*名?\s*伊朗\s*伤亡") + if v is not None: + loss_ir["personnel_killed"] = v + v = _first_int(t, r"(\d+)\s*名?\s*(?:伊朗|伊朗军队)\s*(?:死亡|阵亡)") + if v is not None: + loss_ir["personnel_killed"] = v + v = _first_int(t, r"(\d+)\s*名?\s*伊朗\s*受伤") + if v is not None: + loss_ir["personnel_wounded"] = v + + # 伊朗人员伤亡(英文) v = _first_int(t, r"(?:iran|iranian)[\s\w]*(?:say|report)[\s\w]*(\d+)[\s\w]*(?:troop|soldier|guard|killed|dead)") if v is not None: loss_ir["personnel_killed"] = v @@ -47,8 +75,11 @@ def extract_from_news(text: str, timestamp: Optional[str] = None) -> Dict[str, A if v is not None: loss_ir["personnel_wounded"] = v - # 平民伤亡(多不区分阵营,计入双方或仅 us 因多为美国基地周边) - v = _first_int(t, r"(\d+)[\s\w]*(?:civilian|civil)[\s\w]*(?:killed|dead)") + # 平民伤亡(中英文) + v = _first_int(t, r"(\d+)\s*名?\s*平民\s*(?:伤亡|死亡)") + if v is not None: + loss_us["civilian_killed"] = v + v = _first_int(t, r"(\d+)[\s\w]*(?:civilian|civil)[\s\w]*(?:killed|dead)") if loss_us.get("civilian_killed") is None else None if v is not None: loss_us["civilian_killed"] = v v = _first_int(t, r"(\d+)[\s\w]*(?:civilian|civil)[\s\w]*(?:wounded|injured)") @@ -87,7 +118,7 @@ def extract_from_news(text: str, timestamp: Optional[str] = None) -> Dict[str, A out.setdefault("combat_losses_delta", {})["us"] = loss_us if loss_ir: out.setdefault("combat_losses_delta", {})["iran"] = loss_ir - if "retaliat" in t or "revenge" in t or "报复" in t: + if "retaliat" in t or "revenge" in t or "报复" in t or "反击" in t: out["retaliation"] = {"value": 75, "time": ts} if "wall street" in t or " dow " in t or "s&p" in t or "market slump" in t or "stock fall" in t or "美股" in t: out["wall_street"] = {"time": ts, "value": 55} @@ -98,7 +129,7 @@ def extract_from_news(text: str, timestamp: Optional[str] = None) -> Dict[str, A if base_attacked: updates: list = [] # 常见美军基地关键词 -> name_keywords(用于 db_merge 的 LIKE 匹配) - bases_us = [ + bases_all = [ ("阿萨德|阿因|asad|assad|ain", "us"), ("巴格达|baghdad", "us"), ("乌代德|udeid|卡塔尔|qatar", "us"), @@ -113,8 +144,19 @@ def extract_from_news(text: str, timestamp: Optional[str] = None) -> Dict[str, A ("赛利耶|sayliyah", "us"), ("巴林|bahrain", "us"), ("科威特|kuwait", "us"), + # 伊朗基地 + ("阿巴斯港|abbas|bandar abbas", "iran"), + ("德黑兰|tehran", "iran"), + ("布什尔|bushehr", "iran"), + ("伊斯法罕|isfahan|esfahan", "iran"), + ("纳坦兹|natanz", "iran"), + ("米纳布|minab", "iran"), + ("卡拉季|karaj", "iran"), + ("克尔曼沙赫|kermanshah", "iran"), + ("大不里士|tabriz", "iran"), + ("霍尔木兹|hormuz", "iran"), ] - for kws, side in bases_us: + for kws, side in bases_all: if any(k in t for k in kws.split("|")): updates.append({"name_keywords": kws, "side": side, "status": "attacked", "damage_level": 2}) if updates: diff --git a/crawler/realtime_conflict_service.py b/crawler/realtime_conflict_service.py index 93f90f0..76b87c4 100644 --- a/crawler/realtime_conflict_service.py +++ b/crawler/realtime_conflict_service.py @@ -333,7 +333,7 @@ def _extract_and_merge_panel_data(items: list) -> None: from datetime import timezone merged_any = False # 规则模式可多处理几条(无 Ollama);AI 模式限制 5 条避免调用过多 - limit = 10 if os.environ.get("CLEANER_AI_DISABLED", "0") == "1" else 5 + limit = 25 if os.environ.get("CLEANER_AI_DISABLED", "0") == "1" else 10 for it in items[:limit]: text = (it.get("title", "") or "") + " " + (it.get("summary", "") or "") if len(text.strip()) < 20: @@ -383,6 +383,40 @@ async def _periodic_fetch() -> None: # ========================== # API 接口 # ========================== +@app.post("/crawler/backfill") +def crawler_backfill(): + """从 situation_update 重新解析并合并战损/报复等数据,用于修复历史数据未提取的情况""" + if not os.path.exists(DB_PATH): + return {"ok": False, "error": "db not found"} + try: + from db_merge import merge + if os.environ.get("CLEANER_AI_DISABLED", "0") == "1": + from extractor_rules import extract_from_news + else: + from extractor_ai import extract_from_news + conn = sqlite3.connect(DB_PATH, timeout=10) + rows = conn.execute( + "SELECT id, timestamp, category, summary FROM situation_update ORDER BY timestamp DESC LIMIT 50" + ).fetchall() + conn.close() + merged = 0 + for r in rows: + uid, ts, cat, summary = r + text = ((cat or "") + " " + (summary or "")).strip() + if len(text) < 20: + continue + try: + extracted = extract_from_news(text, timestamp=ts) + if extracted and merge(extracted, db_path=DB_PATH): + merged += 1 + except Exception: + pass + _notify_node() + return {"ok": True, "processed": len(rows), "merged": merged} + except Exception as e: + return {"ok": False, "error": str(e)} + + @app.get("/crawler/status") def crawler_status(): """爬虫状态:用于排查数据更新链路""" diff --git a/package-lock.json b/package-lock.json index 70559b0..22edd82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "express": "^4.21.1", "lucide-react": "^0.460.0", "mapbox-gl": "^3.6.0", + "opencc-js": "^1.0.5", "react": "^18.3.1", "react-dom": "^18.3.1", "react-map-gl": "^7.1.7", @@ -3885,6 +3886,11 @@ "wrappy": "1" } }, + "node_modules/opencc-js": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/opencc-js/-/opencc-js-1.0.5.tgz", + "integrity": "sha512-LD+1SoNnZdlRwtYTjnQdFrSVCAaYpuDqL5CkmOaHOkKoKh7mFxUicLTRVNLU5C+Jmi1vXQ3QL4jWdgSaa4sKjg==" + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz", diff --git a/package.json b/package.json index 3190439..c977cb4 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "express": "^4.21.1", "lucide-react": "^0.460.0", "mapbox-gl": "^3.6.0", + "opencc-js": "^1.0.5", "react": "^18.3.1", "react-dom": "^18.3.1", "react-map-gl": "^7.1.7", diff --git a/server/data.db-shm b/server/data.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..e9d50fa064289d495aacd8fff56ccb53bc96c297 GIT binary patch literal 32768 zcmeI*1#lKe7{>AcgS$&`*WeDp-QC^Y-JwR^-QC@tI@H~bmQr`44&58_4NL}7AVU(q zJ~#7b@Ah{0Zhw0>UnVp8-h{1niMC=P1clazAKkv)5aY=x+QK{yroED zfiX$j*Ciz!VEbt7Xp6?(xyQDv7AA)JXp4&0A=-p!n|vIV?LxFqE~7TleuogTw$XX- z?{c!k{yVe^&rMQ@s>x-Q6lJ}AoR8I~EMw!u%Gh{W!Z=an2~i+K!Q|uUS&r(X_pW$| z5+Ry}=oq3?h|VFpgy%}~xaSDZqT%x%}^--Df zIC72ZWA~oYEviq;eB5{c-;wmR3d`!v0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?D zU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzyfh8 z@E9-h)nPHSd>MR~B76AH{D*mt&-o*R@5Pt@zX?3S%Y2i8lfIYxc!-TW!?Qfko4myr z{KU^>R}SS--smeEyjkE72|URwe0zw-j;~>_=07)Q(4mo$$gmkT%5`*e98g`Bk4#^=L>Fn$s#|#%v!l z19qhcz3In5hA^B_jAa6onZ``!FrP&%Wd*BQ$B`Vvah%90oX%OC%LTm6dwj^pY~vU5 zsi2CexDr%GlRYSE^R}Iuy&D2t@)lMDNMcvg)eKkOXHB2KlM&mU}Q#C`gHBSq* zM9Z~GYY&r8*YsOUU+F*vvWDE4g+ngPl9Z+#6+>3Y>eQkR^=U*?T7*oUZ9~@A&LIZ%^Fr`|cq9kL=930aU6C_{NFh1|e3s7+lO z&^Y8oZW;3ZwhMWYyM(;tz39sT1~ZJ2jA1;Jn92-hGmnKVVL7W<%Ml#Sv7ErkoW_}) z!}(mqyL`Y$e8OjJr+^Bpm`bX&%BiBNsJd#Yj_RwCnyQ78)K(qTS>4oAebirrG*lxr sTH`cPQ#4((G*=6>Sj)6hYZPTQ_m=qt9?g8Ww2wQ=Mc#d!NuTO}0YsM@{r~^~ literal 0 HcmV?d00001 diff --git a/server/data.db-wal b/server/data.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..3c346080ee6fec2e833dac17b6e75ba549506b55 GIT binary patch literal 1582112 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/J>Rx!=|f+?H&Y@eZz{6f^ulD^kI1<;1D2BlR`b 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 g$7Ebj} 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 O1PBl)5=c6NS^ozr_}rfW literal 0 HcmV?d00001 diff --git a/server/seed.js b/server/seed.js index ffbd74a..83a70be 100644 --- a/server/seed.js +++ b/server/seed.js @@ -134,9 +134,16 @@ function seed() { insertLoc.run('us', loc.name, loc.lat, loc.lng, loc.type, loc.region, loc.status, loc.damage_level) } const iranLocs = [ - ['iran', '阿巴斯港', 27.1832, 56.2666, 'Port', '伊朗', null, null], - ['iran', '德黑兰', 35.6892, 51.389, 'Capital', '伊朗', null, null], - ['iran', '布什尔', 28.9681, 50.838, 'Base', '伊朗', null, null], + ['iran', '阿巴斯港海军司令部', 27.18, 56.27, 'Port', '伊朗', 'attacked', 3], + ['iran', '德黑兰', 35.6892, 51.389, 'Capital', '伊朗', 'attacked', 3], + ['iran', '布什尔核电站', 28.9681, 50.838, 'Nuclear', '伊朗', 'attacked', 2], + ['iran', '伊斯法罕核设施', 32.654, 51.667, 'Nuclear', '伊朗', 'attacked', 2], + ['iran', '纳坦兹铀浓缩', 33.666, 51.916, 'Nuclear', '伊朗', 'attacked', 2], + ['iran', '米纳布岸防', 27.13, 57.08, 'Base', '伊朗', 'damaged', 2], + ['iran', '卡拉季无人机厂', 35.808, 51.002, 'Base', '伊朗', 'attacked', 2], + ['iran', '克尔曼沙赫导弹阵地', 34.314, 47.076, 'Missile', '伊朗', 'attacked', 2], + ['iran', '大不里士空军基地', 38.08, 46.29, 'Base', '伊朗', 'damaged', 1], + ['iran', '霍尔木兹岸防阵地', 27.0, 56.5, 'Base', '伊朗', 'operational', null], ] iranLocs.forEach((r) => insertLoc.run(...r)) diff --git a/server/situationData.js b/server/situationData.js index d23b54a..62cd1b9 100644 --- a/server/situationData.js +++ b/server/situationData.js @@ -41,7 +41,7 @@ function getSituation() { const assetsUs = db.prepare('SELECT * FROM force_asset WHERE side = ? ORDER BY id').all('us') const assetsIr = db.prepare('SELECT * FROM force_asset WHERE side = ? ORDER BY id').all('iran') const locUs = db.prepare('SELECT id, name, lat, lng, type, region, status, damage_level FROM key_location WHERE side = ?').all('us') - const locIr = db.prepare('SELECT id, name, lat, lng, type, region FROM key_location WHERE side = ?').all('iran') + const locIr = db.prepare('SELECT id, name, lat, lng, type, region, status, damage_level FROM key_location WHERE side = ?').all('iran') const lossesUs = db.prepare('SELECT * FROM combat_losses WHERE side = ?').get('us') const lossesIr = db.prepare('SELECT * FROM combat_losses WHERE side = ?').get('iran') const trend = db.prepare('SELECT time, value FROM wall_street_trend ORDER BY time').all() diff --git a/src/components/IranBaseStatusPanel.tsx b/src/components/IranBaseStatusPanel.tsx new file mode 100644 index 0000000..464f9b8 --- /dev/null +++ b/src/components/IranBaseStatusPanel.tsx @@ -0,0 +1,72 @@ +import { useMemo } from 'react' +import { MapPin, AlertTriangle, AlertCircle } from 'lucide-react' +import type { MilitarySituation } from '@/data/mockData' + +interface IranBaseStatusPanelProps { + keyLocations: MilitarySituation['iranForces']['keyLocations'] + className?: string +} + +export function IranBaseStatusPanel({ keyLocations = [], className = '' }: IranBaseStatusPanelProps) { + const stats = useMemo(() => { + const bases = (keyLocations || []).filter((loc) => loc.type === 'Base' || loc.type === 'Port' || loc.type === 'Nuclear' || loc.type === 'Missile') + let attacked = 0 + let severe = 0 + let moderate = 0 + let light = 0 + for (const b of bases) { + const s = b.status ?? 'operational' + if (s === 'attacked') attacked++ + const lvl = b.damage_level + if (lvl === 3) severe++ + else if (lvl === 2) moderate++ + else if (lvl === 1) light++ + } + return { total: bases.length, attacked, severe, moderate, light } + }, [keyLocations]) + + return ( +
+
+ + 伊朗基地态势 +
+
+
+ 总基地数 + {stats.total} +
+
+ + + 被袭击 + + {stats.attacked} +
+
+ + + 严重损毁 + + {stats.severe} +
+
+ + + 中度损毁 + + {stats.moderate} +
+
+ + + 轻度损毁 + + {stats.light} +
+
+
+ ) +} diff --git a/src/components/NewsTicker.tsx b/src/components/NewsTicker.tsx new file mode 100644 index 0000000..79df1b0 --- /dev/null +++ b/src/components/NewsTicker.tsx @@ -0,0 +1,56 @@ +import { useMemo } from 'react' +import type { SituationUpdate, ConflictEvent } from '@/data/mockData' +import { processTickerText } from '@/utils/tickerText' + +interface NewsTickerProps { + updates?: SituationUpdate[] + conflictEvents?: ConflictEvent[] + className?: string +} + +export function NewsTicker({ updates = [], conflictEvents = [], className = '' }: NewsTickerProps) { + const items = useMemo(() => { + const list: { id: string; text: string }[] = [] + for (const e of conflictEvents || []) { + const text = processTickerText(e.title || '') + if (text) list.push({ id: `ev-${e.event_id}`, text }) + } + for (const u of updates || []) { + const text = processTickerText(u.summary || '') + if (text) list.push({ id: `up-${u.id}`, text }) + } + return list.slice(0, 30) + }, [updates, conflictEvents]) + + const baseCls = 'flex items-center overflow-hidden' + const defaultCls = 'border-b border-military-border/50 bg-military-panel/60 py-1.5' + const wrapperCls = className ? `${baseCls} ${className}` : `${baseCls} ${defaultCls}` + + if (items.length === 0) { + return ( +
+ 滚动情报 + 暂无资讯 +
+ ) + } + + const content = items.map((i) => i.text).join(' ◆ ') + const duration = Math.max(180, Math.min(480, content.length * 0.8)) + + return ( +
+ 滚动情报 +
+
+ {content} + + {content} +
+
+
+ ) +} diff --git a/src/components/TimelinePanel.tsx b/src/components/TimelinePanel.tsx index 8705ae1..41e8634 100644 --- a/src/components/TimelinePanel.tsx +++ b/src/components/TimelinePanel.tsx @@ -1,6 +1,8 @@ import { useEffect, useRef } from 'react' import { Play, Pause, SkipBack, SkipForward, History } from 'lucide-react' import { usePlaybackStore, REPLAY_TICKS, REPLAY_START, REPLAY_END } from '@/store/playbackStore' +import { useSituationStore } from '@/store/situationStore' +import { NewsTicker } from './NewsTicker' function formatTick(iso: string): string { const d = new Date(iso) @@ -14,6 +16,7 @@ function formatTick(iso: string): string { } export function TimelinePanel() { + const situation = useSituationStore((s) => s.situation) const { isReplayMode, playbackTime, @@ -75,6 +78,16 @@ export function TimelinePanel() { 数据回放 + {!isReplayMode && ( +
+ +
+ )} + {isReplayMode && ( <>
diff --git a/src/index.css b/src/index.css index b1607aa..4b194f5 100644 --- a/src/index.css +++ b/src/index.css @@ -53,3 +53,9 @@ body, background: rgba(75, 85, 99, 0.5); border-radius: 2px; } + +@keyframes ticker { + from { transform: translateX(0); } + to { transform: translateX(-50%); } +} + diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx index 72eea8c..1d5f74f 100644 --- a/src/pages/Dashboard.tsx +++ b/src/pages/Dashboard.tsx @@ -4,7 +4,7 @@ import { TimelinePanel } from '@/components/TimelinePanel' import { ForcePanel } from '@/components/ForcePanel' import { WarMap } from '@/components/WarMap' import { CombatLossesPanel } from '@/components/CombatLossesPanel' -import { EventTimelinePanel } from '@/components/EventTimelinePanel' +import { IranBaseStatusPanel } from '@/components/IranBaseStatusPanel' import { BaseStatusPanel } from '@/components/BaseStatusPanel' import { PowerChart } from '@/components/PowerChart' import { InvestmentTrendChart } from '@/components/InvestmentTrendChart' @@ -71,7 +71,10 @@ export function Dashboard() { civilianTotal={situation.civilianCasualtiesTotal} className="min-w-0 flex-1 py-1" /> - +
diff --git a/src/store/situationStore.ts b/src/store/situationStore.ts index 902dcc4..870c09f 100644 --- a/src/store/situationStore.ts +++ b/src/store/situationStore.ts @@ -49,7 +49,7 @@ export function fetchAndSetSituation(): Promise { let disconnectWs: (() => void) | null = null let pollInterval: ReturnType | null = null -const POLL_INTERVAL_MS = 5000 +const POLL_INTERVAL_MS = 3000 function pollSituation() { fetchSituation() diff --git a/src/utils/tickerText.ts b/src/utils/tickerText.ts new file mode 100644 index 0000000..f1b3ac8 --- /dev/null +++ b/src/utils/tickerText.ts @@ -0,0 +1,35 @@ +/** + * 滚动情报文本处理:转为简体中文,过滤非中文内容 + */ +import { Converter } from 'opencc-js/t2cn' + +const t2s = Converter({ from: 'twp', to: 'cn' }) + +/** 简体中文字符范围 */ +const ZH_REGEX = /[\u4e00-\u9fff]/g + +/** 文本中中文占比是否达标(至少30%) */ +export function isMostlyChinese(text: string): boolean { + if (!text?.trim()) return false + const zh = text.match(ZH_REGEX) + const zhCount = zh ? zh.length : 0 + return zhCount / text.length >= 0.3 +} + +/** 繁体转简体 */ +export function toSimplifiedChinese(text: string): string { + if (!text?.trim()) return text + try { + return t2s(text) + } catch { + return text + } +} + +/** 处理滚动情报项:转为简体,非中文为主则过滤 */ +export function processTickerText(text: string): string | null { + const t = (text || '').trim() + if (!t) return null + if (!isMostlyChinese(t)) return null + return toSimplifiedChinese(t) +} diff --git a/tailwind.config.js b/tailwind.config.js index 2fb8af0..78d9842 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -11,9 +11,14 @@ export default { '0%': { transform: 'translateY(0)' }, '100%': { transform: 'translateY(-50%)' }, }, + ticker: { + from: { transform: 'translateX(0)' }, + to: { transform: 'translateX(-50%)' }, + }, }, animation: { 'vert-marquee': 'vert-marquee 25s linear infinite', + ticker: 'ticker var(--ticker-duration, 40s) linear infinite', }, fontFamily: { orbitron: ['Orbitron', 'sans-serif'],