From 84a90b7760d66e6dc6f4a99b43ba453ea7965602 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Wed, 3 Jun 2026 10:44:37 +0000 Subject: [PATCH] =?UTF-8?q?feat(approve):=20=E5=AE=A1=E6=89=B9=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E6=94=AF=E6=8C=81=E5=88=A0=E9=99=A4=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ApproveController 新增 process__delById 代理,转发至审批插件 process/delById; 服务端注入 is_admin(仅发起人或管理员可删) - 审批详情页新增「删除」按钮(仅已结束的审批可见),删除后独立路由返回上一页、 嵌入模式刷新列表 Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Controllers/Api/ApproveController.php | 31 +++++++++++++++ .../js/pages/manage/approve/details.vue | 38 ++++++++++++++++++- 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/ApproveController.php b/app/Http/Controllers/Api/ApproveController.php index 9c901d348..7fe650b2c 100755 --- a/app/Http/Controllers/Api/ApproveController.php +++ b/app/Http/Controllers/Api/ApproveController.php @@ -348,6 +348,37 @@ class ApproveController extends AbstractController return Base::retSuccess('已撤回', Base::arrayKeyToUnderline($task['data'])); } + /** + * @api {post} api/approve/process/delById 删除审批(流程实例) + * + * @apiDescription 需要token身份;仅可删除已结束的审批,且仅发起人或管理员可删 + * @apiVersion 1.0.0 + * @apiGroup approve + * @apiName process__delById + * + * @apiQuery {Number} proc_inst_id 流程实例ID + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function process__delById() + { + $user = User::auth(); + $data['userid'] = (string)$user->userid; + $data['proc_inst_id'] = intval(Request::input('proc_inst_id')); + $data['is_admin'] = $user->isAdmin(); + if ($data['proc_inst_id'] <= 0) { + return Base::retError('参数错误'); + } + $ret = Ihttp::ihttp_post($this->flow_url . '/api/v1/workflow/process/delById', json_encode(Base::arrayKeyToCamel($data))); + $task = json_decode($ret['ret'] == 1 ? $ret['data'] : '{}', true); + if (!$task || $task['status'] != 200) { + return Base::retError($task['message'] ?? '删除失败'); + } + return Base::retSuccess('已删除'); + } + /** * @api {post} api/approve/process/findTask 查询需要我审批的流程(审批中) * diff --git a/resources/assets/js/pages/manage/approve/details.vue b/resources/assets/js/pages/manage/approve/details.vue index ee8e39672..03d1b3005 100644 --- a/resources/assets/js/pages/manage/approve/details.vue +++ b/resources/assets/js/pages/manage/approve/details.vue @@ -181,6 +181,7 @@ + @@ -259,7 +260,7 @@ export default { }, }, computed: { - ...mapState(['formOptions']), + ...mapState(['formOptions', 'userIsAdmin']), isShowAgreeBtn() { return (this.datas.candidate || '').split(',').indexOf(this.userId + '') != -1 && !this.datas.is_finished @@ -273,6 +274,11 @@ export default { }) return is; }, + // 仅已结束的审批(已通过2/已拒绝3/已撤回4)可删,且仅发起人或管理员 + isShowDeleteBtn() { + return (this.userId == this.datas.start_user_id || this.userIsAdmin) + && [2, 3, 4].includes(Number(this.datas.state)); + }, }, mounted() { this.init() @@ -415,6 +421,36 @@ export default { }, }); }, + // 删除审批 + remove() { + $A.modalConfirm({ + content: "删除后不可恢复,确定要删除该审批吗?", + loading: true, + okType: "error", + onOk: () => { + return new Promise((resolve, reject) => { + this.$store.dispatch("call", { + url: 'approve/process/delById', + method: 'post', + data: { + proc_inst_id: this.datas.id, + } + }).then(({msg}) => { + $A.messageSuccess(msg); + resolve(); + // 删除后记录已不存在:独立路由返回上一页,嵌入模式通知父级刷新列表 + if (this.routeName == 'manage-approve-details' || this.routeName == 'manage-messenger') { + this.$router.back() + } else { + this.$emit('revocation') + } + }).catch(({msg}) => { + reject(msg); + }); + }) + }, + }); + }, // 评论 comment() { this.commentData.content = ""