From 3e91afa0fa1cf74a744e6d65b2fec25ae9c291e0 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Wed, 27 May 2026 20:29:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E6=95=B0=E6=8D=AE=E5=AD=98=E5=85=A5?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E8=A1=A8=E5=8D=95json=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E9=80=82=E9=85=8D=E5=90=8E=E7=AB=AF=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/bg/xispeak/BgXiSpeak.api.ts | 15 +++++ .../xispeak/components/BgXiSpeakBPMForm.vue | 64 ++++++++++--------- 2 files changed, 50 insertions(+), 29 deletions(-) diff --git a/src/views/bg/xispeak/BgXiSpeak.api.ts b/src/views/bg/xispeak/BgXiSpeak.api.ts index 7578055..5001bd0 100644 --- a/src/views/bg/xispeak/BgXiSpeak.api.ts +++ b/src/views/bg/xispeak/BgXiSpeak.api.ts @@ -173,10 +173,25 @@ export const saveBpmForm = (params) => { return defHttp.post({ url: '/bg/xispeak/bgXiSpeak/saveBpmForm', params }, { isTransformResponse: false }); }; +/** + * 保存部门审批信息(isEnd、部门经办人)到业务表单 approveInfo JSON + * @param params { mainId, deptId, isEnd, implWorker } + */ +export const saveSubApprove = (params) => { + return defHttp.post({ url: '/bg/xispeak/bgXiSpeak/saveSubApprove', params }, { isTransformResponse: false }); +}; + export const setProcessVariable = (params) => { return defHttp.post({ url: '/act/process/setProcessVariable', params }, { isTransformResponse: false }); }; +/** + * 将BPM流程变量存入向上追溯2层的父级执行实例(与 AfterImplWorkerTemStoreListener 一致) + */ +export const setBpmVariableLocal = (params) => { + return defHttp.post({ url: '/act/process/setBpmVariableLocal', params }, { isTransformResponse: false }); +}; + export const updateLaunchType = (params) => { return defHttp.post({ url: '/bg/xispeak/bgXiSpeak/edit', params }, { isTransformResponse: false }); }; diff --git a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue index 97a7a0a..937e984 100644 --- a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue +++ b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue @@ -244,7 +244,7 @@ - + @@ -278,8 +278,7 @@ bgXiSpeakFeedbackListWithDept, bgXiSpeakFeedbackDelete, saveBpmForm, - setProcessVariable, - updateDeptHandlerName, + saveSubApprove, } from '../BgXiSpeak.api'; import { usePermission } from '/@/hooks/web/usePermission'; import TaskHandleInnerContent from '/@/views/super/bpm/process/personalOffice/myHandleTask/content/TaskHandleInnerContent.vue'; @@ -469,6 +468,14 @@ Object.keys(mainForm).forEach((key) => { mainForm[key] = record[key] ?? ''; }); + // 从 approveInfo JSON 初始化当前部门的 isEnd 和 subApproveUser + 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() { @@ -482,6 +489,11 @@ return departs.length === 1 ? departs[0]?.id || '' : ''; } + function getCurrentAssignee() { + const userInfo = (userStore.getUserInfo || {}) as Record; + return userInfo.username || ''; + } + async function loadFeedbackList() { const bpmProcessId = processInfo.value.processInstanceId; if (!mainForm.id || !bpmProcessId) { @@ -577,11 +589,15 @@ async function saveSubApproveUserVariable(options: { showSuccessMessage?: boolean } = {}) { const { showSuccessMessage = true } = options; - const processInstanceId = processInfo.value.processInstanceId; const isEndValue = String(isEnd.value); const usernameValue = normalizeUsernameList(subApproveUser.value); - if (!processInstanceId) { - createMessage.warning('流程实例ID不能为空'); + const deptId = getCurrentUserDeptId(); + if (!mainForm.id) { + createMessage.warning('主表ID不能为空'); + return false; + } + if (!deptId) { + createMessage.warning('无法获取当前用户部门'); return false; } if (isEndValue !== '1' && !usernameValue) { @@ -591,20 +607,20 @@ savingSubApproveUser.value = true; try { - const isEndResult = await saveProcessVariable('isEnd', isEndValue); - if (!isEndResult?.success) { - createMessage.warning(isEndResult.message || '保存失败'); - return false; + const params: Record = { + mainId: mainForm.id, + deptId, + isEnd: Number(isEndValue), + }; + if (isEndValue === '1') { + params.implWorker = getCurrentAssignee(); + } else { + params.implUserNameList = usernameValue.split(',').filter(Boolean); } - - if (isEndValue !== '1') { - const subApproveUserResult = await saveProcessVariable('subApproveUser', usernameValue); - if (!subApproveUserResult?.success) { - createMessage.warning(subApproveUserResult.message || '保存失败'); - return false; - } - // 同步更新 task_task 表的 deptHandlerName,供 XiSpeakFeedbackFlow.getImplDeptWorker 使用 - updateDeptHandlerName({ processInstanceId, deptHandlerName: usernameValue }).catch(() => {}); + const res = await saveSubApprove(params); + if (!res?.success) { + createMessage.warning(res?.message || '保存失败'); + return false; } if (showSuccessMessage) { createMessage.success('保存成功'); @@ -618,16 +634,6 @@ } } - function saveProcessVariable(varField: string, varVal: any) { - return setProcessVariable({ - processInstanceId: processInfo.value.processInstanceId, - taskId: processInfo.value.taskId, - local: true, - varField, - varVal, - }); - } - function normalizeUsernameList(value: string) { return String(value || '') .split(',')