tasks.md 18 KB

代码应用元数据配置化任务清单

Task 1 SDD 文档

  • 创建 code-copilot/changes/code-app-metadata-config/spec.md
  • 创建 code-copilot/changes/code-app-metadata-config/tasks.md
  • 创建 code-copilot/changes/code-app-metadata-config/test-spec.md
  • 创建 code-copilot/changes/code-app-metadata-config/execution-log.md

Task 2 后端元数据保存与合并

  • 修改 BusinessFlowAppConfigService:代码应用保存时把 dto.options.codeAppMetadata 合并进 flowBinding.options
  • 修改 BusinessFlowAppConfigService:代码应用读取时返回 options.codeAppMetadata 和配置后的 formAssets
  • 修改 BusinessFlowService#getFormAssets:代码 Provider 默认资产与 binding_config.options.codeAppMetadata 合并。
  • 修改 BusinessFlowService#buildBusinessCodeFormContext:待办上下文按配置化字段目录过滤 Provider 返回字段。
  • 保持无配置时 Provider 默认资产完全兼容。

Task 3 复用现有表单/列表/详情设计器

  • 删除错误新增的 BusinessCodeAppMetadataPanel.vue 字段配置面板。
  • 修改 BusinessFlowAppConfigPanel.vue:代码应用业务配置中心只保留“流程配置”。
  • 修改 object-designer.[objectCode].vue:代码应用左侧开放“表单设计”“列表设计”“业务流程配置”。
  • 代码应用进入设计器时从 Provider/formAssets 初始化 fields/modelSchema/formDesignerSchema/viewSchema/pageSchema
  • 表单设计保存复用 BusinessFormDesigner.syncDesignerDraft() 输出 formDesignerSchema
  • 列表设计保存复用 BusinessListDesigner.syncDesignerDraft() 输出 viewSchema.list.columns
  • 详情设置保存复用 BusinessDetailDesigner.syncDesignerDraft() 输出 viewSchema.detail.sections
  • 保存应用配置时携带 options.codeAppMetadata,不丢失流程绑定配置。

Task 4 采购审批列表/详情消费配置

  • 新增前端 composable useCodeAppMetadata.js
  • 修改 purchase-order-test.vue:加载 sample_purchase_order 代码应用元数据。
  • 列表列按 LIST 配置过滤和排序。
  • 详情弹窗字段按 DETAIL 配置过滤。
  • 无配置时保持现有默认列和详情字段。

Task 5 验证

  • 读取 code-copilot/rules/automated-testing-standard.md
  • 编写 test-spec.md
  • 执行前端 eslint。
  • 执行后端 Maven 编译。
  • 执行 git diff --check
  • 追加 execution-log.md

Task 6 流程节点权限缺陷修复

  • 修改 SamplePurchaseOrderServiceImpl#ensureFlowModel:已存在且 BPMN XML 非空的采购流程模型不再被示例代码覆盖。
  • 修改 flow 表单信息接口/client:支持按 processInstanceId/businessKey/processDefKey/taskDefKey 兜底读取 BPMN 节点表单配置。
  • 修改 BusinessFlowService#resolveFlowNodeForm:任务表单信息为空或不完整时合并流程表单信息,确保 formFieldPermissions 进入业务表单上下文。
  • 修改 useBusinessTaskFormContext:显式字段权限存在时,未配置字段默认可见但不可编辑。
  • 修改 purchase-order-test.vue:待办模式先加载业务表单上下文,再按上下文定位采购单;顶部采购单信息同步叠加节点字段权限。
  • 执行本轮前后端增量验证并追加 execution-log.md

Task 7 代码应用字段基准与表单显隐兼容

  • 修改 BusinessFlowService#mergeCodeAppAssets:Provider 当前字段作为基准,codeAppMetadata 只叠加显示属性,避免保存一次后丢失业务表新增字段。
  • 修改 BusinessFlowService#applyBusinessCodeMetadataFields:审批上下文字段过滤识别 formVisible=false,应用管理表单隐藏对待办代码表单生效。
  • 修改 object-designer.[objectCode].vue:代码应用进入设计器时合并 Provider 资产和已保存 metadata,自动补齐表单、列表、详情默认 schema。
  • 修改 createDefaultFormDesignerSchema:支持代码应用显式包含只读字段,便于用既有表单设计器配置展示/隐藏。
  • 修改 BusinessDetailDesigner:无 editZone 字段时从 viewSchema.detail.sections 兜底显示详情字段。
  • 修改 useCodeAppMetadatapurchase-order-test.vue:新增 FORM 字段读取,采购新增/编辑/待办表单消费应用管理表单显隐配置。
  • 执行本轮 eslint、后端编译、前端构建和 git diff --check,追加 execution-log.md

Task 8 业务表单资产与流程全局表单接入

  • 修改 BusinessFlowAppConfigPanel.vue:代码应用增加“业务表单资产”配置步骤,可维护表单名称、formKey、formUrl、Provider、说明等通用资产信息。
  • 修改 BusinessFlowAppConfigPanel.vue:保存代码应用时把业务表单资产配置合并进 options.codeAppMetadata.formAssets,不覆盖表单/列表/详情设计器输出。
  • 修改 object-designer.[objectCode].vue:代码应用保存流程配置时同步当前表单资产配置,避免只保存流程绑定导致资产配置丢失。
  • 修改 flow/design.vue:业务对象上下文下的全局“表单配置”切换为应用表单资产选择;独立流程保留动态表单设计。
  • 修改 flow/design.vue:保存流程模型时保存业务全局表单引用,并让节点字段目录优先使用全局表单资产字段。
  • 修改流程设计器节点配置:节点表单未配置时继承全局表单资产字段目录,节点抽屉仍只配置字段权限。
  • 修改后端 BusinessFlowService:解析待办表单时支持流程全局业务表单引用作为节点表单缺省值。
  • 清理采购审批示例 Provider 中不必要的资产主配置逻辑,仅保留默认兜底和运行适配。
  • 执行本轮增量验证并追加 execution-log.md

Task 9 业务表单资产提示与设计器空白修正

  • 修改 BusinessCodeAppFormAssetPanel.vue:隐藏重复的应用名称、业务对象名称、业务名称编辑项,改为只读业务对象摘要。
  • 修改 BusinessCodeAppFormAssetPanel.vue:Provider 改为选择已注册 Provider,并增加来源说明提示。
  • 修改 object-designer.[objectCode].vue:代码应用表单资产合并改为配置优先,同时保留 Provider 默认字段和 metadata 额外资产。
  • 修改 object-designer.[objectCode].vue:旧配置只有空 pageSchema/formDesignerSchema 时,按当前 Provider 字段补齐左侧表单设计、列表设计和详情设置需要的 schema。
  • 执行本轮前端 eslint、前端构建和 git diff --check,追加 execution-log.md

Task 10 Provider 目录与字段兜底协议修正

  • 修改 BusinessCodeFormProviderRegistry:提供所有已注册 BusinessCodeFormProvider Bean 的 Provider 目录和默认资产字段。
  • 修改 BusinessFlowService#getFormAssets:返回 providerCatalog,让前端 Provider 下拉不依赖当前表单资产是否已配置。
  • 修改 BusinessFlowAppConfigService:已有 ai_business_object 的代码应用也补齐 options.codeApp/codeAppMetadata
  • 修改 BusinessCodeAppFormAssetPanel.vue:配置顺序改为先选 Provider,表单 Key 改为系统引用展示,不再作为可编辑项。
  • 修改 object-designer.[objectCode].vue:字段基准从当前 Provider 资产读取,取不到时使用 providerCatalog[].assets[].fields 兜底。
  • 执行本轮前端 eslint、后端编译、前端构建和 git diff --check,追加 execution-log.md

Task 11 已有代码应用对象的设计器入口修正

  • 修改 object-designer.[objectCode].vue:嵌入式设计器也按 objectCode 拉完整业务对象,识别 options/designerOptions.codeApp=true
  • 修改 object-designer.[objectCode].vue:已有 ai_business_object 的代码应用不再调用普通 businessObjectDesigner(object.id),强制走 Provider/formAssets 字段导入路径。
  • 修改 BusinessFlowAppConfigService:已有业务对象的代码应用保存 options.codeAppMetadata 时也写入流程绑定 options,避免表单设计/列表设计保存后丢失。
  • 执行本轮前端 eslint、后端编译、前端构建和 git diff --check,追加 execution-log.md

Task 12 待办节点展示与业务上下文查询优化

  • 修改流程列表共享展示工具:节点名称展示时去掉尾部 taskDefKey/activityId 技术编码。
  • 修改待办、已办、我发起页面:列表元信息、抽屉副标题、基础信息和批量处理错误提示统一使用业务可读节点名。
  • 修改 BusinessFlowService#enrichBusinessListDisplay:同一列表请求内按业务对象缓存运行上下文,避免每条任务重复解析业务单据配置。
  • 修改 BusinessFlowService#resolveTaskFormRuntimeContext:审批表单上下文一次解析 canonical object、运行配置和单据配置,避免重复查询。
  • 执行本轮前端 eslint、前端构建、后端编译和 git diff --check,追加 execution-log.md

Task 13 审批表单加载误查流程模型和动态表单修正

  • 修改 FlowTaskServiceImpl:流程定义 Key 从 Flowable ProcessDefinition.getKey() / BPMN process id 解析,不再把 UUID 型 processDefinitionId 当作 sys_flow_model.model_key 查询。
  • 修改 FlowTaskServiceImpl:节点 formKey 引用流程全局业务表单时识别为 formType=business,不再当动态表单去查 sys_flow_form
  • 修改 FlowTaskServiceImpl:节点表单配置读取兼容 formMode/formType/type,支持 BUSINESS_CODE_FORMBUSINESS_OBJECT_FORM
  • 修改 BusinessFlowService#loadFlowNodeFormInfotaskId 已返回完整表单信息时不再额外调用流程实例表单信息接口,减少同请求重复查询。
  • 执行本轮后端编译和 git diff --check,追加 execution-log.md

Task 14 流程定义匹配兼容修正

  • 修改 FlowTaskServiceImpl#getTaskDetail:任务详情返回前把 processDefKey 归一化为流程模型 Key,避免把 Flowable UUID 或 key:version:id 透出给业务校验。
  • 修改 BusinessFlowService#validateTaskAccess:流程定义校验改为兼容 keykey:version:id 和历史 UUID 表示,不再误报“流程定义与当前任务不匹配”。
  • 保留任务 ID、办理人、流程实例、业务 Key 和任务节点校验,避免兼容流程定义表示时放开任务访问边界。
  • 执行本轮后端编译和 git diff --check,追加 execution-log.md

Task 15 待办审批详情表单首屏优化

  • 修改 todo.vue:审批抽屉打开时并行加载流程表单信息和业务表单上下文,不再先等流程表单信息返回后再串行加载业务上下文。
  • 修改 FlowBusinessForm.vue:支持把父级已加载的业务表单上下文透传给自定义业务组件。
  • 修改 purchase-order-test.vue:待办模式优先复用父级 initialTaskContext.recordData 渲染采购审批表单,避免重复请求业务上下文、代码应用配置和采购单详情。
  • 修改 useBusinessTaskFormContext:支持注入已加载上下文,并让字段显示/编辑判断直接基于上下文字段目录。
  • 执行本轮前端 eslint、前端构建和 git diff --check,追加 execution-log.md

Task 16 流程定义校验兜底与首屏请求参数收敛

  • 修改 todo.vue:待办详情首个业务表单上下文请求只传可信 taskId,不再从列表行携带可能未归一化的 processDefKey
  • 修改 todo.vue#buildBusinessTaskFormQueryprocessDefKey 只接受已加载表单信息中的归一化值,不再回退到待办列表行字段。
  • 修改 BusinessFlowService#assertProcessDefinitionMatches:流程定义表示差异只记录调试日志,不作为硬安全边界抛错。
  • 保留任务 ID、办理人、流程实例、业务 Key 和任务节点校验,避免参数收敛影响任务访问控制。
  • 执行本轮前端 eslint、后端编译和 git diff --check,追加 execution-log.md

Task 17 审批详情表单重复请求与后端重复解析优化

  • 修改 todo.vue:审批详情先加载业务表单上下文;若已识别为业务对象/业务代码表单,则不再额外请求 /api/flow/task/form/{taskId}
  • 修改 BusinessTaskFormContextVOBusinessFlowService:业务表单上下文返回节点审批策略,避免跳过前端表单接口后丢失同意/驳回/转办/签名/意见配置。
  • 修改 FlowTaskServiceImpl#getTaskFormInfo:复用同一次请求内已解析的流程模型和 BPMN 节点,避免 sys_flow_model 与 BPMN 解析重复执行。
  • 修改 FlowTaskServiceImpl:业务表单不再查询 sys_flow_form_instance 快照,动态表单才加载表单实例快照。
  • 执行本轮前端 eslint、后端编译和 git diff --check,追加 execution-log.md

Task 18 采购审批业务表单节点标签去编码

  • 修改 purchase-order-test.vue:审批详情业务表单头部节点标签不再直接渲染 taskDefKey
  • 复用流程节点展示清洗工具 getTaskDisplayName,优先使用后端节点名并清理尾部技术编码,缺省时按采购节点映射中文名称兜底。
  • 执行本轮前端 eslint 和 git diff --check,追加 execution-log.md

Task 19 应用中心业务单元编辑

  • 新增 BusinessObjectEditorDrawer.vue:支持编辑所属业务域、业务单元名称、对象类型、图标、排序、启用状态和业务说明,对象编码只读。
  • 修改应用总览 index.vue:业务单元卡片菜单增加“编辑业务单元”,保存后刷新工作区。
  • 修改业务域详情 suite.[suiteCode].vue:对象卡片菜单增加“编辑业务单元”,跨业务域保存后切换到新业务域。
  • 修改业务单元详情 object.[objectCode].vue:顶部增加“编辑业务单元”按钮,保存后刷新详情并同步 URL 业务域参数。
  • 修改 BusinessObjectServiceBusinessObjectMapper:跨业务域移动时同步迁移访问入口、设计版本、触发器和单据配置;存在对象关系时阻止移动。
  • 执行本轮前端 eslint、后端编译和 git diff --check,追加 execution-log.md

Task 20 业务单元显示字段配置收敛

  • 修改 BusinessObjectWizardDrawer.vue:新建业务单元不再展示“显示字段”,避免用户在字段未设计前手输编码。
  • 修改 BusinessObjectEditorDrawer.vue:基础编辑抽屉不再展示“显示字段”,保存时保留已有对象级默认值。
  • 修改 object-designer.[objectCode].vue:对象设计器基础信息文案改为“默认标题字段”,明确它只是关联关系未单独配置时的兜底。
  • 保持 BusinessRelationDesigner.vue 里的“运行态显示字段 / 目标对象回显字段”作为关联关系主配置入口。
  • 执行本轮前端 eslint 和 git diff --check,追加 execution-log.md

Task 21 表单资产移除、标题模板和停用确认

  • 修改 BusinessCodeAppFormAssetPanel.vue:业务表单资产支持移除,并保存 removedFormAssetKeys
  • 修改 BusinessFlowService#mergeCodeAppAssets:合并 Provider 默认资产时过滤已移除资产,避免保存后重新出现。
  • 修改 SamplePurchaseOrderServiceImpl#submit:采购审批发起流程时读取绑定配置 titleTemplate 生成流程标题。
  • 修改应用总览、业务域详情和业务单元详情:业务域/业务单元停用前二次确认,删除保留既有确认。
  • 修改 SuiteEditorDrawer.vueBusinessObjectEditorDrawer.vue:编辑抽屉中把启用状态改为停用并保存时二次确认。
  • 执行本轮前端 eslint、后端编译和 git diff --check,追加 execution-log.md

Task 22 采购审批驳回状态修正

  • 修改 FlowTaskServiceImpl#completeTask:任务 complete 前先把审批动作变量写入流程实例,保证任务完成监听器能读到 approvalResult/approved
  • 修改 SamplePurchaseOrderServiceImpl#handleTaskCompleted:采购审批回调同时识别 approvalResult=rejectapproved=false
  • 执行本轮后端编译和 git diff --check,追加 execution-log.md

Task 23 采购审批申请人修改状态兜底

  • 修改 SamplePurchaseOrderServiceImpl#handleFlowEvent:订阅 TASK_CREATED,申请人修改任务创建时把采购单状态同步为 NEED_MODIFY
  • 修改 SamplePurchaseOrderServiceImpl#saveTaskFields:存量申请人修改待办保存时,如果采购单仍是 IN_PROCESS,先自愈为 NEED_MODIFY 再保存字段。
  • 执行本轮后端编译和 git diff --check,追加 execution-log.md

Task 24 采购审批重新提交状态兜底

  • 修改 SamplePurchaseOrderFlowDefinition:增加采购审批普通审批节点判断,统一识别部门负责人、工程部经理和采购会签节点。
  • 修改 SamplePurchaseOrderServiceImpl#handleTaskCreated:普通审批任务创建时,如果采购单仍是 NEED_MODIFY,同步为 IN_PROCESS
  • 修改 SamplePurchaseOrderServiceImpl#saveTaskFields:存量审批待办保存时,如果采购单仍是 NEED_MODIFY,先自愈为 IN_PROCESS 再保存字段。
  • 执行本轮后端编译和 git diff --check,追加 execution-log.md

Task 25 采购审批存量状态对账

  • 修改 SamplePurchaseOrderMapper:增加按业务 Key 批量查询当前活跃待办节点的 XML 查询。
  • 修改 SamplePurchaseOrderServiceImpl#page/detail/detailsByIds:返回前按活跃待办节点对 IN_PROCESS/NEED_MODIFY 状态做对账修复。
  • 执行本轮后端编译和 git diff --check,追加 execution-log.md