diff --git a/docs/superpowers/plans/2026-08-07-quote-contract-alias-brand-manage.md b/docs/superpowers/plans/2026-08-07-quote-contract-alias-brand-manage.md index bd274a744..4c77c5764 100644 --- a/docs/superpowers/plans/2026-08-07-quote-contract-alias-brand-manage.md +++ b/docs/superpowers/plans/2026-08-07-quote-contract-alias-brand-manage.md @@ -1,6 +1,6 @@ # 报价/合同明细别名与品牌就地维护 Implementation Plan -> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [x]`) syntax for tracking. **Goal:** 在报价单与合同产品明细的别名/品牌列旁增加维护入口,弹窗内 CRUD 写回产品主数据并立即刷新同行下拉。 @@ -28,7 +28,7 @@ **Files:** - Modify: `web-admin/src/utils/crm-product-brand.ts` -- [ ] **Step 1: 扩展 `LineAliasBrand` 并新增 `applyManagedProductMetaToLines`** +- [x] **Step 1: 扩展 `LineAliasBrand` 并新增 `applyManagedProductMetaToLines`** 在文件末尾(`prepareLineAliasAndBrandForSubmit` 附近)将 `LineAliasBrand` 增加可选 `productId`,并导出: @@ -83,7 +83,7 @@ export function applyManagedProductMetaToLines( 若 `LineAliasBrand` 当前未 export,保持内部 type,函数参数用内联类型或 export 该 type 均可;关键是函数必须 `export`。 -- [ ] **Step 2: Commit** +- [x] **Step 2: Commit** ```bash git add web-admin/src/utils/crm-product-brand.ts @@ -101,7 +101,7 @@ EOF **Files:** - Create: `web-admin/src/components/business/product-alias-brand-dialog/index.vue` -- [ ] **Step 1: 创建完整组件** +- [x] **Step 1: 创建完整组件** 按下列结构实现(样式可从 `product-form-dialog/index.vue` 的 `.sub-card-*` 拷贝到本组件 scoped): @@ -251,7 +251,7 @@ async function submitForm() { 品牌模板完整字段与 `product-form-dialog` 一致(`el-select` + `dictStore.getOptions('crm_product_status')`)。 -- [ ] **Step 2: Commit** +- [x] **Step 2: Commit** ```bash git add web-admin/src/components/business/product-alias-brand-dialog/index.vue @@ -269,7 +269,7 @@ EOF **Files:** - Modify: `web-admin/src/views/crm/quote/components/QuoteFormPanel.vue` -- [ ] **Step 1: 模板 — 别名/品牌列改为「控件 + icon」** +- [x] **Step 1: 模板 — 别名/品牌列改为「控件 + icon」** 将别名列改为(品牌列同理,`mode`/`openManage` 参数换成 brand): @@ -310,7 +310,7 @@ EOF 品牌列:保留现有 `el-select` + `@change="handleBrandIdChange"`,外包同一 `line-meta-cell`,icon 调 `openAliasBrandManage(scope.row, 'brand')`。 -- [ ] **Step 2: 挂载弹窗 + script** +- [x] **Step 2: 挂载弹窗 + script** 在模板合适位置(产品选择器旁)增加: @@ -378,7 +378,7 @@ Scoped 样式: } ``` -- [ ] **Step 3: 手动冒烟(报价)** +- [x] **Step 3: 手动冒烟(报价)** 在 `/#/crm/quote` 打开新增/编辑: @@ -386,7 +386,7 @@ Scoped 样式: 2. 品牌同理 3. 取消弹窗后主数据不变 -- [ ] **Step 4: Commit** +- [x] **Step 4: Commit** ```bash git add web-admin/src/views/crm/quote/components/QuoteFormPanel.vue @@ -404,17 +404,17 @@ EOF **Files:** - Modify: `web-admin/src/views/crm/contract/components/ContractFormDialog.vue` -- [ ] **Step 1: 与 Task 3 相同的列布局、弹窗挂载、`openAliasBrandManage` / `handleAliasBrandManaged`** +- [x] **Step 1: 与 Task 3 相同的列布局、弹窗挂载、`openAliasBrandManage` / `handleAliasBrandManaged`** 区别仅类型为合同产品行(`ExtendedContractProductForm` 或现有行类型),刷新目标为 `form.value.products`。 导入路径、组件名、样式类名与报价保持一致,避免两套 class。 -- [ ] **Step 2: 手动冒烟(合同)** +- [x] **Step 2: 手动冒烟(合同)** 在 `/#/crm/contract` 新增/编辑合同明细:重复报价侧验收;另测「同一产品两行时维护一次两边 options 同步」。 -- [ ] **Step 3: Commit** +- [x] **Step 3: Commit** ```bash git add web-admin/src/views/crm/contract/components/ContractFormDialog.vue @@ -429,7 +429,7 @@ EOF ### Task 5: 验收收尾与图谱 -- [ ] **Step 1: 按 spec §7 全量手工验收** +- [x] **Step 1: 按 spec §7 全量手工验收** | # | 检查项 | |---|--------| @@ -441,13 +441,13 @@ EOF | 6 | 报价与合同行为一致 | | 7 | 取消/关闭不落库 | -- [ ] **Step 2: 更新前端图谱** +- [x] **Step 2: 更新前端图谱** ```bash ./scripts/update-graph.sh frontend ``` -- [ ] **Step 3: 将设计文档状态改为已实现(可选同 commit)** +- [x] **Step 3: 将设计文档状态改为已实现(可选同 commit)** 修改 `docs/superpowers/specs/2026-08-07-quote-contract-alias-brand-manage-design.md` 顶部:`状态:待实现` → `状态:已实现`。