Files
usa/README.md
2026-03-01 19:23:48 +08:00

94 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# US-Iran Military Situation Display Dashboard
A production-ready data visualization dashboard with 1920×1080 resolution, dark-themed military-grade UI.
## Tech Stack
- **Build:** Vite (React + TypeScript)
- **Styling:** Tailwind CSS
- **State:** Zustand
- **Charts:** echarts, echarts-for-react
- **Maps:** react-map-gl, mapbox-gl
- **Icons:** lucide-react
- **Font:** Orbitron (Google Fonts)
## Setup
```bash
npm install
```
### Mapbox (optional)
For the interactive map, create a `.env` file:
```bash
cp .env.example .env
# Edit .env and add your Mapbox token from https://account.mapbox.com/access-tokens/
```
Without a token, the map area shows a placeholder with location labels.
### API 与数据库
页面数据通过 REST API 从后端获取,后端使用 SQLite 存储。
```bash
# 首次运行:初始化数据库并写入种子数据
npm run api:seed
# 启动 API 服务(默认 http://localhost:3001
npm run api
```
开发时需同时运行前端与 API
```bash
# 终端 1
npm run api
# 终端 2
npm run dev
```
API 会由 Vite 代理到 `/api`,前端通过 `/api/situation` 获取完整态势数据。数据库文件位于 `server/data.db`,可通过修改表数据实现动态调整。
## Development
```bash
npm run dev
```
## Build
```bash
npm run build
```
## Project Structure
```
src/
├── components/
│ ├── HeaderPanel.tsx # Top global overview & power index comparison
│ ├── ForcePanel.tsx # Reusable left/right panel for military forces
│ ├── WarMap.tsx # Mapbox GL (Persian Gulf center)
│ └── StatCard.tsx # Reusable number card
├── api/
│ └── situation.ts # 态势数据 API 请求
├── store/
│ └── situationStore.ts # Zustand store + API 轮询
├── data/
│ └── mockData.ts # 类型定义与初始兜底数据
├── pages/
│ └── Dashboard.tsx # Main layout (1920×1080)
├── App.tsx
└── index.css
server/
├── index.js # Express API 入口
├── db.js # SQLite 建表与连接
├── routes.js # /api/situation 路由
├── seed.js # 数据库种子脚本
└── data.db # SQLite 数据库(运行 seed 后生成)
```