星盘档案可以拖动排序,合盘开始前先确认扣点。
人物卡、菜单、编辑和删除换成组件库。chart_profiles 增加可空的 archive_order,本人始终排在第一。合盘选人页两个名字并排,开始按钮居中,点了先说出点数和余额。 自测:tsc 0;lint 0 error(122 警告,与上一张相同);定向测试通过;next build 后 / 仍是 Static;首页 JS gzip-9 639609,相对 640131 少 0.08%。test:db 79 通过、13 失败,失败名单与 windows-known-failures.txt 一致,排序列断言在通过的那一组。没有浏览器登录态。 Co-Authored-By: Grok (agent loop)
This commit is contained in:
co-authored by
Grok (agent loop)
parent
b7ec8e78ed
commit
eee8564b7f
@@ -0,0 +1,67 @@
|
||||
# PROGRESS · 组件库 K4 星盘档案与婚恋合盘(2026-10-25)
|
||||
|
||||
工单 #108。分支 `codex/ui-kit-4-people-20261023`。基线 `origin/staging` `b7ec8e78ed4d280b25f5180cd7302e3ec3ef085c`(#107 星盘页已在这个提交里)。只做任务书 **K4 星盘档案与婚恋合盘**。K5 及之后没做。没有重做星盘页、对话页、侧栏。
|
||||
|
||||
## 结论
|
||||
|
||||
人物卡可以拖动排序。刷新、换一台登录的设备,顺序还在。本人始终是第一张,拖不动。合盘选人页两个人并排,窄屏上下排,开始按钮在正中。点开始会先说出将用掉多少点、余额还有多少点。不够时改去补点数。
|
||||
|
||||
## 做了什么
|
||||
|
||||
- 人物卡用 `Card` 和 `CardAction`。更多菜单用 `DropdownMenu`。编辑用 `Dialog`,表单仍是原来的那一份,没有在表单里再套一层对话框。删除用 `AlertDialog`。菜单里写「删除」,确认框里仍是「删除这个人」。
|
||||
- 拖动排序用 dnd-kit 的网格策略。零件在档案页载入后再出现,不进首页同步包。本人不是 `chart_profiles` 里的一行,放在可拖的那一组外面。`moveArchiveIds` 遇到 `self` 就不动。
|
||||
- `chart_profiles` 只加可空整数 `archive_order`,默认空,已部署的代码还能读这张表。不删列、不改类型、不收紧非空。会话的 `sidebar_order` 没有再加,语义也没改。只改顺序时不改 `updated_at`。名单仍按最近更新取出,再在程序里排序:有数字的在前,都没有数字时保持原来的先后。新位置是 10、20、30。
|
||||
- 关系用 `ToggleGroup`,不是页签。性别也是同一排标签,所以能离开白名单。空的关系在名单上仍显示「其他」,再点这一项会写入。性别再点已选中的一项不会改值,「不填」仍存空。标签和读屏名称都留着。
|
||||
- 合盘选人页去掉页内标题和副标题。两个 `Select` 左右并排,中间是 Lucide 的叉,`aria-hidden`。窄屏上下排,叉仍显示并居中。开始按钮用 `HeartHandshake`,不用 `Sparkles`,上面不写价格。点了才弹确认:「会用掉 N 点,余额 M 点。」按钮是「取消 / 开始」。不够时说「需要 N 点,余额只有 M 点。」,主按钮换成「去补点数」。N、M 从计价表和账户读。计价或余额读不到时不弹空确认,只说「计费配置不可用」,也不再发出生成请求。这比原来的按钮更严:原来计价未知时仍可以点。扣点仍发生在服务端生成报告时。删人后合盘和报告仍走原来的删除接口。
|
||||
- 合盘报告的返回改成图标加「婚恋合盘」。语言用页签。追问仍是原来的八节。标题里的 × 还在,第一次打开时两个头像靠拢仍按这个标题拆。减少动态效果时仍只淡入。
|
||||
- `people-home-links.tsx` 没有改。首页仍只从这里拿账户深链和合盘深链。
|
||||
- 白名单去掉 7 个文件,没有加长,测试里写死的基线名单没有改。
|
||||
- 没有改 `.gitea/**`,没有改生产部署,没有给 `scripts/jyotish_api_server.py` 加方法,没有改 `page.tsx`。`Home()` 的 useState / useRef 没有增长。
|
||||
|
||||
## 断言改动(原值 / 新值 / 原因)
|
||||
|
||||
| 位置 | 原值 | 新值 | 原因 |
|
||||
| --- | --- | --- | --- |
|
||||
| 人物卡个数 | `class="people-archive-row"` 的个数 | 完整的 `data-slot="card"` 个数,不含 `card-action` | 人物卡改用 Card。CardAction 的槽位名字以 card 开头,不能算成另一张卡 |
|
||||
| 当前人物 | 按 `<li>` 切开 | 只按完整 `data-slot="card"` 切开 | 同上。本人仍是第一张 |
|
||||
| 添加按钮 | `+ 添加一个人`,到顶是 `disabled` | 仍写「添加一个人」,到顶是 `aria-disabled`,没有 `disabled` | 加号改用图标。到顶仍可点,用来弹出限额提示 |
|
||||
| 返回 | 按钮里是 `‹`,类名后 240 字内是「返回」 | 类名 `people-archive-back` 后 800 字内是「返回」 | 箭头改用图标,图标 SVG 比一个字符长 |
|
||||
| 本人脚注 | 类名后 500 字内是「编辑」 | 1600 字内是「编辑」 | 编辑改用 Button,组件库样式写在同一个 class 里 |
|
||||
| 关系选项 | 编辑态静态 HTML 里有「孩子」 | 字段渲染关系词表,词表里仍是 `child: "孩子"` | 编辑放进对话框,传送门不进静态 HTML |
|
||||
| 性别 | `role="radio"` | 按钮的 `aria-pressed`;再点已选项由 `genderChoice` 决定不改 | 性别改成同一排标签 |
|
||||
| 合盘副标题 | 开关未返回时静态 HTML 有副标题 | 源码和静态 HTML 都没有这句 | 顶栏已经有页名 |
|
||||
| 合盘可访问名称 | 写死 `aria-label="第一个人"` | `label="第一个人"` / `label="第二个人"`,触发器 `aria-label={props.label}` | 两个选择框共用一个组件,名字仍是这两个词 |
|
||||
| 开始按钮 | 下面写「生成一份完整合盘报告,用掉 N 点。」,图标是 Sparkles | 按钮上不写价格;确认句是「会用掉 N 点,余额 M 点。」和「需要 N 点,余额只有 M 点。」;图标是 HeartHandshake | 先确认再生成。价格从计价表读 |
|
||||
| 报告返回 | `‹ 婚恋合盘` | 链接仍是 `/synastry`,文字是「婚恋合盘」,源码有 ChevronLeft | 去掉手写箭头。标题里的 × 还在 |
|
||||
| 编辑表单接线 | `editing ? (` 紧跟表单 | 中间可以先是 Dialog,400 字内仍是表单 | 编辑改用对话框 |
|
||||
| 排序列 | 只核对会话的 `sidebar_order` | 同时核对 `chart_profiles.archive_order` 可空、可更新,且不复制到旧迁移目录 | 只加一列,对已部署代码向后兼容 |
|
||||
| 白名单 | 含这 7 个档案和合盘文件 | 这 7 个移出 | 它们已经改用组件库。名单只许变短 |
|
||||
|
||||
移出的 7 个文件:`chart-profile-form.tsx`、`people/people-page.tsx`、`person-relation-field.tsx`、`profile-gender-field.tsx`、`synastry/synastry-add-dialog.tsx`、`synastry/synastry-picker.tsx`、`synastry/synastry-report-view.tsx`。
|
||||
|
||||
## 自测
|
||||
|
||||
| 检查 | 命令 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 类型 | 仓库根 `frontend\node_modules\.bin\tsc --noEmit -p frontend` | 退出码 0 |
|
||||
| 检查 | 在 `frontend` 下 `npm run lint` | 退出码 0。122 个警告,0 error。警告数和上一张记下的一样,没有为这一张新加 |
|
||||
| 定向测试 | 在 `frontend` 下 `node node_modules/tsx/dist/cli.mjs --test` 下面列出的文件 | 先 180 条里 4 条失败,按上面的三栏改完断言后,失败的 4 个文件 43 条全部通过。整批重跑的其余文件在第一次里已通过 |
|
||||
| 构建 | 在 `frontend` 下 `npm run build` | 退出码 0。编译 10.7s,TypeScript 55s。`/` 仍是 ○ Static。5 条既有 skill-package-registry 警告,没有改 |
|
||||
| 首屏体积 | 首页 HTML 引用的 `/_next/static/**.js`,gzip-9 相加,不含 CSS | 基线 `b7ec8e78`(上一张记下的数):36 个文件,640131 字节。本张:36 个文件,缺失 0,639609 字节,少 522(-0.08%)。±2% 大约是 627329 到 652933。`dnd-kit`、`dropdown-menu`、`people-page`、`people-archive-sortable` 命中都是 0 |
|
||||
| 数据库 | 在 `frontend` 下 `npm run test:db` | 92 条,通过 79,失败 13,取消 0。失败的 13 条名字与 `tools/agent-loop/windows-known-failures.txt` 逐条一致,没有多出来的。排序列断言在通过的「local PostgreSQL applies the reviewed business schema」里。退出码是 1,因为这 13 条在 Windows 上本来就会失败,不写成整套通过 |
|
||||
|
||||
定向测试文件:`adopted-birth-date.test.ts`、`chart-birth-editor-and-report-table.test.tsx`、`chart-library-other-profile.test.ts`、`chat-session-url.test.ts`、`consultation-entrypoint.test.ts`、`loading-motion-20260930.test.tsx`、`onboarding-checklist-20261022.test.ts`、`people-archive-order.test.ts`、`people-archive-regressions.test.ts`、`people-archive-view.test.tsx`、`profile-gender-20260927.test.ts`、`profile-gender-ui-20260927.test.tsx`、`profile-onboarding-birth-sky-reveal.test.ts`、`self-edit-people-20260928.test.tsx`、`settings-mvp-contract.test.ts`、`synastry-full-report.test.ts`、`synastry-report-surface.test.ts`、`ui-kit-whitelist.test.ts`。
|
||||
|
||||
没有跑前端全量 `npm test`,没有跑 Python 快速门。`tests/test_repo_privacy_markers.py` 退出码 0。`page.tsx` 和 `scripts/jyotish_api_server.py` 没有改。
|
||||
|
||||
## 偏离
|
||||
|
||||
- 决策 D7 说长相尽量不变。K4 写明人物卡、网格排序和合盘选人页的新样子,以 K4 为准。左栏仍是 18–22rem,所以桌面上卡片多半排成一列;手机上的列表最宽 640px,宽一点会排成两列。排序用的是网格策略。
|
||||
- 决策 D9 说能用页签就用页签。K4 写明关系用 `ToggleGroup`。性别也用同一排标签,这样能离开白名单,而不是再做一套页签。
|
||||
- 计价或余额读不到时,不再允许直接生成。原来的按钮在价格未知时仍会提交。确认框不能空着说一个编出来的价格。
|
||||
- `people-home-links.tsx` 没有改界面。首页不从档案页拿拖动排序。
|
||||
- 编辑对话框在静态渲染里挂不进页面。合同改为源码接线和直接渲染表单字段。删除确认的句子仍在源码里。
|
||||
|
||||
## 环境缺口
|
||||
|
||||
- 没有登录态。没有在浏览器里拖过人物卡,也没有点过开始合盘。不写成通过。可照做的步骤在 `docs/testing/ui-kit-migration-20261023.md` 的「星盘档案」和「婚恋合盘」两节。
|
||||
Reference in New Issue
Block a user