From 0a18caaecba6c1cb509dac8678ab982bb974d5fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=99=E6=BE=B3?= Date: Mon, 30 Mar 2026 21:14:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D40=E5=8D=B7=E5=9C=B0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLAUDE.md | 76 ++++++ data/vol21.json | 420 +++++++++++++++++++++++++++++++ data/vol22.json | 387 +++++++++++++++++++++++++++++ data/vol23.json | 395 +++++++++++++++++++++++++++++ data/vol24.json | 223 +++++++++++++++++ data/vol25.json | 330 +++++++++++++++++++++++++ data/vol26.json | 261 +++++++++++++++++++ data/vol27.json | 632 +++++++++++++++++++++++++++++++++++++++++++++++ data/vol28.json | 613 +++++++++++++++++++++++++++++++++++++++++++++ data/vol29.json | 290 ++++++++++++++++++++++ data/vol30.json | 269 ++++++++++++++++++++ data/vol31.json | 294 ++++++++++++++++++++++ data/vol32.json | 286 +++++++++++++++++++++ data/vol33.json | 212 ++++++++++++++++ data/vol34.json | 533 +++++++++++++++++++++++++++++++++++++++ data/vol35.json | 227 +++++++++++++++++ data/vol36.json | 268 ++++++++++++++++++++ data/vol37.json | 255 +++++++++++++++++++ data/vol38.json | 279 +++++++++++++++++++++ data/vol39.json | 250 +++++++++++++++++++ data/vol40.json | 271 ++++++++++++++++++++ data/vol41.json | 249 +++++++++++++++++++ data/vol42.json | 301 ++++++++++++++++++++++ data/vol43.json | 235 ++++++++++++++++++ data/vol44.json | 200 +++++++++++++++ data/vol45.json | 331 +++++++++++++++++++++++++ data/vol46.json | 264 ++++++++++++++++++++ data/vol47.json | 224 +++++++++++++++++ data/vol48.json | 217 ++++++++++++++++ data/vol49.json | 265 ++++++++++++++++++++ data/vol52.json | 417 +++++++++++++++++++++++++++++++ frontend/App.vue | 267 ++++++++++++++++---- 32 files changed, 9691 insertions(+), 50 deletions(-) create mode 100644 CLAUDE.md create mode 100644 data/vol21.json create mode 100644 data/vol22.json create mode 100644 data/vol23.json create mode 100644 data/vol24.json create mode 100644 data/vol25.json create mode 100644 data/vol26.json create mode 100644 data/vol27.json create mode 100644 data/vol28.json create mode 100644 data/vol29.json create mode 100644 data/vol30.json create mode 100644 data/vol31.json create mode 100644 data/vol32.json create mode 100644 data/vol33.json create mode 100644 data/vol34.json create mode 100644 data/vol35.json create mode 100644 data/vol36.json create mode 100644 data/vol37.json create mode 100644 data/vol38.json create mode 100644 data/vol39.json create mode 100644 data/vol40.json create mode 100644 data/vol41.json create mode 100644 data/vol42.json create mode 100644 data/vol43.json create mode 100644 data/vol44.json create mode 100644 data/vol45.json create mode 100644 data/vol46.json create mode 100644 data/vol47.json create mode 100644 data/vol48.json create mode 100644 data/vol49.json create mode 100644 data/vol52.json diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..337a2d3 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,76 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +A novel visualization map for "大唐双龙传" (The Twin Dragons of Tang Dynasty), showing faction territories, character routes, and key events across 40 volumes. Built with Vue 3 + Vite + Leaflet. + +## Commands + +All commands run from the `frontend/` directory: + +```bash +npm run dev # Dev server at http://localhost:5173 +npm run build # Production build → ../dist +npm run preview # Preview production build +``` + +No test or lint tooling is configured. Before adding either, propose the approach (Vitest for unit tests, Playwright for E2E). + +## Architecture + +### Data Flow + +1. `frontend/App.vue` loads all `data/vol01.json`–`data/vol40.json` in parallel on mount +2. A volume slider (1–40) drives reactive computed properties that **merge** data from vol01 up to the selected volume +3. Leaflet layers redraw whenever merged data or the current volume changes + +The Vite dev server has custom middleware (`vite.config.js`) to serve `/data` from `../data/`. The build also copies the data directory to `../dist`. + +### Key Files + +- `frontend/App.vue` — 875-line single-component app; handles all map state, data loading, and visualization logic +- `frontend/vite.config.js` — custom middleware for `/data` serving; build output to `../dist` +- `data/volXX.json` — structured data extracted from the novel (40 files) +- `content/卷XX.txt` — original novel source text (read-only, used only for data extraction) + +### Data Schema (`data/volXX.json`) + +```json +{ + "volume": "卷X", + "chapters": ["第01章 标题", "..."], + "locations": [{"id", "name", "type", "lat", "lng", "description"}], + "factions": [{"id", "name", "type", "color", "leader", "territory"}], + "character_routes": [{"character", "color", "route": [...]}], + "key_events": [{"chapter", "location", "event"}] +} +``` + +### Special Logic in App.vue + +- **Volumes 1–20**: Character routes for 寇仲 and 徐子陵 are merged into a single "寇仲 & 徐子陵" route +- **Volumes 21+**: Their routes are shown separately +- Faction territories, locations, and routes are cumulatively merged across all volumes up to `currentVol` + +### Leaflet Setup + +- Basemap: CartoDB Dark Matter +- Layer groups: territories, locations, routes, events +- Custom `div` icons for markers and labels +- Map interactions: click on markers to fly to location + +## Code Style + +- Vue 3 Composition API with `