!22 fix(dq): 修复BPM审批界面新增反馈后列表不显示的问题

* fix(dq): 修复BPM审批界面新增反馈后列表不显示的问题
* docs(dq): 更新整改任务BPM节点权限配置文档
* feat(dq): BPM审批界面新增分管所领导字段
* feat(dq): 整改任务表单新增分管所领导字段
* refactor(dq): 是否办结/部门经办人改为写入Flowable流程变量
This commit is contained in:
new_new_new
2026-06-05 09:20:35 +00:00
parent 6230bc7007
commit 6759e000e8
5 changed files with 100 additions and 114 deletions
@@ -33,116 +33,95 @@ showFeedbackInfo → 反馈信息区域(表格 + 表头)
## 整改任务审批流程 ## 整改任务审批流程
### 节点: <措施责任部门经办人发起流程> ### 节点: <责任部门领导接受任务并分配>
* taskDefKey: `<Task_initiator>` * taskDefKey: `<Task_1c64uvl>`
* **edit** `1` —— 基础信息可编辑 * **edit** `1` —— 基础信息可编辑
* **showProcessHandle** `1` —— 流程办理区域 * **showProcessHandle** `1` —— 流程办理区域
* **showSubApproveUser** `0` —— 是否办结 + 部门经办人 * **showSubApproveUser** `1` —— 是否办结 + 部门经办人
* **showFeedbackInfo** `0` —— 反馈信息区域 * **showFeedbackInfo** `1` —— 反馈信息区域
* **showAddFeedback** `0` —— 新增反馈按钮 * **showAddFeedback** `1` —— 新增反馈按钮
* **showEditFeedback** `0` —— 编辑/删除操作列 * **showEditFeedback** `1` —— 编辑/删除操作列
* **showDeptFeedback** `0` —— 按部门过滤反馈 * dq/inspectTask/components/DqInspectTaskBPMForm?showProcessHandle=1&showSubApproveUser=1&showFeedbackInfo=1&showAddFeedback=1&showEditFeedback=1
* **showJiJianFields** `0` —— 纪检字段列
* dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1
--- ---
### 节点: <措施责任部门负责人审批> ### 节点: <部门经办人反馈完成情况并上传附件>
* taskDefKey: `<Task_dept_leader>` * taskDefKey: `<Task_0mbr735>`
* **edit** `0` —— 基础信息只读 * **edit** `1` —— 基础信息可编辑
* **showProcessHandle** `1` —— 流程办理区域
* **showSubApproveUser** `0` —— 是否办结 + 部门经办人
* **showFeedbackInfo** `0` —— 反馈信息区域
* **showAddFeedback** `0` —— 新增反馈按钮
* **showEditFeedback** `0` —— 编辑/删除操作列
* **showDeptFeedback** `0` —— 按部门过滤反馈
* **showJiJianFields** `0` —— 纪检字段列
* dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1
---
### 节点: <党群领导审批>
* taskDefKey: `<Task_party_leader>`
* **edit** `0` —— 基础信息只读
* **showProcessHandle** `1` —— 流程办理区域
* **showSubApproveUser** `0` —— 是否办结 + 部门经办人
* **showFeedbackInfo** `0` —— 反馈信息区域
* **showAddFeedback** `0` —— 新增反馈按钮
* **showEditFeedback** `0` —— 编辑/删除操作列
* **showDeptFeedback** `0` —— 按部门过滤反馈
* **showJiJianFields** `0` —— 纪检字段列
* dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1
---
### 节点: <部门经办人填写进展反馈>
* taskDefKey: `<Task_progress_fill>`
* **edit** `0` —— 基础信息只读
* **showProcessHandle** `1` —— 流程办理区域 * **showProcessHandle** `1` —— 流程办理区域
* **showSubApproveUser** `0` —— 是否办结 + 部门经办人 * **showSubApproveUser** `0` —— 是否办结 + 部门经办人
* **showFeedbackInfo** `1` —— 反馈信息区域 * **showFeedbackInfo** `1` —— 反馈信息区域
* **showAddFeedback** `1` —— 新增反馈按钮 * **showAddFeedback** `1` —— 新增反馈按钮
* **showEditFeedback** `1` —— 编辑/删除操作列 * **showEditFeedback** `1` —— 编辑/删除操作列
* **showDeptFeedback** `1` —— 按部门过滤反馈 * dq/inspectTask/components/DqInspectTaskBPMForm?showProcessHandle=1&showFeedbackInfo=1&showAddFeedback=1&showEditFeedback=1
---
### 节点: <责任部门领导审批>
* taskDefKey: `<Task_0mxtg05>`
* **edit** `0` —— 基础信息只读
* **showProcessHandle** `1` —— 流程办理区域
* **showSubApproveUser** `0` —— 是否办结 + 部门经办人
* **showFeedbackInfo** `0` —— 反馈信息区域
* **showAddFeedback** `0` —— 新增反馈按钮
* **showEditFeedback** `0` —— 编辑/删除操作列
* **showDeptFeedback** `0` —— 按部门过滤反馈
* **showJiJianFields** `0` —— 纪检字段列 * **showJiJianFields** `0` —— 纪检字段列
* dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1&showFeedbackInfo=1&showAddFeedback=1&showEditFeedback=1&showDeptFeedback=1 * dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1
--- ---
### 节点: <部门负责人审批进展> ### 节点: <党群经办人审查>
* taskDefKey: `<Task_progress_leader>` * taskDefKey: `<Task_14226iy>`
* **edit** `0` —— 基础信息只读 * **edit** `0` —— 基础信息只读
* **showProcessHandle** `1` —— 流程办理区域 * **showProcessHandle** `1` —— 流程办理区域
* **showSubApproveUser** `0` —— 是否办结 + 部门经办人 * **showSubApproveUser** `0` —— 是否办结 + 部门经办人
* **showFeedbackInfo** `1` —— 反馈信息区域 * **showFeedbackInfo** `0` —— 反馈信息区域
* **showAddFeedback** `0` —— 新增反馈按钮 * **showAddFeedback** `0` —— 新增反馈按钮
* **showEditFeedback** `0` —— 编辑/删除操作列 * **showEditFeedback** `0` —— 编辑/删除操作列
* **showDeptFeedback** `1` —— 按部门过滤反馈 * **showDeptFeedback** `0` —— 按部门过滤反馈
* **showJiJianFields** `0` —— 纪检字段列 * **showJiJianFields** `0` —— 纪检字段列
* dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1&showFeedbackInfo=1&showDeptFeedback=1 * dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1
--- ---
### 节点: <纪检经办人监察> ### 节点: <党群负责人审批>
* taskDefKey: `<Task_ji_jian>` * taskDefKey: `<Task_0ixi1rs>`
* **edit** `0` —— 基础信息只读 * **edit** `0` —— 基础信息只读
* **showProcessHandle** `1` —— 流程办理区域 * **showProcessHandle** `1` —— 流程办理区域
* **showSubApproveUser** `0` —— 是否办结 + 部门经办人 * **showSubApproveUser** `0` —— 是否办结 + 部门经办人
* **showFeedbackInfo** `1` —— 反馈信息区域 * **showFeedbackInfo** `0` —— 反馈信息区域
* **showAddFeedback** `0` —— 新增反馈按钮
* **showEditFeedback** `1` —— 编辑/删除操作列
* **jiJianFieldsReadonly** `0` —— 弹窗内纪检字段只读
* **nonJiJianFieldsReadonly** `1` —— 弹窗内非纪检字段只读
* **showDeptFeedback** `0` —— 按部门过滤反馈
* **showJiJianFields** `1` —— 纪检字段列
* dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1&showFeedbackInfo=1&showEditFeedback=1&nonJiJianFieldsReadonly=1&showJiJianFields=1
---
### 节点: <纪检负责人审批>
* taskDefKey: `<Task_ji_jian_leader>`
* **edit** `0` —— 基础信息只读
* **showProcessHandle** `1` —— 流程办理区域
* **showSubApproveUser** `0` —— 是否办结 + 部门经办人
* **showFeedbackInfo** `1` —— 反馈信息区域
* **showAddFeedback** `0` —— 新增反馈按钮 * **showAddFeedback** `0` —— 新增反馈按钮
* **showEditFeedback** `0` —— 编辑/删除操作列 * **showEditFeedback** `0` —— 编辑/删除操作列
* **showDeptFeedback** `0` —— 按部门过滤反馈 * **showDeptFeedback** `0` —— 按部门过滤反馈
* **showJiJianFields** `1` —— 纪检字段列 * **showJiJianFields** `0` —— 纪检字段列
* dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1&showFeedbackInfo=1&showJiJianFields=1 * dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1
--- ---
### 节点: <督办经办人确认整改完成> ### 节点: <分管所领导审批>
* taskDefKey: `<Task_confirm>` * taskDefKey: `<Task_0l5ik22>`
* **edit** `0` —— 基础信息只读 * **edit** `0` —— 基础信息只读
* **showProcessHandle** `1` —— 流程办理区域 * **showProcessHandle** `1` —— 流程办理区域
* **showSubApproveUser** `0` —— 是否办结 + 部门经办人 * **showSubApproveUser** `0` —— 是否办结 + 部门经办人
* **showFeedbackInfo** `1` —— 反馈信息区域 * **showFeedbackInfo** `0` —— 反馈信息区域
* **showAddFeedback** `0` —— 新增反馈按钮 * **showAddFeedback** `0` —— 新增反馈按钮
* **showEditFeedback** `0` —— 编辑/删除操作列 * **showEditFeedback** `0` —— 编辑/删除操作列
* **showDeptFeedback** `0` —— 按部门过滤反馈 * **showDeptFeedback** `0` —— 按部门过滤反馈
* **showJiJianFields** `1` —— 纪检字段列 * **showJiJianFields** `0` —— 纪检字段列
* dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1&showFeedbackInfo=1&showJiJianFields=1 * dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1
---
### 节点: <所党委书记审批>
* taskDefKey: `<Task_0g8sc6n>`
* **edit** `0` —— 基础信息只读
* **showProcessHandle** `1` —— 流程办理区域
* **showSubApproveUser** `0` —— 是否办结 + 部门经办人
* **showFeedbackInfo** `0` —— 反馈信息区域
* **showAddFeedback** `0` —— 新增反馈按钮
* **showEditFeedback** `0` —— 编辑/删除操作列
* **showDeptFeedback** `0` —— 按部门过滤反馈
* **showJiJianFields** `0` —— 纪检字段列
* dqinspecttask/components/DqInspectTaskBPMForm?showProcessHandle=1
--- ---
@@ -102,3 +102,7 @@ export const saveBpmForm = (params) => {
export const saveSubApprove = (params) => { export const saveSubApprove = (params) => {
return defHttp.post({ url: '/dqinspecttask/dqInspectTask/saveSubApprove', params }, { isTransformResponse: false }); return defHttp.post({ url: '/dqinspecttask/dqInspectTask/saveSubApprove', params }, { isTransformResponse: false });
}; };
export const setProcessVariable = (params) => {
return defHttp.post({ url: '/act/process/setProcessVariable', params }, { isTransformResponse: false });
};
@@ -210,12 +210,12 @@
} }
saving.value = true; saving.value = true;
try { try {
if (!formData.id && uploadFileRef.value?.hasPendingFiles?.()) { if (!formData.id) {
formData.id = buildUUID(); formData.id = buildUUID();
} }
const res = await progressSaveOrUpdate({ ...formData }, isEdit.value); const res = await progressSaveOrUpdate({ ...formData }, isEdit.value);
if (res.success) { if (res.success) {
if (formData.id && uploadFileRef.value?.hasPendingFiles?.()) { if (uploadFileRef.value?.hasPendingFiles?.()) {
await uploadFileRef.value.bindBussinessId(formData.id); await uploadFileRef.value.bindBussinessId(formData.id);
} }
createMessage.success(res.message || '保存成功'); createMessage.success(res.message || '保存成功');
@@ -73,6 +73,11 @@
<j-select-dept v-model:value="mainForm.measureResDept" :disabled="mainDisabled" :multiple="true" checkStrictly allow-clear /> <j-select-dept v-model:value="mainForm.measureResDept" :disabled="mainDisabled" :multiple="true" checkStrictly allow-clear />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12">
<a-form-item label="分管所领导" name="chargeLeaderId">
<j-select-user v-model:value="mainForm.chargeLeaderId" :disabled="mainDisabled" allow-clear />
</a-form-item>
</a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item label="整改交付成果" name="rectificationEvidence"> <a-form-item label="整改交付成果" name="rectificationEvidence">
<a-input v-model:value="mainForm.rectificationEvidence" :disabled="mainDisabled" allow-clear /> <a-input v-model:value="mainForm.rectificationEvidence" :disabled="mainDisabled" allow-clear />
@@ -234,7 +239,7 @@
import JSelectUser from '/@/components/Form/src/jeecg/components/JSelectUser.vue'; import JSelectUser from '/@/components/Form/src/jeecg/components/JSelectUser.vue';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue'; import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import Icon from '/@/components/Icon/index'; import Icon from '/@/components/Icon/index';
import { saveBpmForm, saveSubApprove, specificProblemOptions } from '../DqInspectTask.api'; import { saveBpmForm, setProcessVariable, specificProblemOptions } from '../DqInspectTask.api';
import { list as progressList, deleteOne as progressDelete } from '../../inspectProgress/DqInspectProgress.api'; import { list as progressList, deleteOne as progressDelete } from '../../inspectProgress/DqInspectProgress.api';
import { usePermission } from '/@/hooks/web/usePermission'; import { usePermission } from '/@/hooks/web/usePermission';
import TaskHandleInnerContent from '/@/views/super/bpm/process/personalOffice/myHandleTask/content/TaskHandleInnerContent.vue'; import TaskHandleInnerContent from '/@/views/super/bpm/process/personalOffice/myHandleTask/content/TaskHandleInnerContent.vue';
@@ -283,6 +288,7 @@
targetNode: '', targetNode: '',
measureResLeader: '', measureResLeader: '',
measureResDept: '', measureResDept: '',
chargeLeaderId: '',
rectificationEvidence: '', rectificationEvidence: '',
evaluationCriterion: '', evaluationCriterion: '',
isNeedAppro: '', isNeedAppro: '',
@@ -423,13 +429,6 @@
Object.keys(mainForm).forEach((key) => { Object.keys(mainForm).forEach((key) => {
mainForm[key] = record[key] ?? ''; mainForm[key] = record[key] ?? '';
}); });
const approveInfo = record.approveInfo;
const deptId = getCurrentUserDeptId();
if (approveInfo && deptId && approveInfo[deptId]) {
const detail = approveInfo[deptId];
isEnd.value = detail.isEnd ?? 0;
subApproveUser.value = detail.implWorker ?? '';
}
} }
function getCurrentUserDeptId() { function getCurrentUserDeptId() {
@@ -443,11 +442,6 @@
return departs.length === 1 ? departs[0]?.id || '' : ''; return departs.length === 1 ? departs[0]?.id || '' : '';
} }
function getCurrentAssignee() {
const userInfo = (userStore.getUserInfo || {}) as Record<string, any>;
return userInfo.username || '';
}
async function loadFeedbackList() { async function loadFeedbackList() {
const bpmProcessId = processInfo.value.processInstanceId; const bpmProcessId = processInfo.value.processInstanceId;
if (!mainForm.id) { if (!mainForm.id) {
@@ -531,15 +525,11 @@
async function saveSubApproveUserVariable(options: { showSuccessMessage?: boolean } = {}) { async function saveSubApproveUserVariable(options: { showSuccessMessage?: boolean } = {}) {
const { showSuccessMessage = true } = options; const { showSuccessMessage = true } = options;
const processInstanceId = processInfo.value.processInstanceId;
const isEndValue = String(isEnd.value); const isEndValue = String(isEnd.value);
const usernameValue = normalizeUsernameList(subApproveUser.value); const usernameValue = normalizeUsernameList(subApproveUser.value);
const deptId = getCurrentUserDeptId(); if (!processInstanceId) {
if (!mainForm.id) { createMessage.warning('流程实例ID不能为空');
createMessage.warning('主表ID不能为空');
return false;
}
if (!deptId) {
createMessage.warning('无法获取当前用户部门');
return false; return false;
} }
if (isEndValue !== '1' && !usernameValue) { if (isEndValue !== '1' && !usernameValue) {
@@ -549,21 +539,19 @@
savingSubApproveUser.value = true; savingSubApproveUser.value = true;
try { try {
const params: Record<string, any> = { const isEndResult = await saveProcessVariable('is_end', isEndValue);
mainId: mainForm.id, if (!isEndResult?.success) {
deptId, createMessage.warning(isEndResult.message || '保存失败');
isEnd: Number(isEndValue),
};
if (isEndValue === '1') {
params.implWorker = getCurrentAssignee();
} else {
params.implUserNameList = usernameValue.split(',').filter(Boolean);
}
const res = await saveSubApprove(params);
if (!res?.success) {
createMessage.warning(res?.message || '保存失败');
return false; return false;
} }
if (isEndValue !== '1') {
const subApproveUserResult = await saveProcessVariable('sub_approve_user', usernameValue);
if (!subApproveUserResult?.success) {
createMessage.warning(subApproveUserResult.message || '保存失败');
return false;
}
}
if (showSuccessMessage) createMessage.success('保存成功'); if (showSuccessMessage) createMessage.success('保存成功');
return true; return true;
} catch { } catch {
@@ -574,6 +562,15 @@
} }
} }
function saveProcessVariable(varField: string, varVal: any) {
return setProcessVariable({
processInstanceId: processInfo.value.processInstanceId,
local: false,
varField,
varVal,
});
}
function normalizeUsernameList(value: string) { function normalizeUsernameList(value: string) {
return String(value || '') return String(value || '')
.split(',') .split(',')
@@ -55,6 +55,11 @@
<j-select-dept v-model:value="formData.measureResDept" :multiple="true" checkStrictly allow-clear /> <j-select-dept v-model:value="formData.measureResDept" :multiple="true" checkStrictly allow-clear />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12">
<a-form-item label="分管所领导" v-bind="validateInfos.chargeLeaderId" id="DqInspectTaskForm-chargeLeaderId" name="chargeLeaderId">
<j-select-user v-model:value="formData.chargeLeaderId" allow-clear />
</a-form-item>
</a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item label="整改交付成果" v-bind="validateInfos.rectificationEvidence" id="DqInspectTaskForm-rectificationEvidence" name="rectificationEvidence"> <a-form-item label="整改交付成果" v-bind="validateInfos.rectificationEvidence" id="DqInspectTaskForm-rectificationEvidence" name="rectificationEvidence">
<a-input v-model:value="formData.rectificationEvidence" placeholder="请输入整改交付成果" allow-clear></a-input> <a-input v-model:value="formData.rectificationEvidence" placeholder="请输入整改交付成果" allow-clear></a-input>
@@ -201,6 +206,7 @@
targetNode: '', targetNode: '',
measureResLeader: '', measureResLeader: '',
measureResDept: '', measureResDept: '',
chargeLeaderId: '',
rectificationEvidence: '', rectificationEvidence: '',
evaluationCriterion: '', evaluationCriterion: '',
isNeedAppro: '', isNeedAppro: '',