docs: mark transport plan copy design implemented

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-08-06 23:33:48 +08:00
1 parent e1f31dc10f
commit 9788e3ac17
9 files changed
+4605 -3998

No files matched your search

@@ -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:** 在运输计划列表支持「复制」:打开新增弹窗并预填可复制字段,用户保存后走现有 `createFull` 建新单。
@@ -29,7 +29,7 @@
**Files:**
- Modify: `web-admin/src/components/business/pl-plan-form-dialog/index.vue`
- [ ] **Step 1: 扩展 props 与复制态计算属性**
- [x] **Step 1: 扩展 props 与复制态计算属性**
在现有 props 上增加 `copyFromPlanId`:
@@ -47,7 +47,7 @@ const isCopy = computed(() => !props.planId && !!props.copyFromPlanId)
`dialogTitle` / `saveButtonLabel` / `showSaveAndArrange` 继续按 `isEdit` 判断(复制视为新增,标题「新增运输计划」)。
- [ ] **Step 2: 复制专用产品行映射**
- [x] **Step 2: 复制专用产品行映射**
在 `mapPlanProductToFormRow` 旁新增(或改其调用方),保证复制行:
@@ -70,7 +70,7 @@ function mapPlanProductToCopyFormRow(item: PlanProduct, index: number): PlanForm
}
```
- [ ] **Step 3: 实现 `loadPlanForCopy`**
- [x] **Step 3: 实现 `loadPlanForCopy`**
以 `loadPlanForEdit` 为模板,差异如下:
@@ -99,7 +99,7 @@ function mapPlanProductToCopyFormRow(item: PlanProduct, index: number): PlanForm
}
```
- [ ] **Step 4: 接入 `handleOpened` 与日期 watch**
- [x] **Step 4: 接入 `handleOpened` 与日期 watch**
`handleOpened`:
@@ -129,7 +129,7 @@ watch(
)
```
- [ ] **Step 5: 自测表单组件逻辑(代码审查清单)**
- [x] **Step 5: 自测表单组件逻辑(代码审查清单)**
确认:
@@ -137,7 +137,7 @@ watch(
- `buildTransportBlock` 在无车辆时不带 transport(同新增)
- `handleClosed` 仍 `resetForm()` 即可(父组件负责清空 `copyFromPlanId`)
- [ ] **Step 6: Commit**
- [x] **Step 6: Commit**
```bash
git add web-admin/src/components/business/pl-plan-form-dialog/index.vue
@@ -151,7 +151,7 @@ git commit -m "feat(pl): support copy-from plan prefill in plan form dialog"
**Files:**
- Modify: `web-admin/src/views/pl/plan/index.vue`
- [ ] **Step 1: 状态与表单绑定**
- [x] **Step 1: 状态与表单绑定**
增加:
@@ -170,7 +170,7 @@ const copyFromPlanId = ref('')
/>
```
- [ ] **Step 2: 统一打开表单的互斥赋值**
- [x] **Step 2: 统一打开表单的互斥赋值**
```ts
function handleAdd() {
@@ -197,7 +197,7 @@ function handleToolbarCopy() {
}
```
- [ ] **Step 3: 工具栏按钮**
- [x] **Step 3: 工具栏按钮**
在「新增计划」后增加(`btn-ghost`,仅单选可点):
@@ -213,7 +213,7 @@ function handleToolbarCopy() {
`CopyDocument` 加入 `@element-plus/icons-vue` 的 import。
- [ ] **Step 4: 查看弹窗 hero-actions**
- [x] **Step 4: 查看弹窗 hero-actions**
在「编辑」按钮旁增加「复制」(**无** `canEditPlan` 限制,任意状态可复制):
@@ -225,7 +225,7 @@ function handleToolbarCopy() {
放在编辑按钮之后(或编辑之前;与编辑并列即可)。不强制关闭查看弹窗。
- [ ] **Step 5: Commit**
- [x] **Step 5: Commit**
```bash
git add web-admin/src/views/pl/plan/index.vue
@@ -240,17 +240,17 @@ git commit -m "feat(pl): add copy entry on transport plan list and view dialog"
- Modify: `docs/superpowers/specs/2026-08-06-pl-plan-copy-design.md`
- 本计划文件勾选完成项
- [ ] **Step 1: 设计文档状态**
- [x] **Step 1: 设计文档状态**
将文首 `**状态:** 设计已确认` 改为 `**状态:** 已实现`。
- [ ] **Step 2: 更新知识图谱**
- [x] **Step 2: 更新知识图谱**
```bash
./scripts/update-graph.sh frontend
```
- [ ] **Step 3: 浏览器走查**
- [x] **Step 3: 浏览器走查**
打开 `http://localhost:3006/#/pl/plan-module/plan`:
@@ -260,7 +260,7 @@ git commit -m "feat(pl): add copy entry on transport plan list and view dialog"
4. 对已作废或已归档计划从查看弹窗复制,可打开预填
5. 0 条 / 多条勾选时工具栏「复制」禁用;编辑入口仍正常
- [ ] **Step 4: Commit**
- [x] **Step 4: Commit**
```bash
git add docs/superpowers/specs/2026-08-06-pl-plan-copy-design.md docs/superpowers/plans/2026-08-06-pl-plan-copy.md
@@ -1,7 +1,7 @@
# 运输计划「复制」:新增弹窗预填
**日期:** 2026-08-06
**状态:** 设计已确认
**状态:** 已实现
**选定方案:** 方案 1 — 纯前端预填(打开「新增运输计划」弹窗,映射可复制字段;保存仍走现有 `createFull`)
## 1. 目标
+4 -4
View File
@@ -1355,8 +1355,8 @@
"semantic_hash": ""
},
"src/components/business/pl-plan-form-dialog/index.vue": {
"mtime": 1785974030.3907259,
"ast_hash": "b9de8e039365835574967274a17d2d81",
"mtime": 1786029438.3556974,
"ast_hash": "5df498319828b931249d2486c4a2c01c",
"semantic_hash": ""
},
"src/components/business/pl-plan-hazard-cert-view-table/index.vue": {
@@ -3680,8 +3680,8 @@
"semantic_hash": ""
},
"src/views/pl/plan/index.vue": {
"mtime": 1785969729.1505501,
"ast_hash": "6b44256ab21702d9a366d82da026ec91",
"mtime": 1786029833.42533,
"ast_hash": "54c1be9b5906af5f390d3f7ce6d510f6",
"semantic_hash": ""
},
"src/views/pl/self-vehicle/index.vue": {
@@ -137,14 +137,19 @@
"135": "handleSearch",
"136": "Community 136",
"137": "Community 137",
"138": "highlight.ts",
"140": "Community 140",
"141": "Community 141",
"142": "Community 142",
"143": "index.js",
"144": "Community 144",
"146": "ArtException.vue",
"147": "canDeleteByCreator",
"148": "Community 148",
"149": "v2.4.2.1 - 2025-06-16",
"150": "Community 150",
"151": "Community 151",
"152": "zh_CN.js",
"161": "Community 161",
"162": "Community 162",
"164": "Community 164",
@@ -120,29 +120,38 @@
"118": "zh_CN.js",
"119": "Community 119",
"120": "Community 120",
"121": "fetchData",
"122": "form.vue",
"123": "detail.vue",
"124": "index.vue",
"125": "Community 125",
"126": "Community 126",
"127": "loadUserOptions",
"128": "Community 128",
"129": "Community 129",
"130": "applySortAndPage",
"131": "detail.vue",
"132": "Community 132",
"133": "Community 133",
"134": "handleSubmit",
"135": "handleSearch",
"136": "Community 136",
"137": "Community 137",
"138": "handleEdit",
"139": "zh_CN.js",
"138": "highlight.ts",
"139": "index.vue",
"140": "Community 140",
"141": "Community 141",
"142": "Community 142",
"143": "index.js",
"144": "Community 144",
"145": "canPreview",
"146": "ArtException.vue",
"147": "canDeleteByCreator",
"148": "Community 148",
"149": "v2.4.2.1 - 2025-06-16",
"150": "Community 150",
"151": "Community 151",
"152": "zh_CN.js",
"161": "Community 161",
"162": "Community 162",
"164": "Community 164",
@@ -291,7 +300,6 @@
"460": "Community 460",
"462": "Community 462",
"465": "index.vue",
"470": "Ta",
"471": "Community 471",
"472": "Community 472",
"473": "Community 473",
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff