|
|
@@ -0,0 +1,640 @@
|
|
|
+<template>
|
|
|
+ <div class="app-container">
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12">
|
|
|
+ <!-- 审批信息 -->
|
|
|
+ <el-card
|
|
|
+ v-for="(item, index) in runningTasks"
|
|
|
+ :key="index"
|
|
|
+ v-loading="processInstanceLoading"
|
|
|
+ class="box-card"
|
|
|
+ >
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <span class="el-icon-picture-outline"
|
|
|
+ >审批任务【{{ item.name }}】</span
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ <el-col :span="16" :offset="6">
|
|
|
+ <el-form
|
|
|
+ :ref="'form' + index"
|
|
|
+ :model="auditForms[index]"
|
|
|
+ :rules="auditRule"
|
|
|
+ label-width="100px"
|
|
|
+ >
|
|
|
+ <el-form-item
|
|
|
+ v-if="processInstance && processInstance.name"
|
|
|
+ label="流程名"
|
|
|
+ >
|
|
|
+ {{ processInstance.name }}
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ v-if="processInstance && processInstance.startUser"
|
|
|
+ label="流程发起人"
|
|
|
+ >
|
|
|
+ {{ processInstance.startUser.nickname }}
|
|
|
+ <el-tag type="info" size="mini">{{
|
|
|
+ processInstance.startUser.deptName
|
|
|
+ }}</el-tag>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="审批建议" prop="reason">
|
|
|
+ <el-input
|
|
|
+ v-model="auditForms[index].reason"
|
|
|
+ type="textarea"
|
|
|
+ placeholder="请输入审批建议"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px">
|
|
|
+ <el-button
|
|
|
+ icon="el-icon-edit-outline"
|
|
|
+ type="success"
|
|
|
+ size="mini"
|
|
|
+ @click="handleAudit(item, 2)"
|
|
|
+ >通过</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ icon="el-icon-circle-close"
|
|
|
+ type="danger"
|
|
|
+ size="mini"
|
|
|
+ @click="handleAudit(item, 3)"
|
|
|
+ >不通过</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ icon="el-icon-edit-outline"
|
|
|
+ type="primary"
|
|
|
+ size="mini"
|
|
|
+ @click="handleUpdateAssignee(item)"
|
|
|
+ >转办</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-card>
|
|
|
+ <!-- 审批记录 -->
|
|
|
+ <el-card v-loading="tasksLoad" class="box-card">
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <span class="el-icon-picture-outline">审批记录</span>
|
|
|
+ </div>
|
|
|
+ <el-col :span="16" :offset="4">
|
|
|
+ <div class="block">
|
|
|
+ <el-timeline>
|
|
|
+ <el-timeline-item
|
|
|
+ v-for="(item, index) in tasks"
|
|
|
+ :key="index"
|
|
|
+ :icon="getTimelineItemIcon(item)"
|
|
|
+ :type="getTimelineItemType(item)"
|
|
|
+ >
|
|
|
+ <p style="font-weight: 700">任务:{{ item.name }}</p>
|
|
|
+ <el-card :body-style="{ padding: '10px' }">
|
|
|
+ <label
|
|
|
+ v-if="item.assigneeUser"
|
|
|
+ style="font-weight: normal; margin-right: 30px"
|
|
|
+ >
|
|
|
+ 审批人:{{ item.assigneeUser.nickname }}
|
|
|
+ <el-tag type="info" size="mini">{{
|
|
|
+ item.assigneeUser.deptName
|
|
|
+ }}</el-tag>
|
|
|
+ </label>
|
|
|
+ <label v-if="item.createTime" style="font-weight: normal"
|
|
|
+ >创建时间:</label
|
|
|
+ >
|
|
|
+ <label style="color: #8a909c; font-weight: normal">{{
|
|
|
+ parseTime(item.createTime)
|
|
|
+ }}</label>
|
|
|
+ <label
|
|
|
+ v-if="item.endTime"
|
|
|
+ style="margin-left: 30px; font-weight: normal"
|
|
|
+ >审批时间:</label
|
|
|
+ >
|
|
|
+ <label
|
|
|
+ v-if="item.endTime"
|
|
|
+ style="color: #8a909c; font-weight: normal"
|
|
|
+ >
|
|
|
+ {{ parseTime(item.endTime) }}</label
|
|
|
+ >
|
|
|
+ <label
|
|
|
+ v-if="item.durationInMillis"
|
|
|
+ style="margin-left: 30px; font-weight: normal"
|
|
|
+ >耗时:</label
|
|
|
+ >
|
|
|
+ <label
|
|
|
+ v-if="item.durationInMillis"
|
|
|
+ style="color: #8a909c; font-weight: normal"
|
|
|
+ >
|
|
|
+ {{ getDateStar(item.durationInMillis) }}
|
|
|
+ </label>
|
|
|
+ <p v-if="item.reason">
|
|
|
+ <el-tag :type="getTimelineItemType(item)">{{
|
|
|
+ item.status === 2 ? "通过" : "不通过"
|
|
|
+ }}</el-tag>
|
|
|
+ <span :type="getTimelineItemType(item)">{{
|
|
|
+ item.reason
|
|
|
+ }}</span>
|
|
|
+ </p>
|
|
|
+ </el-card>
|
|
|
+ </el-timeline-item>
|
|
|
+ </el-timeline>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-card></el-col
|
|
|
+ >
|
|
|
+ <el-col :span="12">
|
|
|
+ <!-- 高亮流程图 -->
|
|
|
+ <el-card v-loading="processInstanceLoading" class="box-card">
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <span class="el-icon-picture-outline">流程图</span>
|
|
|
+ </div>
|
|
|
+ <my-process-viewer
|
|
|
+ key="designer"
|
|
|
+ v-model="bpmnXML"
|
|
|
+ v-bind="bpmnControlForm"
|
|
|
+ :activity-data="activityList"
|
|
|
+ :process-instance-data="processInstance"
|
|
|
+ :task-data="tasks"
|
|
|
+ /> </el-card
|
|
|
+ ></el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <!-- 对话框(转派审批人) -->
|
|
|
+ <el-dialog
|
|
|
+ title="转派审批人"
|
|
|
+ :visible.sync="updateAssignee.open"
|
|
|
+ width="500px"
|
|
|
+ append-to-body
|
|
|
+ >
|
|
|
+ <el-form
|
|
|
+ ref="updateAssigneeForm"
|
|
|
+ :model="updateAssignee.form"
|
|
|
+ :rules="updateAssignee.rules"
|
|
|
+ label-width="110px"
|
|
|
+ >
|
|
|
+ <!-- 数据多的时候采用实时搜索 -->
|
|
|
+ <!-- <el-form-item label="新审批人" prop="assigneeUserId">
|
|
|
+ <el-select
|
|
|
+ v-model="updateAssignee.form.assigneeUserId"
|
|
|
+ filterable
|
|
|
+ :filter-method="filterValue"
|
|
|
+ clearable
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in userOptions"
|
|
|
+ :key="parseInt(item.id)"
|
|
|
+ :label="item.nickname"
|
|
|
+ :value="parseInt(item.id)"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item> -->
|
|
|
+ <el-form-item label="新审批人" prop="assigneeUserId">
|
|
|
+ <el-select
|
|
|
+ v-model="updateAssignee.form.assigneeUserId"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in userOptions"
|
|
|
+ :key="parseInt(item.id)"
|
|
|
+ :label="item.nickname"
|
|
|
+ :value="parseInt(item.id)"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="转办原因" prop="reason">
|
|
|
+ <el-input
|
|
|
+ v-model="updateAssignee.form.reason"
|
|
|
+ type="textarea"
|
|
|
+ :rows="3"
|
|
|
+ clearable
|
|
|
+ placeholder="请输入转办理由"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button type="primary" @click="submitUpdateAssigneeForm"
|
|
|
+ >确 定</el-button
|
|
|
+ >
|
|
|
+ <el-button @click="cancelUpdateAssigneeForm">取 消</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { getProcessDefinitionBpmnXML } from "@/api/bpm/definition";
|
|
|
+import { DICT_TYPE, getDictDatas } from "@/utils/dict";
|
|
|
+import store from "@/store";
|
|
|
+import { decodeFields } from "@/utils/formGenerator";
|
|
|
+import { getProcessInstance } from "@/api/bpm/processInstance";
|
|
|
+import {
|
|
|
+ approveTask,
|
|
|
+ rejectTask,
|
|
|
+ getTaskListByProcessInstanceId,
|
|
|
+ updateTaskAssignee,
|
|
|
+} from "@/api/bpm/task";
|
|
|
+import { getDate } from "@/utils/dateUtils";
|
|
|
+import { listSimpleUsers } from "@/api/system/user";
|
|
|
+import { getActivityList } from "@/api/bpm/activity";
|
|
|
+import { getUserProfile } from "@/api/system/user";
|
|
|
+
|
|
|
+// 流程实例的详情页,可用于审批
|
|
|
+export default {
|
|
|
+ name: "ApprovalTask",
|
|
|
+ components: {},
|
|
|
+ props: {
|
|
|
+ id: {
|
|
|
+ type: [String, Number],
|
|
|
+ default: "",
|
|
|
+ },
|
|
|
+ receivePerson: {
|
|
|
+ type: [String, Number],
|
|
|
+ default: null,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ // 遮罩层
|
|
|
+ processInstanceLoading: false,
|
|
|
+ // 流程实例
|
|
|
+ // id: undefined, // 流程实例的编号
|
|
|
+ processInstance: {},
|
|
|
+
|
|
|
+ // 流程表单详情
|
|
|
+ detailForm: {
|
|
|
+ fields: [],
|
|
|
+ },
|
|
|
+
|
|
|
+ // BPMN 数据
|
|
|
+ bpmnXML: null,
|
|
|
+ bpmnControlForm: {
|
|
|
+ prefix: "flowable",
|
|
|
+ },
|
|
|
+ activityList: [],
|
|
|
+
|
|
|
+ // 审批记录
|
|
|
+ tasksLoad: false,
|
|
|
+ tasks: [],
|
|
|
+ firstUserTaskKey: null,
|
|
|
+
|
|
|
+ // 审批表单
|
|
|
+ runningTasks: [],
|
|
|
+ auditForms: [],
|
|
|
+ auditRule: {
|
|
|
+ reason: [
|
|
|
+ { required: true, message: "审批建议不能为空", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+
|
|
|
+ // 转派审批人
|
|
|
+ userOptions: [],
|
|
|
+ updateAssignee: {
|
|
|
+ open: false,
|
|
|
+ form: {
|
|
|
+ assigneeUserId: undefined,
|
|
|
+ reason: undefined,
|
|
|
+ },
|
|
|
+ rules: {
|
|
|
+ assigneeUserId: [
|
|
|
+ { required: true, message: "新审批人不能为空", trigger: "change" },
|
|
|
+ ],
|
|
|
+ reason: [
|
|
|
+ { required: true, message: "转办原因不能为空", trigger: "change" },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+ // 数据字典
|
|
|
+ categoryDictDatas: getDictDatas(DICT_TYPE.BPM_MODEL_CATEGORY),
|
|
|
+ };
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ id: {
|
|
|
+ handler() {
|
|
|
+ if (!this.id) {
|
|
|
+ this.$message.error("未传递id参数,无法查看流程信息");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.getDetail();
|
|
|
+ },
|
|
|
+ immediate: true,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.getUserList();
|
|
|
+ // this.getUser(); // 获取当前用户信息用来校验用户id是否与父组件传递的收货人id一致
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ // 查询用户列表
|
|
|
+ getUserList(nickname) {
|
|
|
+ // 获得用户列表
|
|
|
+ this.userOptions = [];
|
|
|
+ const params = {
|
|
|
+ nickname,
|
|
|
+ };
|
|
|
+ listSimpleUsers(params).then((response) => {
|
|
|
+ this.userOptions.push(...response.data);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 模糊搜索用户
|
|
|
+ filterValue(v) {
|
|
|
+ this.getUserList(v);
|
|
|
+ },
|
|
|
+ /** 获得流程实例 */
|
|
|
+ getDetail() {
|
|
|
+ // 获得流程实例相关
|
|
|
+ this.processInstanceLoading = true;
|
|
|
+ getProcessInstance(this.id)
|
|
|
+ .then((response) => {
|
|
|
+ if (!response.data) {
|
|
|
+ this.$message.error("查询不到流程信息!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 设置流程信息
|
|
|
+ this.processInstance = response.data;
|
|
|
+
|
|
|
+ // 设置表单信息
|
|
|
+ if (this.processInstance.processDefinition.formType === 10) {
|
|
|
+ this.detailForm = {
|
|
|
+ ...JSON.parse(this.processInstance.processDefinition.formConf),
|
|
|
+ disabled: true, // 表单禁用
|
|
|
+ formBtns: false, // 按钮隐藏
|
|
|
+ fields: decodeFields(
|
|
|
+ this.processInstance.processDefinition.formFields
|
|
|
+ ),
|
|
|
+ };
|
|
|
+ // 设置表单的值
|
|
|
+ this.detailForm.fields.forEach((item) => {
|
|
|
+ if (
|
|
|
+ this.processInstance !== null &&
|
|
|
+ typeof this.processInstance !== "undefined" &&
|
|
|
+ this.processInstance.formVariables !== null &&
|
|
|
+ typeof this.processInstance.formVariables !== "undefined"
|
|
|
+ ) {
|
|
|
+ const val = this.processInstance.formVariables[item.__vModel__];
|
|
|
+ if (val) {
|
|
|
+ item.__config__.defaultValue = val;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加载流程图
|
|
|
+ // getProcessDefinitionBpmnXML(
|
|
|
+ // this.processInstance.processDefinition.id
|
|
|
+ // ).then((response) => {
|
|
|
+ // this.bpmnXML = response.data.bpmnXml;
|
|
|
+ // });
|
|
|
+ getProcessDefinitionBpmnXML(
|
|
|
+ this.processInstance.processDefinition.id
|
|
|
+ ).then(({ data }) => {
|
|
|
+ this.bpmnXML = data.bpmnXml;
|
|
|
+ // 简单解析:把 <userTask id="xxx" ...> 的第一个 id 拿出来
|
|
|
+ const match = data.bpmnXml.match(/<userTask[^>]+id="([^"]+)"/);
|
|
|
+ this.firstUserTaskKey = match ? match[1] : null;
|
|
|
+ });
|
|
|
+ // 加载活动列表
|
|
|
+ getActivityList({
|
|
|
+ processInstanceId: this.processInstance.id,
|
|
|
+ })
|
|
|
+ .then((response) => {
|
|
|
+ this.activityList = response.data;
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ this.processInstanceLoading = false;
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ this.processInstanceLoading = false;
|
|
|
+ });
|
|
|
+
|
|
|
+ // 获得流程任务列表(审批记录)
|
|
|
+ this.tasksLoad = true;
|
|
|
+ this.runningTasks = [];
|
|
|
+ this.auditForms = [];
|
|
|
+ getTaskListByProcessInstanceId(this.id)
|
|
|
+ .then((response) => {
|
|
|
+ // 审批记录
|
|
|
+ this.tasks = [];
|
|
|
+ // 移除已取消的审批
|
|
|
+ response.data.forEach((task) => {
|
|
|
+ if (task.status !== 4) {
|
|
|
+ this.tasks.push(task);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 排序,将未完成的排在前面,已完成的排在后面;
|
|
|
+ this.tasks.sort((a, b) => {
|
|
|
+ // 有已完成的情况,按照完成时间倒序
|
|
|
+ if (a.endTime && b.endTime) {
|
|
|
+ return b.endTime - a.endTime;
|
|
|
+ } else if (a.endTime) {
|
|
|
+ return 1;
|
|
|
+ } else if (b.endTime) {
|
|
|
+ return -1;
|
|
|
+ // 都是未完成,按照创建时间倒序
|
|
|
+ } else {
|
|
|
+ return b.createTime - a.createTime;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 需要审核的记录
|
|
|
+ const userId = store.getters.userId;
|
|
|
+ this.tasks.forEach((task) => {
|
|
|
+ if (task.status !== 1) {
|
|
|
+ // 只有待处理才需要
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!task.assigneeUser || task.assigneeUser.id !== userId) {
|
|
|
+ // 自己不是处理人
|
|
|
+ console.log("待审批人", task.assigneeUser);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.runningTasks.push({ ...task });
|
|
|
+ this.auditForms.push({
|
|
|
+ reason: "同意",
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ // 取消加载中
|
|
|
+ this.tasksLoad = false;
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ this.loading = false;
|
|
|
+ this.tasksLoad = false;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /** 处理选择流程的按钮操作 **/
|
|
|
+ handleSelect(row) {
|
|
|
+ // 设置选择的流程
|
|
|
+ this.selectProcessInstance = row;
|
|
|
+
|
|
|
+ // 流程表单
|
|
|
+ if (row.formId) {
|
|
|
+ // 设置对应的表单
|
|
|
+ this.detailForm = {
|
|
|
+ ...JSON.parse(row.formConf),
|
|
|
+ fields: decodeFields(row.formFields),
|
|
|
+ };
|
|
|
+ } else if (row.formCustomCreatePath) {
|
|
|
+ this.$router.push({ path: row.formCustomCreatePath });
|
|
|
+ // 这里暂时无需加载流程图,因为跳出到另外个 Tab;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getDateStar(ms) {
|
|
|
+ return getDate(ms);
|
|
|
+ },
|
|
|
+ getTimelineItemIcon(item) {
|
|
|
+ if (item.status === 1) {
|
|
|
+ return "el-icon-time";
|
|
|
+ }
|
|
|
+ if (item.status === 2) {
|
|
|
+ return "el-icon-check";
|
|
|
+ }
|
|
|
+ if (item.status === 3) {
|
|
|
+ return "el-icon-close";
|
|
|
+ }
|
|
|
+ if (item.status === 4) {
|
|
|
+ return "el-icon-remove-outline";
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ },
|
|
|
+ getTimelineItemType(item) {
|
|
|
+ if (item.status === 1) {
|
|
|
+ return "primary";
|
|
|
+ }
|
|
|
+ if (item.status === 2) {
|
|
|
+ return "success";
|
|
|
+ }
|
|
|
+ if (item.status === 3) {
|
|
|
+ return "danger";
|
|
|
+ }
|
|
|
+ if (item.status === 4) {
|
|
|
+ return "info";
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ },
|
|
|
+ /** 处理转派审批人 */
|
|
|
+ handleUpdateAssignee(task) {
|
|
|
+ // 校验是否是收货人
|
|
|
+ // if (!this.checkReceiver(task)) {
|
|
|
+ // this.$modal.msgError("不是收货人,不能审批");
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ // 设置表单
|
|
|
+ this.resetUpdateAssigneeForm();
|
|
|
+ this.updateAssignee.form.id = task.id;
|
|
|
+ // 设置为打开
|
|
|
+ this.updateAssignee.open = true;
|
|
|
+ },
|
|
|
+ /** 提交转派审批人 */
|
|
|
+ submitUpdateAssigneeForm() {
|
|
|
+ this.$refs["updateAssigneeForm"].validate((valid) => {
|
|
|
+ if (!valid) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ updateTaskAssignee(this.updateAssignee.form)
|
|
|
+ .then((response) => {
|
|
|
+ this.$modal.msgSuccess("转派任务成功!");
|
|
|
+ this.updateAssignee.open = false;
|
|
|
+ this.getDetail(); // 获得最新详情
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ this.loading = false;
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /** 取消转派审批人 */
|
|
|
+ cancelUpdateAssigneeForm() {
|
|
|
+ this.updateAssignee.open = false;
|
|
|
+ this.resetUpdateAssigneeForm();
|
|
|
+ },
|
|
|
+ /** 重置转派审批人 */
|
|
|
+ resetUpdateAssigneeForm() {
|
|
|
+ this.updateAssignee.form = {
|
|
|
+ id: undefined,
|
|
|
+ assigneeUserId: undefined,
|
|
|
+ };
|
|
|
+ this.resetForm("updateAssigneeForm");
|
|
|
+ },
|
|
|
+ /** 处理审批退回的操作 */
|
|
|
+ handleDelegate(task) {
|
|
|
+ this.$modal.msgError("暂不支持【委派】功能,可以使用【转派】替代!");
|
|
|
+ },
|
|
|
+ /** 处理审批退回的操作 */
|
|
|
+ handleBack(task) {
|
|
|
+ this.$modal.msgError("暂不支持【退回】功能!");
|
|
|
+ // 可参考 http://blog.wya1.com/article/636697030/details/7296
|
|
|
+ // const data = {
|
|
|
+ // id: task.id,
|
|
|
+ // assigneeUserId: 1
|
|
|
+ // }
|
|
|
+ // backTask(data).then(response => {
|
|
|
+ // this.$modal.msgSuccess("回退成功!");
|
|
|
+ // this.getDetail(); // 获得最新详情
|
|
|
+ // });
|
|
|
+ },
|
|
|
+ /** 统一校验收货人(仅第一个节点) */
|
|
|
+ // checkReceiver(task) {
|
|
|
+ // if (task.taskDefinitionKey !== this.firstUserTaskKey) {
|
|
|
+ // return true;
|
|
|
+ // }
|
|
|
+ // const userId = store.getters.userId;
|
|
|
+ // return Number(userId) === Number(this.receivePerson);
|
|
|
+ // },
|
|
|
+ /** 处理审批通过和不通过的操作 */
|
|
|
+ handleAudit(task, pass) {
|
|
|
+ // 校验是否是收货人
|
|
|
+ // if (!this.checkReceiver(task)) {
|
|
|
+ // this.$modal.msgError("不是收货人,不能审批");
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ const index = this.runningTasks.indexOf(task);
|
|
|
+ this.$refs["form" + index][0].validate((valid) => {
|
|
|
+ if (!valid) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const data = {
|
|
|
+ id: task.id,
|
|
|
+ reason: this.auditForms[index].reason,
|
|
|
+ status: pass,
|
|
|
+ };
|
|
|
+ // 通过
|
|
|
+ if (pass === 2) {
|
|
|
+ approveTask(data).then((response) => {
|
|
|
+ this.$modal.msgSuccess("审批通过成功!");
|
|
|
+ this.getDetail(); // 获得最新详情
|
|
|
+ // 关闭当前窗口
|
|
|
+ this.$tab.closeOpenPage();
|
|
|
+ this.$router.go(-1);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 不通过
|
|
|
+ else {
|
|
|
+ rejectTask(data).then((response) => {
|
|
|
+ this.$modal.msgSuccess("审批驳回成功!");
|
|
|
+ this.getDetail(); // 获得最新详情
|
|
|
+ // 关闭当前窗口
|
|
|
+ this.$tab.closeOpenPage();
|
|
|
+ this.$router.go(-1);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // // 获取当前用户信息
|
|
|
+ // getUser() {
|
|
|
+ // getUserProfile().then((response) => {
|
|
|
+ // this.user = response.data;
|
|
|
+ // });
|
|
|
+ // },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss">
|
|
|
+.my-process-designer {
|
|
|
+ height: calc(100vh - 200px);
|
|
|
+}
|
|
|
+
|
|
|
+.box-card {
|
|
|
+ width: 100%;
|
|
|
+ margin-bottom: 20px;
|
|
|
+}
|
|
|
+</style>
|