① 基本信息
| 问题描述 | 并网资料,互联网用户上传附件之后,点击一次提交,刷新之后又出现提交按钮,以为点击了没有效果又快速点击一次提交按钮,刷新之后流程为专业审核,互联网侧目标环节处理人是自己,三区专业审核人员没有提交和回退按钮,查看流程显示专业审核处理人是正确的。建议互联网侧点击一次提交之后刷新就把提交按钮隐藏掉 |
|---|---|
| 一级模块 | 并网资料流程 |
| 二级模块 | 并网资料流程 |
| 涉及类型 | 集中式新能源 |
| 严重性 | 严重 |
| 是否阻断流程 | 是 |
| 当前状态 | 2.1.待开发 |
| 研发处理人 | 周小龙 |
| 处理状态 | 待调整 |
② 问题截图
③ 旧代码涉及的项目文件及行数(backup730/730backup 分支)
xnybw5f / src/approval/projectData/component/batchInfo.vue
第 1693、1701-1702、1709-1710 行("提交"按钮 v-if 显示条件,依赖 informationFlow.currentUserId)
xnybw5b / src/main/java/cn/csg/so/oms/in/newenergy/project/appservice/NePjInfoFlowAppService.java
第 413-545 行(sendTask 提交方法,中间节点未回写 currentUserId)
④ 代码现状与修复方案
这条问题看似是"提交按钮刷新后又出现"的纯 UI 交互问题,但深挖一层会发现它和第79/87行是同一处后端缺陷的连带表现——"提交"按钮是否显示,前端用的正是 informationFlow.currentUserId 是否包含当前登录人来判断:
<el-button v-if="!scope.row.folderFlag && allButtonShow && (
(!scope.row.informationFlow) ||
(scope.row.informationFlow && scope.row.informationFlow.taskDefKey !== '-1' &&
scope.row.informationFlow.currentUserId &&
scope.row.informationFlow.currentUserId.indexOf(storeCurrentUserId) !== -1) // 关键判断:currentUserId里含"我",才显示"提交"按钮
)" type="text" :loading="sendLoading" @click="submitFlow(scope.row, scope.$index, infoItem)">提交</el-button> // 第1693行
而 NePjInfoFlowAppService.sendTask() 把流程从"编制"推进到"专业审核"这类中间节点后,没有把 currentUserId 重新赋值为真正的下一节点处理人(详见 solution-79.html 的完整分析),落库后这个字段仍然是提交人自己。刷新页面重新拉取列表数据时,前端上面这段 v-if 条件用"自己的ID"去匹配这个仍然等于"自己"的 currentUserId,条件自然仍然成立——"提交"按钮就又出现了,与测试人员观察到的现象完全吻合。
这正好解释了台账描述里"查看流程显示专业审核处理人是正确的"这一细节:
NePjInfoFlowAppService.sendTask() 调用的 flowService.sendFlow(...) 是把任务真正分派给了正确的专业审核人(流程引擎内部路由没有问题,"查看流程"弹窗读的是流程引擎自己的历史记录表,所以显示正确);但 informationFlow.currentUserId 这个业务字段没有跟着同步更新,导致列表页"提交"按钮的显示判断和"当前处理人"展示都还停留在"自己",两个表现(按钮误现 + 处理人显示自己)本质上是同一次落库遗漏引发的两个连带症状,不是两个独立问题。
建议修复方式:根本修复仍是第79行方案里给出的——在 sendTask() 中间节点分支补齐 currentUserId/currentUserName 的重新赋值。除此之外,针对本行测试人员提出的"点击提交后刷新就应该隐藏提交按钮"这个交互建议,可以在前端再加一层防抖兜底,避免即使后端字段短暂未同步,用户也不会被诱导重复点击:
submitFlow(_row, rowIndex, item) {
if (_row._submitting) return // 本地防抖:本行已在提交中,直接忽略再次点击
this.$set(_row, '_submitting', true)
... // 原有提交逻辑
// 提交成功回调里,无论后端是否已正确刷新currentUserId,先用本地标记临时隐藏按钮
// 待 searchFormFun 重新拉取数据后,由服务端修复后的 currentUserId 自然接管显示判断
}
但请注意,仅做前端防抖只能缓解"重复点击"这一交互体验问题,无法根治"互联网侧目标环节处理人显示自己"这一数据展示错误,务必配合 solution-79.html 的后端修复一并处理。