diff --git a/src/views/gh/improvementProposal/ImprovementProposal.api.ts b/src/views/gh/improvementProposal/ImprovementProposal.api.ts index dcd2a0b..7bb7c3c 100644 --- a/src/views/gh/improvementProposal/ImprovementProposal.api.ts +++ b/src/views/gh/improvementProposal/ImprovementProposal.api.ts @@ -17,6 +17,7 @@ enum Api { improvementInstituteVoteList = '/improvementproposal/improvementProposal/queryImprovementInstituteVoteByMainId', getLatestProposalSequence = '/improvementproposal/improvementProposal/getLatestProposalSequence', startProcess = '/improvementproposal/improvementProposal/startProcess', + withdrawProcess = '/improvementproposal/improvementProposal/withdrawProcess', bpmInitialReview = '/improvementproposal/improvementProposal/bpm/initialReview', bpmMyDeptScore = '/improvementproposal/improvementProposal/bpm/myDeptScore', bpmDeptScore = '/improvementproposal/improvementProposal/bpm/deptScore', @@ -110,6 +111,9 @@ export const getLatestProposalSequence = (year) => defHttp.get({url: Api.getLate /** 发起改善提案审批流程。 */ export const startProposalProcess = (id: string) => defHttp.post({ url: Api.startProcess, params: { id } }); +/** 删除运行中的改善提案流程,并把业务单据回退为草稿。 */ +export const withdrawProposalProcess = (id: string) => defHttp.post({ url: Api.withdrawProcess, params: { id } }); + /** 流程节点专用接口会在任务提交前保存业务字段和网关变量。 */ export const saveInitialReview = (params) => defHttp.post({ url: Api.bpmInitialReview, params }); export const queryMyDeptScore = (params) => defHttp.get({ url: Api.bpmMyDeptScore, params }); diff --git a/src/views/gh/improvementProposal/ImprovementProposalList.vue b/src/views/gh/improvementProposal/ImprovementProposalList.vue index 38ae9fb..4ba9b99 100644 --- a/src/views/gh/improvementProposal/ImprovementProposalList.vue +++ b/src/views/gh/improvementProposal/ImprovementProposalList.vue @@ -94,7 +94,7 @@ import {useModal} from '/@/components/Modal'; import ImprovementProposalModal from './components/ImprovementProposalModal.vue' import {columns, superQuerySchema} from './ImprovementProposal.data'; - import {list, deleteOne, batchDelete, getImportUrl, getExportUrl, startProposalProcess} from './ImprovementProposal.api'; + import {list, deleteOne, batchDelete, getImportUrl, getExportUrl, startProposalProcess, withdrawProposalProcess} from './ImprovementProposal.api'; import {downloadFile} from '/@/utils/common/renderUtils'; import JInput from "/@/components/Form/src/jeecg/components/JInput.vue"; import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue'; @@ -229,6 +229,17 @@ auth: 'improvementproposal:improvement_proposal:delete' }); } + if (isProcessing(record)) { + dropDownAction.push({ + label: '删除流程', + popConfirm: { + title: '确认删除流程吗?删除后提案将回退为草稿,当前评分、投票和审批数据将被清空。', + confirm: handleWithdrawProcess.bind(null, record), + placement: 'topLeft', + }, + auth: 'improvementproposal:improvement_proposal:delete' + }); + } dropDownAction.push( { label: '审批进度', @@ -257,11 +268,21 @@ handleSuccess(); } + /** 仅撤回运行中的流程,成功后服务端会把提案恢复为草稿。 */ + async function handleWithdrawProcess(record) { + await withdrawProposalProcess(record.id); + handleSuccess(); + } + /** 只有未绑定流程实例的草稿可以继续维护或发起。 */ function isDraft(record) { return String(record?.bpmStatus || '') === '1' && !record?.processInstanceId; } + function isProcessing(record) { + return String(record?.bpmStatus || '') === '2' && !!record?.processInstanceId; + } + /** * 审批进度 */