# PROGRESS · 设置弹窗重排与账户与点数入弹窗(2026-09-06)
工作树:`.worktrees/settings-dialog-and-billing-pane-20260906`
分支:`codex/settings-dialog-and-billing-pane-20260906`
基线:任务书写 `origin/staging` @ `985c3258`;开工时 `origin/staging` 已到 `9ce7a374`(含 composer 与会话列表),以当时远端为准。
`page.tsx` 开工 **2035** 行,收尾 **1976** 行(净减 59,上限 1995)。未改迁移、未 bump Skill、未改支付 API。
| 任务 | 状态 | BUG |
| --- | --- | --- |
| 5.1 弹窗壳固定尺寸 + 四分区 | 完成 | BUG-554 |
| 5.2 个人资料搬出 `page.tsx` | 完成 | — |
| 5.4 账户与点数入弹窗,删除 `/membership` | 完成 | BUG-554 |
| 5.3 星盘资料列表→详情 | 完成 | BUG-554 |
| 5.5 BUG_HISTORY / CHANGELOG / DESIGN / VOICE | 完成 | — |
## 实现要点
- `.settings-modal`:桌面 `width: min(100vw - 32px, 880px); height: min(84dvh, 640px)`;四分区共用;退出仍是 400px `logout-modal`。
- `AccountDialog` 增加 `"billing"`。导航顺序:个人资料 → 星盘资料 → 账户与点数 → 通用设置。
- `profile-panel.tsx`:48px 头像一行;删除「管理星盘资料」。
- `chart-library-panel.tsx`:内部视图 `list | self | other | add`;列表条可点 + chevron;合盘操作只在其他人详情。
- `billing-panel.tsx` + `use-billing-panel.ts`:`next/dynamic` `{ ssr: false }`。页签含订单;兑换码行内表单。无 spinner / 「正在加载」。
- 删除 `frontend/src/app/membership/page.tsx` 与 `orders/page.tsx`。`next.config.ts` 临时重定向到 `/?settings=billing`。
- `settings-url.ts` 在 hydrate / popstate 解析后 `history.replaceState` 抹掉参数;`/` 不用 `useSearchParams`。
- 七处入口改为 `openAccountDialog("billing", { source, plan, tab })`。生时校正 402 不再 `window.location.assign`。
## 既有断言改动
| 文件 | 原值 | 新值 | 原因 |
| --- | --- | --- | --- |
| `account-dialog-overlay` | `openRedeem`;`profile-modal` / `chart-library-modal` | `renderBilling`;四导航;`.settings-modal` 同时有 width 与 height | 5.1 固定尺寸四分区 |
| `page.tsx` `renderProfile` | 约 50 行 JSX + 「管理星盘资料」 | `