From 7cd932871d025c4331de167e46bffb0d7998fab6 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Thu, 14 May 2026 10:09:21 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E6=A0=B7=E5=BC=8F=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/BgXiSpeakBPMFeedbackModal.vue | 305 ++++++ .../xispeak/components/BgXiSpeakBPMForm.vue | 892 +++++++++--------- 2 files changed, 763 insertions(+), 434 deletions(-) create mode 100644 src/views/bg/xispeak/components/BgXiSpeakBPMFeedbackModal.vue diff --git a/src/views/bg/xispeak/components/BgXiSpeakBPMFeedbackModal.vue b/src/views/bg/xispeak/components/BgXiSpeakBPMFeedbackModal.vue new file mode 100644 index 0000000..f525702 --- /dev/null +++ b/src/views/bg/xispeak/components/BgXiSpeakBPMFeedbackModal.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue index 0b2142c..7c57db6 100644 --- a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue +++ b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue @@ -1,276 +1,201 @@ From d1bc4f2b7842d4062031b138cf2c5a7fee27f024 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Thu, 14 May 2026 11:38:07 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=91=E8=B5=B7?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=BC=B9=E7=AA=97=E7=95=8C=E9=9D=A2=E4=B8=8E?= =?UTF-8?q?bgpartymatter=E4=BF=9D=E6=8C=81=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/bg/xispeak/BgXiSpeakList.vue | 94 ++++++++++++++++---------- 1 file changed, 59 insertions(+), 35 deletions(-) diff --git a/src/views/bg/xispeak/BgXiSpeakList.vue b/src/views/bg/xispeak/BgXiSpeakList.vue index 2660bf0..134e78a 100644 --- a/src/views/bg/xispeak/BgXiSpeakList.vue +++ b/src/views/bg/xispeak/BgXiSpeakList.vue @@ -127,6 +127,7 @@ getChildList, getChildListBatch, updateLaunchType, + saveOrUpdateDict, bgXiSpeakFeedbackList, } from './BgXiSpeak.api'; @@ -491,10 +492,47 @@ return dropDownAction; } + function splitDeptValue(value) { + if (Array.isArray(value)) { + return value.map((item) => String(item || '').trim()).filter(Boolean); + } + return String(value || '') + .split(/[,\uFF0C]/) + .map((item) => item.trim()) + .filter(Boolean); + } + + function getImplDeptOptions(record) { + const deptIds = splitDeptValue(record?.implDept); + const deptNames = splitDeptValue(record?.implDept_dictText); + return deptIds.map((deptId, index) => ({ + value: deptId, + label: deptNames[index] || deptId, + })); + } + + function getLeadDeptOptions(record) { + const deptIds = splitDeptValue(record?.leadDepartment); + const deptNames = splitDeptValue(record?.leadDepartment_dictText); + return deptIds.map((deptId, index) => ({ + value: deptId, + label: deptNames[index] || deptId, + })); + } + + function getNextSuperviseCount(value) { + const count = Number(value || 0); + return Number.isFinite(count) ? count + 1 : 1; + } + function handleProcess(record) { flowScheduleModalRef.value?.open({ title: '发起督办计划收集流程', payload: { record }, + deptOptions: getLeadDeptOptions(record), + showSuoleaderFields: true, + isNeedAppro: record?.needSdwApproval, + supDeptleaderid: record?.sdwLeaderList, }); } @@ -502,6 +540,10 @@ flowScheduleModalRef.value?.open({ title: '发起落实部门经办人执行反馈流程', payload: { record, flowCode: FLOW_CODE_JBR }, + deptOptions: getImplDeptOptions(record), + showSuoleaderFields: true, + isNeedAppro: record?.needSdwApproval, + supDeptleaderid: record?.sdwLeaderList, }); } @@ -520,46 +562,32 @@ return value ? dateUtil(value).format(format) : undefined; }; - // triggerType: 1=立即发起, 2=重复发起; launchType: 0=收集后直接发起, 1=收集后周期性发起 const launchType = options.triggerType === 2 ? 1 : 0; - // 先保存 launchType 到主表 if (flowCode === FLOW_CODE) { await updateLaunchType({ id: record.id, launchType }); } - // 合并选中的DW领导列表到record中 - const recordWithSdwLeader = { + const nextSuperviseCount = getNextSuperviseCount(record.supervisionCount); + + const flowJsonData = { ...record, - sdwLeaderList: queryParam.value.sdwLeaderList || '', - needSdwApproval: queryParam.value.needSdwApproval || '', + isNeedAppro: options.isNeedAppro ?? record.needSdwApproval ?? '', + supDeptleaderid: options.supDeptleaderid ?? record.sdwLeaderList ?? '', + supervisionCount: nextSuperviseCount, }; - // 如果是经办人执行反馈流程,需要遍历每个部门单独发起 if (flowCode === FLOW_CODE_JBR) { - let approveInfo = {}; - if (record.approveInfo) { - try { - approveInfo = typeof record.approveInfo === 'string' ? JSON.parse(record.approveInfo) : record.approveInfo; - } catch (e) { - createMessage.error('审批信息解析失败'); - return; - } - } - const deptKeys = Object.keys(approveInfo); - if (deptKeys.length === 0) { - createMessage.warning('没有可用的部门审批信息'); + const selectedDeptIds = options.deptIds || []; + if (selectedDeptIds.length === 0) { + createMessage.warning('请选择落实部门'); return; } let successCount = 0; - const total = deptKeys.length; - - for (const deptId of deptKeys) { - const deptApproveDetail = approveInfo[deptId]; - const implUserIdList = deptApproveDetail.implUserIdList || []; - const implUserNameList = deptApproveDetail.implUserNameList || []; + const total = selectedDeptIds.length; + for (const deptId of selectedDeptIds) { const params = { intervalType: options.intervalType, startCount: options.startCount, @@ -570,21 +598,16 @@ formUrl: FORM_URL, flowName: '落实部门经办人执行反馈流程', jsonData: { - ...recordWithSdwLeader, + ...flowJsonData, currentDeptId: deptId, - currentApproverId: deptApproveDetail.approverId, - currentApproverName: deptApproveDetail.approverName, - implUserIdList: implUserIdList.join(','), - implUserNameList: implUserNameList.join(','), }, businessTablename: BUSINESS_TABLE_NAME, businessId: record.id, - deptHandlerName: deptApproveDetail.implUserNameList.join(','), title: record.speakStatus, content: record.implStatus, urgencyLevel: record.completionStatus, deptId: deptId, - deptLeaderId: deptApproveDetail.approverId, + deptLeaderId: deptId, requireFinishDate: formatDate(record.time, 'YYYY-MM-DD'), deadline: formatDate(record.time, 'YYYY-MM-DD HH:mm:ss'), }, @@ -594,6 +617,7 @@ await startProcessSchedules(params); successCount++; if (successCount === total) { + await saveOrUpdateDict({ id: record.id, bpmStatus: '2', supervisionCount: nextSuperviseCount }, true); createMessage.success(`成功发起 ${total} 个经办人执行反馈流程`); reload(); } @@ -604,7 +628,6 @@ return; } - // 原有的督办计划收集流程逻辑 const params = { intervalType: options.intervalType, startCount: options.startCount, @@ -614,13 +637,13 @@ flowCode: flowCode, formUrl: FORM_URL, flowName: FLOW_NAME, - jsonData: recordWithSdwLeader, + jsonData: flowJsonData, businessTablename: BUSINESS_TABLE_NAME, businessId: record.id, title: record.speakStatus, content: record.implStatus, urgencyLevel: record.completionStatus, - deptId: record.leadDepartment, + deptId: options.deptId || record.leadDepartment, deptLeaderId: record.responsiblePerson, requireFinishDate: formatDate(record.time, 'YYYY-MM-DD'), deadline: formatDate(record.time, 'YYYY-MM-DD HH:mm:ss'), @@ -628,6 +651,7 @@ }; await startProcessSchedules(params); + await saveOrUpdateDict({ id: record.id, bpmStatus: '2', supervisionCount: nextSuperviseCount }, true); createMessage.success('发起成功'); reload(); } From 7f532b62c59f9107e0e356e3e8e2d0f679289712 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Thu, 14 May 2026 15:08:04 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E4=B8=AD=E7=9D=A3=E5=8A=9E=E7=8A=B6=E6=80=81?= =?UTF-8?q?=EF=BC=8C=E7=9D=A3=E5=8A=9E=E6=95=B0=E9=87=8F=E7=9A=84=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.data.ts | 38 +++++++++---------- src/views/bg/xispeak/BgXiSpeakList.vue | 10 ++++- .../xispeak/components/BgXiSpeakBPMForm.vue | 5 ++- .../bg/xispeak/components/BgXiSpeakForm.vue | 6 +-- 4 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/views/bg/xispeak/BgXiSpeak.data.ts b/src/views/bg/xispeak/BgXiSpeak.data.ts index 9f7b973..56b38b2 100644 --- a/src/views/bg/xispeak/BgXiSpeak.data.ts +++ b/src/views/bg/xispeak/BgXiSpeak.data.ts @@ -85,30 +85,30 @@ export const columns: BasicColumn[] = [ dataIndex: 'delayRiskMitigation', }, { - title: '完成状态(0推进中,1已完成)', + title: '完成状态', align: 'center', - dataIndex: 'completionStatus', + dataIndex: 'completionStatus_dictText', }, { - title: '落实部门id', + title: '落实部门', align: 'center', dataIndex: 'implDept_dictText', }, - { - title: '层深(最顶层节点层深为0)', - align: 'center', - dataIndex: 'treeDepth', - }, - { - title: '同级数据排序号', - align: 'center', - dataIndex: 'sortOrder', - }, - { - title: '流程引擎状态字段', - align: 'center', - dataIndex: 'bpmStatus', - }, + // { + // title: '层深(最顶层节点层深为0)', + // align: 'center', + // dataIndex: 'treeDepth', + // }, + // { + // title: '同级数据排序号', + // align: 'center', + // dataIndex: 'sortOrder', + // // }, + // { + // title: '流程引擎状态字段', + // align: 'center', + // dataIndex: 'bpmStatus', + // }, { title: '督办次数', align: 'center', @@ -250,7 +250,7 @@ export const superQuerySchema = { reportFeedbackStatus: { title: '报告反馈情况', order: 13, view: 'text', type: 'string' }, isCompletionRisk: { title: '是否存在完成风险(0不存在,1存在)', order: 14, view: 'number', type: 'number' }, delayRiskMitigation: { title: '拖期风险应对措施', order: 15, view: 'text', type: 'string' }, - completionStatus: { title: '完成状态(0推进中,1已完成)', order: 16, view: 'number', type: 'number' }, + completionStatus: { title: '完成状态(督办中,1已完成)', order: 16, view: 'number', type: 'number' }, implDept: { title: '落实部门id', order: 17, view: 'sel_depart', type: 'string' }, treeDepth: { title: '层深(最顶层节点层深为0)', order: 18, view: 'number', type: 'number' }, sortOrder: { title: '同级数据排序号', order: 19, view: 'number', type: 'number' }, diff --git a/src/views/bg/xispeak/BgXiSpeakList.vue b/src/views/bg/xispeak/BgXiSpeakList.vue index 134e78a..a70d2af 100644 --- a/src/views/bg/xispeak/BgXiSpeakList.vue +++ b/src/views/bg/xispeak/BgXiSpeakList.vue @@ -488,6 +488,12 @@ onClick: handleProcessJbr.bind(null, record), }); } + if (record.bpmStatus == '2') { + dropDownAction.push({ + label: '再次发起经办人执行反馈流程', + onClick: handleProcessJbr.bind(null, record), + }); + } return dropDownAction; } @@ -617,7 +623,7 @@ await startProcessSchedules(params); successCount++; if (successCount === total) { - await saveOrUpdateDict({ id: record.id, bpmStatus: '2', supervisionCount: nextSuperviseCount }, true); + await saveOrUpdateDict({ id: record.id, bpmStatus: '2', supervisionCount: nextSuperviseCount, completionStatus: 0 }, true); createMessage.success(`成功发起 ${total} 个经办人执行反馈流程`); reload(); } @@ -651,7 +657,7 @@ }; await startProcessSchedules(params); - await saveOrUpdateDict({ id: record.id, bpmStatus: '2', supervisionCount: nextSuperviseCount }, true); + await saveOrUpdateDict({ id: record.id, bpmStatus: '2', supervisionCount: nextSuperviseCount, completionStatus: 0 }, true); createMessage.success('发起成功'); reload(); } diff --git a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue index 7c57db6..86394de 100644 --- a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue +++ b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue @@ -79,7 +79,7 @@ - + @@ -190,6 +190,7 @@ import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue'; import JSelectUser from '/@/components/Form/src/jeecg/components/JSelectUser.vue'; import JTreeSelect from '/@/components/Form/src/jeecg/components/JTreeSelect.vue'; + import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue'; import Icon from '/@/components/Icon/index'; import { bgXiSpeakFeedbackList, saveBpmForm, setProcessVariable } from '../BgXiSpeak.api'; import { usePermission } from '/@/hooks/web/usePermission'; @@ -263,7 +264,7 @@ { title: '反馈部门名称', dataIndex: 'responDeptname', align: 'center', width: 140 }, { title: '反馈人姓名', dataIndex: 'responPersonname', align: 'center', width: 120 }, { title: '措施内容', dataIndex: 'method', align: 'left', width: 200 }, - { title: '完成状态', dataIndex: 'completionStatus', align: 'center', width: 100 }, + { title: '完成状态', dataIndex: 'completionStatus_dictText', align: 'center', width: 100 }, { title: '进展情况', dataIndex: 'progress', align: 'left', width: 200 }, { title: '落实情况', dataIndex: 'implStatus', align: 'left', width: 200 }, { title: '附件', dataIndex: 'id', key: 'attachments', align: 'left', width: 340 }, diff --git a/src/views/bg/xispeak/components/BgXiSpeakForm.vue b/src/views/bg/xispeak/components/BgXiSpeakForm.vue index b13197a..44fae12 100644 --- a/src/views/bg/xispeak/components/BgXiSpeakForm.vue +++ b/src/views/bg/xispeak/components/BgXiSpeakForm.vue @@ -97,10 +97,7 @@ - - 推进中 - 已完成 - + @@ -142,6 +139,7 @@ import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue'; import JSelectUser from '/@/components/Form/src/jeecg/components/JSelectUser.vue'; import JTreeSelect from '/@/components/Form/src/jeecg/components/JTreeSelect.vue'; + import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue'; import { getValueType } from '/@/utils'; import { loadTreeData, saveOrUpdateDict } from '../BgXiSpeak.api'; import { Form } from 'ant-design-vue'; From 349306d99c4cfc6f7bdb61cec21073b8e7a12801 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Thu, 14 May 2026 16:06:03 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=AE=A1=E6=89=B9=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=A0=B7=E5=BC=8F=E4=B8=8D=E5=AF=B9=E5=86=8D?= =?UTF-8?q?=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xispeak/components/BgXiSpeakBPMForm.vue | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue index 86394de..1c78f20 100644 --- a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue +++ b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue @@ -16,13 +16,13 @@ - - - + + + - - + + @@ -37,8 +37,8 @@ - - + + @@ -52,13 +52,13 @@ - - + + - - + + @@ -82,18 +82,13 @@ - - - - - - - + + - - + + @@ -107,6 +102,11 @@ + + + + + From 9f2278085895900daca895b3aeb9dbdd9dfec5ac Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Thu, 14 May 2026 16:59:49 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=8F=91=E8=B5=B7=E7=9D=A3=E5=8A=9E?= =?UTF-8?q?=E6=94=B6=E9=9B=86=E6=B5=81=E7=A8=8B=E5=8F=AF=E4=BB=A5=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E6=98=AF=E5=90=A6=E7=9B=B4=E6=8E=A5=E5=8F=91=E8=B5=B7?= =?UTF-8?q?=E6=94=B6=E9=9B=86=E6=B5=81=E7=A8=8B=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E5=BC=B9=E7=AA=97=E5=B9=B6=E5=B0=86=E8=AF=A5?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=86=99=E5=88=B0=E4=B8=AD=E9=97=B4=E8=A1=A8?= =?UTF-8?q?=E7=9A=84json=5Fdata=E5=86=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/bg/xispeak/BgXiSpeakList.vue | 10 ++++ .../components/FeedbackRightNowModal.vue | 55 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/views/bg/xispeak/components/FeedbackRightNowModal.vue diff --git a/src/views/bg/xispeak/BgXiSpeakList.vue b/src/views/bg/xispeak/BgXiSpeakList.vue index a70d2af..01e108c 100644 --- a/src/views/bg/xispeak/BgXiSpeakList.vue +++ b/src/views/bg/xispeak/BgXiSpeakList.vue @@ -98,6 +98,7 @@ + @@ -116,6 +117,7 @@ import SUploadFile from '/@/components/semri/fileComponent/SUploadFile.vue'; import BusinessProcessListModal from '/src/components/semri/process/BusinessProcessListModal.vue'; import FlowScheduleStartModal from '/src/components/semri/process/FlowScheduleStartModal.vue'; + import FeedbackRightNowModal from './components/FeedbackRightNowModal.vue'; import { columns as taskTaskColumns } from '/@/views/taskProcess/TaskTask.data'; import { columns, superQuerySchema, bgXiSpeakFeedbackColumns } from './BgXiSpeak.data'; import { @@ -144,7 +146,9 @@ const toggleSearchStatus = ref(false); const registerModal = ref(); const flowScheduleModalRef = ref(); + const feedbackRightNowModalRef = ref(); const businessProcessListModalRef = ref(); + const pendingFeedbackRightNow = ref(0); const processColumns = taskTaskColumns; const selectedFeedbackId = ref(null); const feedbackTableData = reactive>({}); @@ -532,6 +536,11 @@ } function handleProcess(record) { + feedbackRightNowModalRef.value?.open(record); + } + + function handleFeedbackRightNowConfirm({ record, feedbackRightNow }) { + pendingFeedbackRightNow.value = feedbackRightNow; flowScheduleModalRef.value?.open({ title: '发起督办计划收集流程', payload: { record }, @@ -581,6 +590,7 @@ isNeedAppro: options.isNeedAppro ?? record.needSdwApproval ?? '', supDeptleaderid: options.supDeptleaderid ?? record.sdwLeaderList ?? '', supervisionCount: nextSuperviseCount, + feedback_right_now: flowCode === FLOW_CODE ? pendingFeedbackRightNow.value : undefined, }; if (flowCode === FLOW_CODE_JBR) { diff --git a/src/views/bg/xispeak/components/FeedbackRightNowModal.vue b/src/views/bg/xispeak/components/FeedbackRightNowModal.vue new file mode 100644 index 0000000..8248adb --- /dev/null +++ b/src/views/bg/xispeak/components/FeedbackRightNowModal.vue @@ -0,0 +1,55 @@ + + + From 350e2120ee236f0b79892e48145ee72fddb1b2ac Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Fri, 15 May 2026 16:40:02 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E9=9B=86=E6=88=90=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=B5=81=E7=A8=8B=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/bg/xispeak/BgXiSpeak.api.ts | 4 + src/views/bg/xispeak/BgXiSpeakList.vue | 256 +++---------------------- 2 files changed, 27 insertions(+), 233 deletions(-) diff --git a/src/views/bg/xispeak/BgXiSpeak.api.ts b/src/views/bg/xispeak/BgXiSpeak.api.ts index 61b6683..c6fb834 100644 --- a/src/views/bg/xispeak/BgXiSpeak.api.ts +++ b/src/views/bg/xispeak/BgXiSpeak.api.ts @@ -166,3 +166,7 @@ export const setProcessVariable = (params) => { export const updateLaunchType = (params) => { return defHttp.post({ url: '/bg/xispeak/bgXiSpeak/edit', params }, { isTransformResponse: false }); }; + +export const withDrawXiSpeak = (params) => { + return defHttp.post({ url: '/bg/xispeak/bgXiSpeak/withDrawXiSpeak', params }, { joinParamsToUrl: true, isTransformResponse: false }); +}; diff --git a/src/views/bg/xispeak/BgXiSpeakList.vue b/src/views/bg/xispeak/BgXiSpeakList.vue index 01e108c..1676970 100644 --- a/src/views/bg/xispeak/BgXiSpeakList.vue +++ b/src/views/bg/xispeak/BgXiSpeakList.vue @@ -1,8 +1,6 @@