!80 czh-20260702-流程列表支持修改标题与截止时间同步更新流程变量

Merge pull request !80 from 陈志浩/fix/process-20260702
This commit is contained in:
陈志浩
2026-07-02 08:00:44 +00:00
committed by Gitee
4 changed files with 139 additions and 11 deletions
+18
View File
@@ -18,6 +18,8 @@ enum Api {
startProcessSchedules = '/tasktask/taskTask/flow-schedules', startProcessSchedules = '/tasktask/taskTask/flow-schedules',
queryByBusinessId = '/tasktask/taskTask/queryByBusinessId', queryByBusinessId = '/tasktask/taskTask/queryByBusinessId',
deleteSingleProcess = '/tasktask/taskTask/deleteSingleProcess', deleteSingleProcess = '/tasktask/taskTask/deleteSingleProcess',
deletePendingTask = '/tasktask/taskTask/deletePendingTask',
updateTitleAndDeadline = '/tasktask/taskTask/updateTitleAndDeadline',
} }
/** /**
@@ -184,6 +186,22 @@ export const deleteSingleProcess = (params) => {
return defHttp.post({ url: Api.deleteSingleProcess, params }, { joinParamsToUrl: true, isTransformResponse: false }); return defHttp.post({ url: Api.deleteSingleProcess, params }, { joinParamsToUrl: true, isTransformResponse: false });
}; };
/**
* 删除未发起的待处理任务(无流程实例ID的周期性任务记录)
* @param params { taskId: string }
*/
export const deletePendingTask = (params) => {
return defHttp.post({ url: Api.deletePendingTask, params }, { joinParamsToUrl: true, isTransformResponse: false });
};
/**
* 修改流程标题和截止时间
* @param params { taskId: string, title: string, requireFinishDate: string }
*/
export const updateTitleAndDeadline = (params) => {
return defHttp.post({ url: Api.updateTitleAndDeadline, params }, { joinParamsToUrl: true, isTransformResponse: false });
};
/** /**
* 【用于评论功能】自定义文件上传-方法 * 【用于评论功能】自定义文件上传-方法
*/ */
@@ -8,6 +8,33 @@
</BasicTable> </BasicTable>
</div> </div>
<BpmPictureModal @register="registerBpmModal" /> <BpmPictureModal @register="registerBpmModal" />
<j-modal
title="修改流程信息"
:width="460"
:visible="editModalVisible"
:confirmLoading="editLoading"
wrapClassName="edit-process-modal"
@ok="handleEditConfirm"
@cancel="handleEditCancel"
cancelText="取消"
>
<div style="padding: 8px 16px 0;">
<a-form :model="editForm" :label-col="{ style: { width: '100px' } }" :wrapper-col="{ span: 24 }">
<a-form-item label="流程标题" style="margin-bottom: 14px;">
<a-input v-model:value="editForm.title" placeholder="请输入流程标题" allow-clear />
</a-form-item>
<a-form-item label="要求完成日期" style="margin-bottom: 0;">
<a-date-picker
v-model:value="editForm.requireFinishDate"
valueFormat="YYYY-MM-DD"
placeholder="请选择要求完成日期"
style="width: 100%"
:getPopupContainer="(node) => node?.parentNode"
/>
</a-form-item>
</a-form>
</div>
</j-modal>
<j-modal <j-modal
title="审批历史" title="审批历史"
:width="approvalHistoryModalWidth" :width="approvalHistoryModalWidth"
@@ -22,12 +49,12 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { nextTick, ref } from 'vue'; import { nextTick, reactive, ref } from 'vue';
import { BasicColumn, BasicTable, TableAction, useTable } from '/@/components/Table'; import { BasicColumn, BasicTable, TableAction, useTable } from '/@/components/Table';
import JModal from '/@/components/Modal/src/JModal/JModal.vue'; import JModal from '/@/components/Modal/src/JModal/JModal.vue';
import { useModal } from '/@/components/Modal'; import { useModal } from '/@/components/Modal';
import { columns } from './QueryProcessList.data'; import { columns } from './QueryProcessList.data';
import { deleteSingleProcess, queryByBusinessId } from '/@/api/common/api'; import { deleteSingleProcess, deletePendingTask, updateTitleAndDeadline, queryByBusinessId } from '/@/api/common/api';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
import TaskApprovalHistoryContent from '/@/views/super/bpm/process/personalOffice/myHandleTask/content/TaskApprovalHistoryContent.vue'; import TaskApprovalHistoryContent from '/@/views/super/bpm/process/personalOffice/myHandleTask/content/TaskApprovalHistoryContent.vue';
@@ -51,6 +78,13 @@
const approvalHistoryVisible = ref(false); const approvalHistoryVisible = ref(false);
const approvalHistoryFormData = ref<Recordable>({}); const approvalHistoryFormData = ref<Recordable>({});
const approvalHistoryRef = ref(); const approvalHistoryRef = ref();
const editModalVisible = ref(false);
const editLoading = ref(false);
const currentEditRecord = ref<Recordable>({});
const editForm = reactive({
title: '',
requireFinishDate: undefined as string | undefined,
});
const [registerBpmModal, { openModal: bpmPicModal }] = useModal(); const [registerBpmModal, { openModal: bpmPicModal }] = useModal();
const [registerTable, { setColumns, setTableData, reload, clearSelectedRowKeys }] = useTable({ const [registerTable, { setColumns, setTableData, reload, clearSelectedRowKeys }] = useTable({
@@ -76,12 +110,12 @@
actionColumn: { actionColumn: {
title: '操作', title: '操作',
dataIndex: 'action', dataIndex: 'action',
width: 240, width: 320,
fixed: 'right', fixed: 'right',
slots: { customRender: 'action' }, slots: { customRender: 'action' },
}, },
scroll: { scroll: {
x: tableScrollX, x: tableScrollX + 80,
y: tableBodyHeight, y: tableBodyHeight,
}, },
}); });
@@ -110,6 +144,7 @@
setColumns(defaultColumns); setColumns(defaultColumns);
setTableData([]); setTableData([]);
handleApprovalHistoryCancel(); handleApprovalHistoryCancel();
handleEditCancel();
clearSelectedRowKeys(); clearSelectedRowKeys();
} }
@@ -141,10 +176,73 @@
approvalHistoryFormData.value = {}; approvalHistoryFormData.value = {};
} }
function handleEditProcess(record) {
currentEditRecord.value = record;
editForm.title = record?.title || '';
editForm.requireFinishDate = record?.requireFinishDate
? record.requireFinishDate.length > 10
? record.requireFinishDate.substring(0, 10)
: record.requireFinishDate
: undefined;
editModalVisible.value = true;
}
async function handleEditConfirm() {
if (!editForm.title?.trim()) {
createMessage.error('标题不能为空');
return;
}
if (!editForm.requireFinishDate) {
createMessage.error('要求完成日期不能为空');
return;
}
const taskId = currentEditRecord.value?.id;
if (!taskId) {
createMessage.error('任务数据异常');
return;
}
editLoading.value = true;
try {
const res = await updateTitleAndDeadline({ taskId, title: editForm.title, requireFinishDate: editForm.requireFinishDate });
if (res?.success) {
createMessage.success(res.message || '修改成功');
editModalVisible.value = false;
await reload();
} else {
createMessage.error(res?.message || '修改失败');
}
} catch (error) {
createMessage.error('修改失败');
} finally {
editLoading.value = false;
}
}
function handleEditCancel() {
editModalVisible.value = false;
editLoading.value = false;
}
async function handleDeleteProcess(record) { async function handleDeleteProcess(record) {
const processInstId = record?.processInstId; const processInstId = record?.processInstId;
const taskId = record?.id;
if (!processInstId) { if (!processInstId) {
createMessage.error('流程未发起,请等待流程自动发起'); if (!taskId) {
createMessage.error('任务数据异常,无法删除');
return;
}
try {
const res = await deletePendingTask({ taskId });
if (res?.success) {
createMessage.success(res.message || '删除成功');
await reload();
} else {
createMessage.error(res?.message || '删除失败');
}
} catch (error) {
createMessage.error('删除失败');
}
return; return;
} }
@@ -171,6 +269,10 @@
label: '审批历史', label: '审批历史',
onClick: handlePreviewApprovalHistory.bind(null, record), onClick: handlePreviewApprovalHistory.bind(null, record),
}, },
{
label: '修改信息',
onClick: handleEditProcess.bind(null, record),
},
{ {
label: '删除流程', label: '删除流程',
popConfirm: { popConfirm: {
@@ -239,3 +341,13 @@
} }
} }
</style> </style>
<style lang="less">
.edit-process-modal {
.ant-modal-body {
height: auto !important;
min-height: 160px;
overflow: visible !important;
}
}
</style>
@@ -77,8 +77,7 @@
<a-form-item label="重复开始日期"> <a-form-item label="重复开始日期">
<a-date-picker <a-date-picker
v-model:value="formData.intervalStartTime" v-model:value="formData.intervalStartTime"
show-time valueFormat="YYYY-MM-DD"
valueFormat="YYYY-MM-DD HH:mm:ss"
placeholder="重复开始日期" placeholder="重复开始日期"
style="width: 100%" style="width: 100%"
:getPopupContainer="(node) => node?.parentNode" :getPopupContainer="(node) => node?.parentNode"
@@ -279,7 +278,7 @@ import { PARTY_COMMITTEE_DEPT_ID, SDW_LEADER_ROLE_ID } from '/@/constant/supervi
triggerType: formData.triggerMode === 'recurring' ? 2 : 1, triggerType: formData.triggerMode === 'recurring' ? 2 : 1,
intervalType: formData.triggerMode === 'recurring' ? Number(formData.intervalType) : undefined, intervalType: formData.triggerMode === 'recurring' ? Number(formData.intervalType) : undefined,
startCount: formData.triggerMode === 'recurring' ? Number(formData.startCount) : undefined, startCount: formData.triggerMode === 'recurring' ? Number(formData.startCount) : undefined,
intervalStartTime: formData.triggerMode === 'recurring' ? formData.intervalStartTime : undefined, intervalStartTime: formData.triggerMode === 'recurring' && formData.intervalStartTime ? formData.intervalStartTime + ' 02:00:00' : undefined,
deptId: formData.deptIds.join(','), deptId: formData.deptIds.join(','),
deptIds: [...formData.deptIds], deptIds: [...formData.deptIds],
isNeedAppro: showSuoleaderFields.value ? formData.isNeedAppro : undefined, isNeedAppro: showSuoleaderFields.value ? formData.isNeedAppro : undefined,
@@ -76,8 +76,7 @@
<a-form-item label="重复开始日期"> <a-form-item label="重复开始日期">
<a-date-picker <a-date-picker
v-model:value="formData.intervalStartTime" v-model:value="formData.intervalStartTime"
show-time valueFormat="YYYY-MM-DD"
valueFormat="YYYY-MM-DD HH:mm:ss"
placeholder="重复开始日期" placeholder="重复开始日期"
style="width: 100%" style="width: 100%"
:getPopupContainer="(node) => node?.parentNode" :getPopupContainer="(node) => node?.parentNode"
@@ -251,7 +250,7 @@ import { SUOBAN_DEPT_ID, MEASURE_RES_LEADER_ROLE_ID } from '/@/constant/supervis
triggerType: formData.triggerMode === 'recurring' ? 2 : 1, triggerType: formData.triggerMode === 'recurring' ? 2 : 1,
intervalType: formData.triggerMode === 'recurring' ? Number(formData.intervalType) : undefined, intervalType: formData.triggerMode === 'recurring' ? Number(formData.intervalType) : undefined,
startCount: formData.triggerMode === 'recurring' ? Number(formData.startCount) : undefined, startCount: formData.triggerMode === 'recurring' ? Number(formData.startCount) : undefined,
intervalStartTime: formData.triggerMode === 'recurring' ? formData.intervalStartTime : undefined, intervalStartTime: formData.triggerMode === 'recurring' && formData.intervalStartTime ? formData.intervalStartTime + ' 02:00:00' : undefined,
title: taskTitle, title: taskTitle,
deptId: formData.deptIds.join(','), deptId: formData.deptIds.join(','),
deptIds: [...formData.deptIds], deptIds: [...formData.deptIds],