diff --git a/src/views/bg/bgpartymatter/BgPartymatter.api.ts b/src/views/bg/bgpartymatter/BgPartymatter.api.ts index 96a2c39..f72214b 100644 --- a/src/views/bg/bgpartymatter/BgPartymatter.api.ts +++ b/src/views/bg/bgpartymatter/BgPartymatter.api.ts @@ -18,6 +18,7 @@ enum Api { exportXlsHeaders = '/bgpartymatter/bgPartymatter/exportXlsHeaders', saveBpmForm = '/bgpartymatter/bgPartymatter/saveBpmForm', setProcessVariable = '/act/process/setProcessVariable', + setBpmVariableLocal = '/act/process/setBpmVariableLocal', bgPartymatterFeedbackList = '/bgpartymatter/bgPartymatter/listBgPartymatterFeedbackByMainId', bgPartymatterFeedbackSave= '/bgpartymatter/bgPartymatter/addBgPartymatterFeedback', bgPartymatterFeedbackEdit= '/bgpartymatter/bgPartymatter/editBgPartymatterFeedback', @@ -111,6 +112,10 @@ export const setProcessVariable = (params) => { return defHttp.post({ url: Api.setProcessVariable, params }, { isTransformResponse: false }); } +export const setBpmVariableLocal = (params) => { + return defHttp.post({ url: Api.setBpmVariableLocal, params }, { isTransformResponse: false }); +} + /** * 列表接口 * @param params diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue index 46bc106..90e8801 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue @@ -220,6 +220,18 @@ + + + + + + 否(未完成) + 是(已完成) + + + + + ([]); @@ -298,6 +311,7 @@ const subApproveUserNameText = ref(''); const userResolveVersion = ref(0); const isEnd = ref(0); + const isFinish = ref('0'); const lastGeneratedNumber = ref(''); const mainForm = reactive>({ @@ -366,6 +380,7 @@ const canManageFeedback = computed(() => props.formBpm && props.formData?.PROCESS_TAB_TYPE === 'run' && !!props.formData?.taskId); const showAddFeedback = computed(() => String(props.formData?.extendUrlParams?.addfeedback ?? '') === '1'); const showSubApproveUser = computed(() => String(props.formData?.extendUrlParams?.selectuser ?? '') === '1'); + const showFinishSelector = computed(() => String(props.formData?.extendUrlParams?.selectfinish ?? '') === '1'); const showSubApproveUserSelector = computed(() => showSubApproveUser.value && String(isEnd.value) !== '1'); const processInfo = computed(() => ({ @@ -412,6 +427,14 @@ { immediate: true } ); + watch( + () => props.formData?.vars?.isFinish, + (value) => { + isFinish.value = String(value ?? '0') === '1' ? '1' : '0'; + }, + { immediate: true } + ); + watch( subApproveUser, (value) => { @@ -547,7 +570,7 @@ } function buildDeptLeaderApproveReason() { - return '已审批,请督办部门确认。'; + return String(isFinish.value) === '1' ? '已审批,请督办部门确认。' : '请反馈完成情况。'; } function buildSuperviseHandlerConfirmReason() { @@ -739,7 +762,13 @@ } } if (showSubApproveUser.value) { - return saveSubApproveUserVariable({ showSuccessMessage: false }); + const subApproveUserSaved = await saveSubApproveUserVariable({ showSuccessMessage: false }); + if (!subApproveUserSaved) { + return false; + } + } + if (showFinishSelector.value) { + return saveFinishVariable({ showSuccessMessage: false }); } return true; } @@ -828,11 +857,39 @@ } } + async function saveFinishVariable(options: { showSuccessMessage?: boolean } = {}) { + const { showSuccessMessage = true } = options; + const processInstanceId = processInfo.value.processInstanceId; + if (!processInstanceId) { + createMessage.warning('流程实例ID不能为空'); + return false; + } + + savingFinish.value = true; + try { + // Gateway_isfinish 读取当前执行分支的局部变量,需在办理动作前写入。 + const result = await saveProcessVariable('isFinish', String(isFinish.value)); + if (!result?.success) { + createMessage.warning(result.message || '保存失败'); + return false; + } + if (showSuccessMessage) { + createMessage.success('保存成功'); + } + return true; + } catch (error) { + createMessage.warning('保存失败'); + return false; + } finally { + savingFinish.value = false; + } + } + function saveProcessVariable(varField: string, varVal: any) { - return setProcessVariable({ + return setBpmVariableLocal({ processInstanceId: processInfo.value.processInstanceId, taskId: processInfo.value.taskId, - local: true, + parentLevel: 2, varField, varVal, }); diff --git a/src/views/bg/bqtakepulse/BgTakepulse.api.ts b/src/views/bg/bqtakepulse/BgTakepulse.api.ts index 15aa2a6..a61fd6d 100644 --- a/src/views/bg/bqtakepulse/BgTakepulse.api.ts +++ b/src/views/bg/bqtakepulse/BgTakepulse.api.ts @@ -19,6 +19,7 @@ enum Api { bgTakepulseFeedbackList = '/bqtakepulse/bgTakepulse/queryBgTakepulseFeedbackByMainId', saveBpmForm = '/bqtakepulse/bgTakepulse/saveBpmForm', setProcessVariable = '/act/process/setProcessVariable', + setBpmVariableLocal = '/act/process/setBpmVariableLocal', bgTakepulseBpmFeedbackList = '/bqtakepulse/bgTakepulse/listBgTakepulseFeedbackByMainId', bgTakepulseFeedbackSave = '/bqtakepulse/bgTakepulse/addBgTakepulseFeedback', bgTakepulseFeedbackEdit = '/bqtakepulse/bgTakepulse/editBgTakepulseFeedback', @@ -101,6 +102,10 @@ export const setProcessVariable = (params) => { return defHttp.post({ url: Api.setProcessVariable, params }, { isTransformResponse: false }); } +export const setBpmVariableLocal = (params) => { + return defHttp.post({ url: Api.setBpmVariableLocal, params }, { isTransformResponse: false }); +} + /** * BPM办理页按主表和流程实例查询反馈,避免不同督办轮次的反馈混在一起。 */ diff --git a/src/views/bg/bqtakepulse/components/BgTakepulseBPMForm.vue b/src/views/bg/bqtakepulse/components/BgTakepulseBPMForm.vue index 4897ab0..d2885bc 100644 --- a/src/views/bg/bqtakepulse/components/BgTakepulseBPMForm.vue +++ b/src/views/bg/bqtakepulse/components/BgTakepulseBPMForm.vue @@ -245,6 +245,18 @@ + + + + + + 否(未完成) + 是(已完成) + + + + + ([]); @@ -323,6 +336,7 @@ const subApproveUserNameText = ref(''); const userResolveVersion = ref(0); const isEnd = ref(0); + const isFinish = ref('0'); const mainForm = reactive>({ id: '', @@ -392,6 +406,7 @@ const canManageFeedback = computed(() => props.formBpm && props.formData?.PROCESS_TAB_TYPE === 'run' && !!props.formData?.taskId); const showAddFeedback = computed(() => String(props.formData?.extendUrlParams?.addfeedback ?? '') === '1'); const showSubApproveUser = computed(() => String(props.formData?.extendUrlParams?.selectuser ?? '') === '1'); + const showFinishSelector = computed(() => String(props.formData?.extendUrlParams?.selectfinish ?? '') === '1'); const showSubApproveUserSelector = computed(() => showSubApproveUser.value && String(isEnd.value) !== '1'); const processInfo = computed(() => ({ @@ -435,6 +450,14 @@ { immediate: true } ); + watch( + () => props.formData?.vars?.isFinish, + (value) => { + isFinish.value = String(value ?? '0') === '1' ? '1' : '0'; + }, + { immediate: true } + ); + watch( subApproveUser, (value) => { @@ -561,7 +584,7 @@ } function buildDeptLeaderApproveReason() { - return '已审批,请督办部门确认。'; + return String(isFinish.value) === '1' ? '已审批,请督办部门确认。' : '请反馈完成情况。'; } function buildSuperviseHandlerConfirmReason() { @@ -710,7 +733,13 @@ } } if (showSubApproveUser.value) { - return saveSubApproveUserVariable({ showSuccessMessage: false }); + const subApproveUserSaved = await saveSubApproveUserVariable({ showSuccessMessage: false }); + if (!subApproveUserSaved) { + return false; + } + } + if (showFinishSelector.value) { + return saveFinishVariable({ showSuccessMessage: false }); } return true; } @@ -799,11 +828,39 @@ } } + async function saveFinishVariable(options: { showSuccessMessage?: boolean } = {}) { + const { showSuccessMessage = true } = options; + const processInstanceId = processInfo.value.processInstanceId; + if (!processInstanceId) { + createMessage.warning('流程实例ID不能为空'); + return false; + } + + savingFinish.value = true; + try { + // Gateway_isfinish 读取当前分支局部变量,需在办理动作前写入外层分支 execution。 + const result = await saveProcessVariable('isFinish', String(isFinish.value)); + if (!result?.success) { + createMessage.warning(result.message || '保存失败'); + return false; + } + if (showSuccessMessage) { + createMessage.success('保存成功'); + } + return true; + } catch (error) { + createMessage.warning('保存失败'); + return false; + } finally { + savingFinish.value = false; + } + } + function saveProcessVariable(varField: string, varVal: any) { - return setProcessVariable({ + return setBpmVariableLocal({ processInstanceId: processInfo.value.processInstanceId, taskId: processInfo.value.taskId, - local: true, + parentLevel: 2, varField, varVal, });