fix(xispeak): 修复经办人反馈流程deptHandlerName为空及反馈弹窗问题

- handleFlowScheduleConfirm从record.approveInfo直接取implUserNameList和approverId,不再错误查询反馈记录
- 反馈弹窗保存时不再覆盖反馈人和部门(移除handleOk中的applyCurrentUserFeedbackInfo)
- 反馈弹窗label样式对齐主表单
- 更新节点权限文档中的URL示例

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
wsm
2026-05-26 18:43:23 +08:00
co-authored by Claude Opus 4.7
parent 6703104e85
commit 326032c62b
3 changed files with 38 additions and 33 deletions
+5 -5
View File
@@ -212,7 +212,7 @@ showFeedbackInfo → 反馈信息区域(表格 + 表头)
* **jiJianFieldsReadonly** `0` —— 弹窗内纪检字段只读 * **jiJianFieldsReadonly** `0` —— 弹窗内纪检字段只读
* **showDeptFeedback** `0` —— 按部门过滤反馈 * **showDeptFeedback** `0` —— 按部门过滤反馈
* **showJiJianFields** `1` —— 纪检字段列 * **showJiJianFields** `1` —— 纪检字段列
* bg/xispeak/components/BgXiSpeakBPMForm?edit=1&showProcessHandle=1&showFeedbackInfo=1&showEditFeedback=1&showJiJianFields=1 * bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showEditFeedback=1&showJiJianFields=1
--- ---
### 节点: <督办部门经办人确认全部反馈事项> ### 节点: <督办部门经办人确认全部反馈事项>
@@ -239,9 +239,9 @@ showFeedbackInfo → 反馈信息区域(表格 + 表头)
* **showAddFeedback** `1` —— 新增反馈按钮 * **showAddFeedback** `1` —— 新增反馈按钮
* **showEditFeedback** `1` —— 编辑/删除操作列 * **showEditFeedback** `1` —— 编辑/删除操作列
* **jiJianFieldsReadonly** `1` —— 弹窗内纪检字段只读 * **jiJianFieldsReadonly** `1` —— 弹窗内纪检字段只读
* **showDeptFeedback** `0` —— 按部门过滤反馈 * **showDeptFeedback** `1` —— 按部门过滤反馈
* **showJiJianFields** `1` —— 纪检字段列 * **showJiJianFields** `1` —— 纪检字段列
* bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showAddFeedback=1&showEditFeedback=1&jiJianFieldsReadonly=1&showJiJianFields=1 * bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showAddFeedback=1&showEditFeedback=1&showDeptFeedback=1&jiJianFieldsReadonly=1&showJiJianFields=1
--- ---
### 节点: <部门负责人审批> ### 节点: <部门负责人审批>
@@ -254,9 +254,9 @@ showFeedbackInfo → 反馈信息区域(表格 + 表头)
* **showAddFeedback** `0` —— 新增反馈按钮 * **showAddFeedback** `0` —— 新增反馈按钮
* **showEditFeedback** `0` —— 编辑/删除操作列 * **showEditFeedback** `0` —— 编辑/删除操作列
* **jiJianFieldsReadonly** `0` —— 弹窗内纪检字段只读 * **jiJianFieldsReadonly** `0` —— 弹窗内纪检字段只读
* **showDeptFeedback** `0` —— 按部门过滤反馈 * **showDeptFeedback** `1` —— 按部门过滤反馈
* **showJiJianFields** `1` —— 纪检字段列 * **showJiJianFields** `1` —— 纪检字段列
* bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showJiJianFields=1 * bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showDeptFeedback=1&showJiJianFields=1
--- ---
### 节点: <督办经办人核查> ### 节点: <督办经办人核查>
+5 -20
View File
@@ -637,28 +637,13 @@
return; return;
} }
// 查询已有反馈记录,按部门获取处理人姓名
const deptHandlerMap = new Map<string, string>();
try {
const feedbackRes = await bgXiSpeakFeedbackList({ mainId: record.id, pageNo: 1, pageSize: 999 });
const feedbackRecords = feedbackRes?.records || feedbackRes?.result?.records || [];
for (const fb of feedbackRecords) {
const fbDeptIds = splitDeptValue(fb.responDeptid);
const handlerName = fb.responPersonname || '';
for (const fbDeptId of fbDeptIds) {
if (fbDeptId && handlerName && !deptHandlerMap.has(fbDeptId)) {
deptHandlerMap.set(fbDeptId, handlerName);
}
}
}
} catch (e) {
// 查询反馈失败则继续,deptHandlerName 留空
}
let successCount = 0; let successCount = 0;
const total = selectedDeptIds.length; const total = selectedDeptIds.length;
for (const deptId of selectedDeptIds) { for (const deptId of selectedDeptIds) {
const deptDetail = record.approveInfo?.[deptId];
const implUserNameList: string[] = deptDetail?.implUserNameList || [];
const deptHandlerName = implUserNameList.join(',');
const params = { const params = {
intervalType: options.intervalType, intervalType: options.intervalType,
startCount: options.startCount, startCount: options.startCount,
@@ -678,8 +663,8 @@
content: record.implStatus, content: record.implStatus,
urgencyLevel: record.completionStatus, urgencyLevel: record.completionStatus,
deptId: deptId, deptId: deptId,
deptLeaderId: deptId, deptLeaderId: deptDetail?.approverId || '',
deptHandlerName: deptHandlerMap.get(deptId) || '', deptHandlerName: deptHandlerName,
requireFinishDate: formatDate(record.time, 'YYYY-MM-DD'), requireFinishDate: formatDate(record.time, 'YYYY-MM-DD'),
deadline: record.deadline || formatDate(record.time, 'YYYY-MM-DD'), deadline: record.deadline || formatDate(record.time, 'YYYY-MM-DD'),
}, },
@@ -176,11 +176,15 @@
nextTick(() => formRef.value?.clearValidate?.()); nextTick(() => formRef.value?.clearValidate?.());
} }
function open(mainId: string, secretLevel?: string | number, bpmProcessId = '') { function open(mainId: string, secretLevel?: string | number, bpmProcessId = '', defaultDeptId = '', defaultDeptName = '') {
resetForm(mainId, bpmProcessId); resetForm(mainId, bpmProcessId);
isEdit.value = false; isEdit.value = false;
uploadSecretLevel.value = normalizeSecretLevel(secretLevel); uploadSecretLevel.value = normalizeSecretLevel(secretLevel);
void applyCurrentUserFeedbackInfo(); if (defaultDeptId) {
void applyCurrentUserFeedbackInfo(defaultDeptId, defaultDeptName);
} else {
void applyCurrentUserFeedbackInfo();
}
visible.value = true; visible.value = true;
} }
@@ -225,13 +229,18 @@
}; };
} }
async function applyCurrentUserFeedbackInfo() { async function applyCurrentUserFeedbackInfo(defaultDeptId = '', defaultDeptName = '') {
const userInfo = (userStore.getUserInfo || {}) as Record<string, any>; const userInfo = (userStore.getUserInfo || {}) as Record<string, any>;
formData.responPersonid = userInfo.id || userInfo.userId || ''; formData.responPersonid = userInfo.id || userInfo.userId || '';
formData.responPersonname = userInfo.realname || ''; formData.responPersonname = userInfo.realname || '';
const departInfo = await getCurrentDepartInfo(); if (defaultDeptId) {
formData.responDeptid = departInfo.id; formData.responDeptid = defaultDeptId;
formData.responDeptname = departInfo.departName; formData.responDeptname = defaultDeptName || '';
} else {
const departInfo = await getCurrentDepartInfo();
formData.responDeptid = departInfo.id;
formData.responDeptname = departInfo.departName;
}
} }
function handleDeptChange(value, row) { function handleDeptChange(value, row) {
@@ -252,7 +261,6 @@
} }
saving.value = true; saving.value = true;
try { try {
await applyCurrentUserFeedbackInfo();
if (!formData.id && uploadFileRef.value?.hasPendingFiles?.()) { if (!formData.id && uploadFileRef.value?.hasPendingFiles?.()) {
formData.id = buildUUID(); formData.id = buildUUID();
} }
@@ -280,6 +288,18 @@
<style lang="less" scoped> <style lang="less" scoped>
.bpm-feedback-modal-form { .bpm-feedback-modal-form {
padding: 12px 8px 0; padding: 14px;
:deep(.ant-form-item-label) {
overflow: visible;
white-space: normal;
text-overflow: unset;
text-align: left;
> label {
justify-content: flex-start;
width: 100%;
}
}
} }
</style> </style>