Files
Jyotisha/docs/tasks/TASK-chart-dasha-western-redesign-20260924.md
T

76 lines
6.8 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.
# TASK · 星盘页大运 Tab 与西洋盘 Tab 改版(2026-09-24)
原型(产品 09-24 已同意全部设计,相位线**一直显示**):https://claude.ai/artifact/DYovEPMqD1xwNgna5xVTre
## 基线
- `origin/staging` 当前 head(含已部署 `1420471a`)。分支 `codex/chart-dasha-western-redesign-20260924`。
- **串行**:排在 `TASK-chart-ephemeris-fixes-20260924.md` **T1(Chara 0 年)合入之后**——两单都改 `chart-dasha-tab.tsx` / `chart-view-mapper.ts` 的大运显示;本单沿用那一单定下的「0 年照实显示、灰色、不展开」口径。与 `TASK-chart-page-skeleton-wait` 已合入的西洋骨架(`WesternWheelSvg skeleton` + `EMPTY_WESTERN_WHEEL`)必须兼容。
## 事故实证(按 `origin/staging`)
**大运**:`frontend/src/components/chart-page/chart-dasha-tab.tsx` `ChartDashaTab` → 两个 `Track`(Vimshottari / Chara),每段大运 `li.chart-page-dasha-period` 下平铺**全部**子运 `<ul>`:Vimshottari 9×9 = 81 行、Chara 12×12 = 144 行,无折叠、无"现在"摘要、无时间总览。CSS `globals.css` `.chart-page-dasha*`。
**西洋盘**:`frontend/src/components/chart-page/western-wheel-svg.tsx`:`viewBox 0 0 400 400`,`OUTER=188 / ZODIAC=168 / HOUSE=128 / INNER=78`,CSS `.chart-page-western-svg text { font-size:16px }` 统一 16 号;
- 星座名在 r=178 的 20 单位窄带内,近水平轴时压过两条环线;
- 宫位号放在**宫头角度**(不是宫中),被宫头线穿过;
- 行星两字中文名在 r=113,与宫位号同一带,**无避让**——虚构 1990-01-01 12:00 北京实测 23 处标签重叠(摩羯座五星群互相重叠并压宫位号);
- 「升」字 `x = polar(192,180).x - 8 = 0`、`textAnchor="end"` → 画在 viewBox 外;
- 无度数、无逆行标记;SVG 无 `max-width`,窄屏一栏时盘撑满面板(可达 ~1050px)。
- `chart-western-tab.tsx` 相位表复用 `.chart-page-planet-table`(`min-width: 34rem`、`nowrap`),侧栏约 480px 时横向溢出;整个 Tab 没有行星位置表。
## 根因
大运:信息全量平铺、缺层级。西洋盘:固定字号 + 行星与宫位号同圈 + 无碰撞处理 + 标签坐标错误 + 继承了印度盘表格宽度。
## 决策记录(产品 2026-09-24,照原型)
**大运 Tab**
- D1 每条轨道顶部「现在」卡:当前大运 / 当前小运 / 小运剩余(月)。
- D2 横向时间条:整个周期按时长分段上色,当前段描边,竖线标今天,轴两端写起止 `YYYY.MM`。
- D3 大运列表默认折叠,只展开当前段;子运逐行 `名称 · YYYY.MM – YYYY.MM`,当前子运高亮;日期等宽数字右对齐。
- D4 0 年段:灰色、`0 年`、不可展开(沿用 chart-ephemeris-fixes D1)。
- D5 布局:≥1024px 左 Vimshottari、右 Chara 并排;窄屏上下排。底部保留双轨说明句(现 `dualTrackNote`)。
- D6 折叠用原生 `<details>/<summary>`,不引第三方;当前段 `open`。
**西洋盘 Tab**
- D7 盘 `viewBox 0 0 520 520`,容器 `max-width: 520px` 居中。三圈:外圈星座(按元素用四个语义色:火 / 土 / 风 / 水,token 化、深浅色各一套)、中圈行星(符号 + 星座内度数,逆行加 ℞)、内圈宫位号(放**宫中角度**,不压线)。
- D8 行星避让:按黄经排序,相邻显示角 < 11° 时沿圆周推开(迭代),在真实位置画外圈刻度并用细线连到显示位置。
- D9 ASC / MC 在盘内标注,四轴线加粗;不再画盘外「升」。
- D10 相位线**一直显示**,和谐(三分 / 六分 / 合)绿、紧张(刑 / 冲)红,使用语义 token;点行星或行星表行 → 只高亮该星及其相位,其它变淡,再点取消;相位表同步只列该星相位。
- D11 右侧:要点 chips(上升 / 太阳 / 月亮 / 元素最多 / 星群)→ **新增行星位置表**(星体、星座、度数、宫位、逆行)→ 主要相位表(星体对、相位、容许度)→ 口径说明句。表格用新的 `.chart-page-western-table`,不继承 `min-width: 34rem`;外包 `overflow-x:auto`。
- D12 数据全部来自现有 `view.western`(`planets`、`houses`、`aspects`、`ascendantLongitude`、MC 若无字段则从第 10 宫头取);**不新增请求、不改接口字段**。若缺字段,写进进度记录,不在前端编造。
- D13 骨架兼容:`skeleton` 模式仍只画三圈与分割线,不画星座名 / 行星 / 宫位号 / 相位。
## 硬红线
1. 不改 `/api/chart-view` 与引擎;不改 `HEAVY_COMPUTE_PATHS` / 并发。
2. 不复制印度盘几何;西洋盘只改 `western-wheel-svg.tsx` 自身。
3. 新颜色必须是 `:root` token 且有暗色值;不得在组件里写死色值。
4. 无 spinner;骨架规则不变。44px 触控;断点沿用 1024(星盘既有)。
5. `/chart` 保持 `○ Static`;既有断言三栏;测试总数不低于基线。
## 任务分解
- **T1 大运**(`chart-dasha-tab.tsx`、`chart-view-mapper.ts` 若需补"当前子运"字段、`globals.css`)。验收:`chart-page-view.test.tsx` 渲染 golden(真实引擎 fixture)→ 每轨一个「现在」卡、时间条段数 = 大运数、仅当前段 `open`、0 年段不可展开;无 81/144 行平铺(未展开段不渲染子运 `li`,或渲染在关闭的 `<details>` 内均可,但默认不可见)。
- **T2 西洋盘**(`western-wheel-svg.tsx`、`chart-western-tab.tsx`、`globals.css`)。验收:纯函数 `layoutWesternLabels(planets)` 测试——虚构 1990-01-01 golden 下任意两颗行星显示角间距 ≥ 11°、每个标签包围盒在 viewBox 内、宫位号角度 = 宫中;无「升」出界;行星表行数 = 行星数;点选过滤相位表;骨架模式无文字节点。
- **T3 记录**:DESIGN §15 大运 / 西洋小节(结构、颜色 token、避让规则);VOICE(「现在」卡文案、「小运剩余 N 个月」);CHANGELOG;PROGRESS;`docs/testing/chart-dasha-western-20260924.md`(375 / 1280 宽度;摩羯星群不重叠;点行星过滤;暗色模式元素色可读)。产品改版,不开 BUG 号(西洋溢出若需记账可并入一条 BUG-1029,开工时定)。
## 让步顺序
1. 避让迭代在极端星群(≥6 颗落 30° 内)仍重叠时,允许第二层半径(两行错开),不得缩小字号到 < 12。
2. 若 `view.western` 无 MC,允许只标 ASC,并写进进度记录。
3. 不得让步:D8(避让)、D10(相位线常显)、红线 1、红线 3。
## 开工前置命令
```bash
git fetch origin --prune
git log --oneline origin/staging | grep -i "chara\|0 年\|1023" # 确认 chart-ephemeris-fixes T1 已合入
git worktree add -b codex/chart-dasha-western-redesign-20260924 .worktrees/chart-dasha-western-redesign-20260924 origin/staging
cd .worktrees/chart-dasha-western-redesign-20260924/frontend
./node_modules/.bin/tsc --noEmit && npm run lint && npm test 2>&1 | tail -5
```