Skip to content

Dev - #75

Merged
xlorne merged 14 commits into
mainfrom
dev
Nov 12, 2026
Merged

Dev#75
xlorne merged 14 commits into
mainfrom
dev

Conversation

@xlorne

@xlorne xlorne commented Nov 12, 2026

Copy link
Copy Markdown
Contributor

No description provided.

- 11 个 @coding-flow/* 包统一升级至 0.2.20
- 同步更新各包 CHANGELOG
- 允许执行 git commit / git push,提交前需完成本地编译与测试验证
- 明确禁止主动执行 git merge、自行合并或关闭 PR,dev / main 的合并由用户决定
- flow-types:ActionType 增加 REDUCE_AUDIT,actionOptions 增加「减签」
- flow-core:FlowMessageKey.APPROVAL_REDUCE_AUDIT 及默认文案
- flow-approval-presenter:新增 ReduceAuditViewPlugin,供集成方替换减签人员选择视图
- flow-pc-approval / flow-mobile-approval:新增减签按钮与提交逻辑(advice.forwardOperatorIds),ActionFactory 注册
- flow-design:新增减签动作配置(人员范围 script),ActionFactory 注册
- 补充 PC / 移动端 / 设计器的动作注册单元测试
- PC / 移动端:合并待办(todos > 1)未勾选流程记录时拦截所有动作,
  不再以「表单已有数据」替代选择;取消勾选同步清空已选记录
- PC 合并记录表格:选择为空时也回传(此前空数组不回调,导致残留上次选择)
- 设计器:相同人员提交配置未配置时展示「手动审批」,与后端实际行为一致(issue #224)
- changeset 补充 flow-pc-form 与本次修复说明
fix: 合并审批必须选择流程后才能提交;相同人员配置默认展示手动审批 (#72)
- FlowAction 增加 batchable 标记,ActionType 补充 REDUCE_AUDIT
- FlowActionPresenter 新增 isBatchable,非批量动作只提交当前详情记录
- PC/移动端合并审批不再强制要求为非批量动作勾选流程
- 新增 action-batchable 单测
- FlowContent 类型增加 currentNodeOperators
- PC/移动端默认减签视图列出当前节点待审批人,不再使用发起人占位
- 合并列表隐藏 batchable=false 的动作(减签),只在查看单条流程时展示
- 查看单条流程时按该记录重新取 detail,切换 actions/currentNodeOperators,返回时恢复
- 单条流程状态下的提交目标固定为该记录(不再循环合并勾选)
- PC 表格与移动端单条列表均接入,审批状态新增 mergeSingleRecordId
- 隐藏条件由 mergeable 改为「确有多条流程合并」(todos.length > 1)
- mergeable 只是节点记录合并策略开关,单条记录时同样为 true,此前会误隐藏 batchable=false 的动作
- PC/移动端同步修正,补充移动端 LayoutPresenter 用例
- 批量模式勾选残留会导致逐条模式下点通过仍按旧勾选批量提交
- 进入逐条模式时恢复合并列表口径的按钮与选人范围
- 动作工厂/插件文档补充 REDUCE_AUDIT、9 种动作、8 个子视图插件
- 补充 FlowApprovalApi.resetSubProcess、ApprovalState.mergeSingleRecordId、FlowAction.batchable、currentNodeOperators
- 新增合并审批(合并列表/单条流程)说明,表格化替代长段落
- 补充减签消息键、按钮 key、拦截器范围
场景:合并审批中查看第二条流程再执行减签,请求体携带 formData: {},
被服务端 validation.field.required(Required field formData cannot be empty)
拒绝,减签等动作无法提交。

原因:表单动作固定以 key view-form 注册,FormActionContext 按 key 去重,
只保留了第一条记录的表单实例;查看第二条记录时挂载的是另一实例,
被注册的实例未挂载字段,getFieldsValue() 返回 {}。

- 新增 ActiveFormAction(flow-approval-presenter):只注册一个表单动作,
  保存/校验跟随「当前查看或提交的记录」切换,实例未挂载时用记录初始数据兜底
- PC / 移动端审批表单视图改为按待办记录记忆化表单实例,避免重渲染丢失初始数据
- 合并审批查看单条流程时同步切换表单实例,详情刷新期间提交也不会落到上一条记录
createFormInstance 内部执行 Form.useForm(),本质是 hook 工厂,每次调用都会向
当前组件注册 hook(useRef/useState/useMemo)。上一版按待办记录用 useMemo 缓存
表单实例,导致重渲染时 hook 数量减少,直接抛
`Cannot read properties of undefined (reading 'length')`(areHookInputsEqual),
审批页面崩溃。

- 每次渲染按待办记录调用一次 createFormInstance,维持 hook 调用次数
- 实例通过 useRef 按 recordId 缓存,保证表单实例身份稳定(编辑值、校验依赖同一实例)
- 表单初始值在创建实例时写入,不再依赖挂载后的 resetFields
- 补充回归测试:模拟合并审批状态更新触发重渲染(旧实现可复现崩溃),
  并断言提交的 formData 为当前记录数据而不是空对象
@xlorne
xlorne merged commit ee0daeb into main Nov 12, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant