Repository navigation
Record page v3: retire the authored full pages of lead / account / opportunity / case in favour of the synthesized v3 page, and declare the quote and opportunity line items as body tables #2382
Description
epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff
Restart-when: an @objectstack / @object-ui release that carries objectstack-ai/objectstack#27310 and objectstack-ai/objectstack#27473 (the record page v3 layout and its round 2) is installable here — probe: after bumping the platform pin, node -e "require('@object-ui/plugin-detail')" exposes recordPageArrangementFor and bodyTablePlacement reads fieldGroups[].relatedList; this package pins @objectstack/* 18.2.0 today, which predates both.
Why
The record page v3 (objectstack-ai/objectstack#26676, maintainer-approved design) is the synthesized default page: three resident columns (details | timeline | related), frameless sections, one merged timeline stream, compact related cards the reader arranges, in-place enlarge, and body tables for a record's own line items. HotCRM's four most-worked objects never see it: each carries an authored kind: 'full' page, and an authored page is left untouched by design (upstream #27055, Target 6). Read on main 47a0666543:
| object | authored page | blocks |
|---|---|---|
| crm_lead | src/sales/pages/lead_detail.page.ts |
11 — path, highlights, 2 alerts, 2 details, 3 related_list, activity, history |
| crm_account | src/sales/pages/account_detail.page.ts (+ account_workbench.page.ts) |
1 — chatter |
| crm_opportunity | src/sales/pages/opportunity_detail.page.ts |
10 — path, highlights, 2 alerts, details, 3 related_list, activity, reference_rail |
| crm_case | src/service/pages/case_detail.page.ts |
6 — path, highlights, alert, details, related_list, activity |
The line items are side cards today: crm_quote_line_item.crm_quote and crm_opportunity_line_item.crm_opportunity are Field.masterDetail(...) with relatedListColumns only — no inlineEdit, no relatedList: 'primary' — so on a quote or an opportunity the lines sit in the right column instead of the body. Maintainer, 2026-10-28, verbatim: 「如果是一个报价单,明细行的子表放在右侧合适嘛?」 — the v3 rule puts a record's own line items in the body (upstream #27055 Target 8, #27069).
Target
- All four authored full pages retire in favour of the synthesized v3 page (maintainer, 2026-10-29, verbatim: 「是,把 hotcrm#2382 改成四张页全部退成默认页,只把告警留作单槽覆盖;商机参考栏和客户 chatter 删掉。」). What each page carried beyond the default, read on
main47a0666543: the conditionalrecord:alertbanners (lead: 2, oneerror-level qualification state; opportunity: 2info; case: 1error), the opportunity'srecord:reference_rail, the account'srecord:chatter. Only the alerts survive, as akind: 'slotted'page that overrides one slot per object (the slot the v3 page reserves for banners; if no slot fits, say so in the PR and hold the alerts in the first details slot) — everything else (path, highlights, details sections fromfieldGroups, related cards, activity, history, discussion) is the default. The opportunity's reference rail and the account's chatter block are deleted outright: the v3 related column and the merged timeline cover them.account_workbench.page.tsandhome.page.tsare not record pages and stay. Document the disposition per block in the PR body. crm_quote_line_item.crm_quoteandcrm_opportunity_line_item.crm_opportunity: declareinlineEditwhere the line is edited on the parent (quantity, unit price, discount) orrelatedList: 'primary'where it is read-only there, so the lines render as a full-width body table after the first field group; keeprelatedListColumnsas the table's columns.- Optional, same PR if cheap:
relatedListson crm_lead / crm_account / crm_opportunity / crm_case declaring the business order of their related cards (upstream #27069), replacing the derived order where the sales flow wants a different one. - Screenshots of lead / opportunity / quote on the v3 page at 1440, before / after, on the never-merged evidence branch.
Acceptance
- The four objects render the v3 page with every authored piece that survives placed through a slot; no regression on the lead path, the alerts or the opportunity rail.
- A quote and an opportunity show their lines as a body table with paging and the declared columns; the right column no longer carries them.
objectstack validate/ the package publish accept the new declarations.
Filed by the epic PM session session_cdb7a717-def7-4e71-9988-f089fbaa18ff on 2026-10-29 on the maintainer's instruction (verbatim: 「在 hotcrm 仓立 HotCRM 迁移卡:lead/account/opportunity/case 的 authored kind: full 页迁到 v3 默认页,quote/opportunity 明细行声明进正文。」), from the record-page v3 epic objectstack-ai/objectstack#26676. Held until the upstream release is installable (the Restart-when: line).
Activity