大件运输联网系统前端代码
guoshilong
2022-12-26 a94f19a21fe2098811339aa916869b0ab923536c
添加车辆变更审批
16 files modified
3 files added
743 ■■■■ changed files
src/api/applicationCarChange/applicationCarChange.js 52 ●●●●● patch | view | raw | blame | history
src/api/applicationDelay/applicationDelay.js 6 ●●●● patch | view | raw | blame | history
src/api/work/work.js 10 ●●●●● patch | view | raw | blame | history
src/const/application/application.js 5 ●●●●● patch | view | raw | blame | history
src/const/application/basicInfo.js 4 ●●●● patch | view | raw | blame | history
src/const/applicationCarChange/applicationCarChange.js 230 ●●●● patch | view | raw | blame | history
src/const/applicationDelay/applicationDelay.js 107 ●●●● patch | view | raw | blame | history
src/views/application/application.vue 3 ●●●● patch | view | raw | blame | history
src/views/applicationCarChange/applicationCarChange.vue 8 ●●●● patch | view | raw | blame | history
src/views/applicationDelay/applicationDelay.vue 5 ●●●●● patch | view | raw | blame | history
src/views/work/process/audit/detail.vue 1 ●●●● patch | view | raw | blame | history
src/views/work/process/audit/handle.vue 1 ●●●● patch | view | raw | blame | history
src/views/work/process/carChangeAudit/detail.vue 107 ●●●●● patch | view | raw | blame | history
src/views/work/process/carChangeAudit/form.vue 57 ●●●●● patch | view | raw | blame | history
src/views/work/process/carChangeAudit/handle.vue 23 ●●●● patch | view | raw | blame | history
src/views/work/process/delayAudit/detail.vue 91 ●●●●● patch | view | raw | blame | history
src/views/work/process/delayAudit/form.vue 2 ●●● patch | view | raw | blame | history
src/views/work/send.vue 17 ●●●● patch | view | raw | blame | history
src/views/work/start.vue 14 ●●●● patch | view | raw | blame | history
src/api/applicationCarChange/applicationCarChange.js
@@ -12,6 +12,18 @@
  })
}
export const getPage = (current, size, params) => {
  return request({
    url: '/api/applicationCarChange/applicationCarChange/page',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}
export const getDetail = (id) => {
  return request({
    url: '/api/applicationCarChange/applicationCarChange/detail',
@@ -48,3 +60,43 @@
  })
}
// =====================审核流程===========================
/*
 *开始流程
 */
export const startCarChangeProcess = (row) => {
  return request({
    url: '/api/applicationCarChange/applicationCarChange/start-process',
    method: 'post',
    data: row
  })
}
/**
 * 获取申请流程详情
 * @param businessId
 * @returns {AxiosPromise}
 */
export const carChangeDetail = (businessId) => {
  return request({
    url: '/api/applicationCarChange/applicationCarChange/process-detail',
    method: 'get',
    params: {
      businessId
    }
  })
}
/**
 * 审批人员完成任务
 * @param data
 * @returns {AxiosPromise}
 */
export const completeTask = (data) => {
  return request({
    url: '/api/applicationCarChange/applicationCarChange/complete-task',
    method: 'post',
    data
  })
}
src/api/applicationDelay/applicationDelay.js
@@ -53,7 +53,7 @@
 */
export const startDelayProcess = (row) => {
  return request({
    url: '/apiapplicationDelay/applicationDelay/start-process',
    url: '/api/applicationDelay/applicationDelay/start-process',
    method: 'post',
    data: row
  })
@@ -66,7 +66,7 @@
 */
export const delayDetail = (businessId) => {
  return request({
    url: '/apiapplicationDelay/applicationDelay/process-detail',
    url: '/api/applicationDelay/applicationDelay/process-detail',
    method: 'get',
    params: {
      businessId
@@ -81,7 +81,7 @@
 */
export const completeTask = (data) => {
  return request({
    url: '/apiapplicationDelay/applicationDelay/complete-task',
    url: '/api/applicationDelay/applicationDelay/complete-task',
    method: 'post',
    data
  })
src/api/work/work.js
@@ -79,3 +79,13 @@
    data
  })
}
export const withdrawTask = (userId) => {
  return request({
    url: '/api/blade-flow/work/withdraw-task',
    method: 'post',
    params: {
      userId
    }
  })
}
src/const/application/application.js
@@ -21,6 +21,7 @@
  editBtn:false,
  selection: true,
  dialogClickModal: false,
  menu:false,
  group: [
    {
      label: '基本信息',
@@ -56,7 +57,7 @@
        },
        {
          label: "通行开始时间",
          prop: "startTime",
          prop: "startPassTime",
          type: "date",
          format:'yyyy-MM-dd',
          valueFormat:'yyyy-MM-dd',
@@ -65,7 +66,7 @@
        },
        {
          label: "通行结束时间",
          prop: "endTime",
          prop: "endPassTime",
          type: "date",
          format:'yyyy-MM-dd',
          valueFormat:'yyyy-MM-dd',
src/const/application/basicInfo.js
@@ -30,12 +30,12 @@
    },
    {
      label: "通行开始时间",
      prop: "startTime",
      prop: "startPassTime",
      type: "input",
    },
    {
      label: "通行结束时间",
      prop: "endTime",
      prop: "endPassTime",
      type: "input",
    },
    {
src/const/applicationCarChange/applicationCarChange.js
@@ -1,3 +1,7 @@
const labelWidth = '15%'
import store from "@/store";
const user = store.getters.userInfo
const userId = user.user_id
export default {
  height:'auto',
  calcHeight: 30,
@@ -9,6 +13,7 @@
  viewBtn: true,
  selection: true,
  dialogClickModal: false,
  menu:false,
  column: [
    {
      label: "主键",
@@ -18,88 +23,213 @@
      editDisplay: false,
      viewDisplay: false,
      hide: true,
      display:false,
    },
    {
      label: "申请表主键",
      prop: "applicationId",
      label: "申请编号",
      labelWidth:labelWidth,
      prop: "no",
      type: "select",
      dicUrl: "/api/application/application/getAll?status=10&&userId="+userId,
      props:{
        label:"no",
        value:"no"
      },
      typeformat(item, label) {
        return `${item[label]}`
      },
      rules: [{required: true, trigger: ['blur','change'],message:'请输入申请编号'}]
    },
    {
      label: "变更原因",
      span: 12,
      labelWidth:labelWidth,
      prop: "reason",
      type: "select",
      dicUrl: "/api/blade-system/dict-biz/dictionary?code=car_change_reason",
      props:{
        label:"dictValue",
        value:"dictKey"
      }
    },
    {
      label: "变更车牌号",
      prop: "carLicense",
      type: "input",
      labelWidth:labelWidth,
    },
    {
      label: "厂牌型号",
      prop: "carModel",
      labelWidth:labelWidth,
      type: "input",
    },
    {
      label: "变更车辆的车牌",
      prop: "licenseUrl",
      label: "变更挂车牌号",
      prop: "trailerLicense",
      type: "input",
      labelWidth:labelWidth,
    },
    {
      label: "租户id",
      prop: "tenantId",
      label: "挂车厂牌型号",
      prop: "trailerModel",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
      labelWidth:labelWidth,
    },
    {
      label: "创建人",
      prop: "createUser",
      label: "装备质量",
      prop: "equipmentWeight",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
      labelWidth:labelWidth,
      append:'吨',
    },
    {
      label: "创建部门",
      prop: "createDept",
      label: "轴数",
      prop: "shaftNumber",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
      labelWidth:labelWidth,
      append:'轴',
    },
    {
      label: "创建时间",
      prop: "createTime",
      label: "轮胎数",
      prop: "tireNumber",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
      labelWidth:labelWidth,
    },
    {
      label: "修改人",
      prop: "updateUser",
      label: "轴距",
      prop: "wheelbase",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
      labelWidth:labelWidth,
      append:'米',
    },
    {
      label: "修改时间",
      prop: "updateTime",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
    },
    {
      label: "状态",
      label: "办理进度",
      prop: "status",
      type: "select",
      props: {
        label: "dictValue",
        value: "dictKey"
      },
      dicUrl:'/api/blade-system/dict-biz/dictionary?code=application_status',
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      display:false,
    },
  ]
}
export const detailOption={
  height:'auto',
  calcHeight: 30,
  tip: false,
  submitBtn:false,
  emptyBtn:false,
  border: true,
  index: true,
  selection: true,
  dialogClickModal: false,
  detail:true,
  column: [
    {
      label: "主键",
      prop: "id",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
      display:false,
      disabled:true,
    },
    {
      label: "是否已删除",
      prop: "isDeleted",
      label: "申请编号",
      labelWidth:labelWidth,
      disabled:true,
      prop: "no",
      type: "select",
      dicUrl: "/api/application/application/getAll?status=10&&userId="+userId,
      props:{
        label:"no",
        value:"no"
      },
      typeformat(item, label) {
        return `${item[label]}`
      },
      rules: [{required: true, trigger: ['blur','change'],message:'请输入申请编号'}]
    },
    {
      label: "变更原因",
      disabled:true,
      span: 12,
      labelWidth:labelWidth,
      prop: "reason",
      type: "select",
      dicUrl: "/api/blade-system/dict-biz/dictionary?code=car_change_reason",
      props:{
        label:"dictValue",
        value:"dictKey"
      }
    },
    {
      label: "变更车牌号",
      disabled:true,
      prop: "carLicense",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
      labelWidth:labelWidth,
    },
    {
      label: "厂牌型号",
      disabled:true,
      prop: "carModel",
      labelWidth:labelWidth,
      type: "input",
    },
    {
      label: "变更挂车牌号",
      disabled:true,
      prop: "trailerLicense",
      type: "input",
      labelWidth:labelWidth,
    },
    {
      label: "挂车厂牌型号",
      disabled:true,
      prop: "trailerModel",
      type: "input",
      labelWidth:labelWidth,
    },
    {
      label: "装备质量",
      disabled:true,
      prop: "equipmentWeight",
      type: "input",
      labelWidth:labelWidth,
      append:'吨',
    },
    {
      label: "轴数",
      disabled:true,
      prop: "shaftNumber",
      type: "input",
      labelWidth:labelWidth,
      append:'轴',
    },
    {
      label: "轮胎数",
      disabled:true,
      prop: "tireNumber",
      type: "input",
      labelWidth:labelWidth,
    },
    {
      label: "轴距",
      disabled:true,
      prop: "wheelbase",
      type: "input",
      labelWidth:labelWidth,
      append:'米',
    },
  ]
}
src/const/applicationDelay/applicationDelay.js
@@ -14,6 +14,7 @@
  viewBtn: true,
  selection: true,
  dialogClickModal: false,
  menu:false,
  column: [
    {
      label: "主键",
@@ -36,8 +37,7 @@
        label:"no",
        value:"no"
      },
      typeformat(item, label, value) {
        console.log(item,label,value)
      typeformat(item, label) {
        return `${item[label]}`
      },
      rules: [{required: true, trigger: ['blur','change'],message:'请输入申请编号'}]
@@ -52,7 +52,7 @@
      disabled:false,
    },
    {
      label: "通行开始时间",
      label: "通行结束时间",
      labelWidth:labelWidth,
      prop: "delayEndTime",
      type: "date",
@@ -61,13 +61,48 @@
      disabled:false,
    },
    {
      label: "行驶路线",
      span:12,
      row: true,
      label: "起运机构",
      prop: "transportDept",
      type: "input",
      labelWidth:labelWidth,
      prop: "pathWay",
      disabled:false,
    },
    {
      label: "途径省份",
      prop: "passProvince",
      type: "input",
      labelWidth:labelWidth,
      disabled:false,
    },
    {
      label: "出发地",
      prop: "departure",
      type: "input",
      labelWidth:labelWidth,
      disabled:false,
    },
    {
      label: "目的地",
      prop: "destination",
      type: "input",
      labelWidth:labelWidth,
      disabled:false,
    },
    {
      label: "通行路线",
      prop: "pathway",
      type: "textarea",
      minRows:2,
      labelWidth:labelWidth,
      disabled:false,
    },
    {
      label: "通行桥涵",
      prop: "passBridge",
      type: "textarea",
      minRows:2,
      labelWidth:labelWidth,
      disabled:false,
    },
    {
      label: "延期原因",
@@ -88,6 +123,20 @@
      prop: "remark",
      type: "textarea",
      minRows:2,
    },
    {
      label: "办理进度",
      prop: "status",
      type: "select",
      props: {
        label: "dictValue",
        value: "dictKey"
      },
      dicUrl:'/api/blade-system/dict-biz/dictionary?code=application_status',
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      display:false,
    },
  ]
}
@@ -127,7 +176,7 @@
      disabled:true,
    },
    {
      label: "通行开始时间",
      label: "通行结束时间",
      labelWidth:labelWidth,
      prop: "delayEndTime",
      type: "date",
@@ -136,14 +185,48 @@
      disabled:true,
    },
    {
      label: "行驶路线",
      span:12,
      row: true,
      label: "起运机构",
      prop: "transportDept",
      type: "input",
      labelWidth:labelWidth,
      disabled:true,
      prop: "pathWay",
    },
    {
      label: "途径省份",
      prop: "passProvince",
      type: "input",
      labelWidth:labelWidth,
      disabled:true,
    },
    {
      label: "出发地",
      prop: "departure",
      type: "input",
      labelWidth:labelWidth,
      disabled:true,
    },
    {
      label: "目的地",
      prop: "destination",
      type: "input",
      labelWidth:labelWidth,
      disabled:true,
    },
    {
      label: "通行路线",
      prop: "pathway",
      type: "textarea",
      minRows:2,
      labelWidth:labelWidth,
      disabled:true,
    },
    {
      label: "通行桥涵",
      prop: "passBridge",
      type: "textarea",
      minRows:2,
      labelWidth:labelWidth,
      disabled:true,
    },
    {
      label: "延期原因",
src/views/application/application.vue
@@ -234,6 +234,7 @@
        let catId = car.id
        let goods = this.form.goodsEntity
        let goodsId = goods.id
        this.form.endPassTime = basic.endPassTime
        let form = this.form
        //保留原form中的字段
        let common = Object.assign({},form)
@@ -243,10 +244,8 @@
        form = Object.assign(form,scheme)
        form = Object.assign(form,car)
        form = Object.assign(form,goods)
        //覆盖回原form
        form = Object.assign(form,common)
        this.form.basicInfoEntity.id = basicId
        this.form.planEntity.id = planId
        this.form.schemeEntity.id = schemeId
src/views/applicationCarChange/applicationCarChange.vue
@@ -36,7 +36,7 @@
</template>
<script>
  import {getList, getDetail, add, update, remove} from "@/api/applicationCarChange/applicationCarChange";
  import {getPage, getDetail, add, update, remove} from "@/api/applicationCarChange/applicationCarChange";
  import option from "@/const/applicationCarChange/applicationCarChange";
  import {mapGetters} from "vuex";
@@ -176,10 +176,14 @@
      },
      onLoad(page, params = {}) {
        this.loading = true;
        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
        getPage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          //转换数据类型
          this.data.forEach(e=>{
            e.status = e.status.toString()
          })
          this.loading = false;
          this.selectionClear();
        });
src/views/applicationDelay/applicationDelay.vue
@@ -180,6 +180,11 @@
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          //转换数据类型
          this.data.forEach(e=>{
            e.status = e.status.toString()
          })
          this.loading = false;
          this.selectionClear();
        });
src/views/work/process/audit/detail.vue
@@ -109,6 +109,7 @@
      let catId = car.id
      let goods = this.form.goodsEntity
      let goodsId = goods.id
      this.form.endPassTime = basic.endPassTime
      let form = this.form
      //保留原form中的字段
      let common = Object.assign({},form)
src/views/work/process/audit/handle.vue
@@ -460,6 +460,7 @@
      let catId = car.id
      let goods = this.form.goodsEntity
      let goodsId = goods.id
      this.form.endPassTime = basic.endPassTime
      let form = this.form
      //保留原form中的字段
      let common = Object.assign({}, form)
src/views/work/process/carChangeAudit/detail.vue
New file
@@ -0,0 +1,107 @@
<template>
  <basic-container>
    <el-form ref="form" :model="form" label-width="80px">
      <el-row type="flex" class="row-bg" justify="end">
        <el-form-item>
          <el-button @click="handleCancel">关闭</el-button>
        </el-form-item>
      </el-row>
      <el-card shadow="hover">
        <div slot="header">
          <span>审批信息</span>
        </div>
        <avue-form :option="option" v-model="form"/>
      </el-card>
      <el-card shadow="hover">
        <div slot="header">
          <span>流程信息</span>
        </div>
        <el-row type="flex" class="row-bg">
          <el-timeline>
            <el-timeline-item :key="flow.id" :timestamp="flow.createTime" v-for="flow in flowList" placement="top">
              <el-card shadow="hover">
                <p>{{flow.assigneeName}} 在 [{{flow.createTime}}] 开始处理 [{{flow.historyActivityName}}] 环节</p>
                <p v-if="flow.historyActivityDurationTime!==''">任务历时 [{{flow.historyActivityDurationTime}}]</p>
                <p v-if="flow.comment!==''">批复意见: [{{flow.comment}}]</p>
                <p v-if="flow.endTime!==''">结束时间: [{{flow.endTime}}]</p>
              </el-card>
            </el-timeline-item>
          </el-timeline>
        </el-row>
      </el-card>
      <el-card shadow="hover">
        <div slot="header">
          <span>流程跟踪</span>
        </div>
        <el-row class="row-bg">
          <flow-design :is-display="true" :process-instance-id="processInstanceId"></flow-design>
        </el-row>
      </el-card>
    </el-form>
  </basic-container>
</template>
<script>
import {historyFlowList} from "@/api/work/process";
import {detailOption} from "@/const/applicationCarChange/applicationCarChange";
import {carChangeDetail} from "@/api/applicationCarChange/applicationCarChange";
export default {
  name: "detail",
  data() {
    return {
      businessId: '',
      processInstanceId: '',
      src: '',
      flowList: [],
      form: {},
      option:detailOption
    }
  },
  created() {
    this.init();
  },
  methods: {
    init() {
      this.processInstanceId = this.$route.params.processInstanceId;
      this.businessId = this.$route.params.businessId;
      historyFlowList(this.processInstanceId).then(res => {
        const data = res.data;
        if (data.success) {
          this.flowList = data.data;
        }
      })
      carChangeDetail(this.businessId).then(res => {
        const data = res.data;
        if (data.success) {
          this.form = data.data;
          this.initForm();
        }
      })
    },
    handleCancel() {
      this.$router.$avueRouter.closeTag();
      this.$router.push({path: `/work/start`});
    },
    initForm(){
      let form = this.form;
      let car= this.form.carEntity
      let carId = car.id
      //保留原form中的字段
      let common = Object.assign({},form)
      form = Object.assign(form,car)
      //覆盖回原form
      form = Object.assign(form,common)
      this.form.carEntity.id =carId
    }
  }
}
</script>
<style scoped>
</style>
src/views/work/process/carChangeAudit/form.vue
New file
@@ -0,0 +1,57 @@
<template>
  <div>
    <basic-container>
      <avue-form :option="option" v-model="form" @submit="handleSubmit">
        <template slot="noType" slot-scope="{item,value,label}">
          <span>申请编号:{{item.no}}---申请时间:{{item.createTime}}---车牌号:{{item.licensePlate}}</span>
        </template>
      </avue-form>
    </basic-container>
    <basic-container>
      <flow-design :is-display="true" :process-definition-id="processDefinitionId"></flow-design>
    </basic-container>
  </div>
</template>
<script>
import option from "@/const/applicationCarChange/applicationCarChange";
import {startCarChangeProcess} from "@/api/applicationCarChange/applicationCarChange";
export default {
  name: "form",
  data() {
    return {
      processDefinitionId: '',
      form: {},
      option: option
    }
  },
  created() {
    this.processDefinitionId = this.$route.params.processDefinitionId;
  },
  methods: {
    handleSubmit() {
      const params = {
        processDefinitionId: this.$route.params.processDefinitionId,
        ...this.form,
      };
      startCarChangeProcess(params).then(resp => {
        const data = resp.data;
        if (data.success) {
          this.$message.success(data.msg);
          this.$router.$avueRouter.closeTag();
          this.$router.push({path: `/work/start`});
        } else {
          this.$message.error(data.msg || '提交失败');
        }
      });
    }
  }
}
</script>
<style scoped>
</style>
src/views/work/process/carChangeAudit/handle.vue
@@ -49,8 +49,8 @@
<script>
import {historyFlowList} from "@/api/work/process";
import {completeTask,delayDetail} from "@/api/applicationDelay/applicationDelay";
import {detailOption} from "@/const/applicationDelay/applicationDelay";
import {detailOption} from "@/const/applicationCarChange/applicationCarChange";
import {carChangeDetail,completeTask} from "@/api/applicationCarChange/applicationCarChange";
export default {
  name: "handle",
@@ -114,10 +114,11 @@
          this.flowList = data.data;
        }
      })
      delayDetail(this.businessId).then(res => {
      carChangeDetail(this.businessId).then(res => {
        const data = res.data;
        if (data.success) {
          this.form = data.data;
          this.initForm();
        }
      })
    },
@@ -166,6 +167,22 @@
      }else if(arg =='close'){
        this.option.detail = true
      }
    },
    initForm(){
      let form = this.form;
      let car= this.form.carEntity
      let carId = car.id
      //保留原form中的字段
      let common = Object.assign({},form)
      form = Object.assign(form,car)
      //覆盖回原form
      form = Object.assign(form,common)
      this.form.carEntity.id =carId
    }
  }
}
src/views/work/process/delayAudit/detail.vue
New file
@@ -0,0 +1,91 @@
<template>
  <basic-container>
    <el-form ref="form" :model="form" label-width="80px">
      <el-row type="flex" class="row-bg" justify="end">
        <el-form-item>
          <el-button @click="handleCancel">关闭</el-button>
        </el-form-item>
      </el-row>
      <el-card shadow="hover">
        <div slot="header">
          <span>审批信息</span>
        </div>
        <avue-form :option="option" v-model="form"/>
      </el-card>
      <el-card shadow="hover">
        <div slot="header">
          <span>流程信息</span>
        </div>
        <el-row type="flex" class="row-bg">
          <el-timeline>
            <el-timeline-item :key="flow.id" :timestamp="flow.createTime" v-for="flow in flowList" placement="top">
              <el-card shadow="hover">
                <p>{{flow.assigneeName}} 在 [{{flow.createTime}}] 开始处理 [{{flow.historyActivityName}}] 环节</p>
                <p v-if="flow.historyActivityDurationTime!==''">任务历时 [{{flow.historyActivityDurationTime}}]</p>
                <p v-if="flow.comment!==''">批复意见: [{{flow.comment}}]</p>
                <p v-if="flow.endTime!==''">结束时间: [{{flow.endTime}}]</p>
              </el-card>
            </el-timeline-item>
          </el-timeline>
        </el-row>
      </el-card>
      <el-card shadow="hover">
        <div slot="header">
          <span>流程跟踪</span>
        </div>
        <el-row class="row-bg">
          <flow-design :is-display="true" :process-instance-id="processInstanceId"></flow-design>
        </el-row>
      </el-card>
    </el-form>
  </basic-container>
</template>
<script>
import {historyFlowList} from "@/api/work/process";
import {delayDetail} from "@/api/applicationDelay/applicationDelay";
import {mapGetters} from "vuex";
import {detailOption} from "@/const/applicationDelay/applicationDelay";
export default {
  name: "detail",
  data() {
    return {
      businessId: '',
      processInstanceId: '',
      src: '',
      flowList: [],
      form: {},
      option:detailOption
    }
  },
  created() {
    this.init();
  },
  methods: {
    init() {
      this.processInstanceId = this.$route.params.processInstanceId;
      this.businessId = this.$route.params.businessId;
      historyFlowList(this.processInstanceId).then(res => {
        const data = res.data;
        if (data.success) {
          this.flowList = data.data;
        }
      })
      delayDetail(this.businessId).then(res => {
        const data = res.data;
        if (data.success) {
          this.form = data.data;
        }
      })
    },
    handleCancel() {
      this.$router.$avueRouter.closeTag();
      this.$router.push({path: `/work/start`});
    }
  }
}
</script>
<style scoped>
</style>
src/views/work/process/delayAudit/form.vue
@@ -4,7 +4,7 @@
      <avue-form :option="option" v-model="form" @submit="handleSubmit">
        <template slot="noType" slot-scope="{item,value,label}">
          <span>申请编号:{{item.no}}---申请时间:{{item.createTime}}---到期时间:{{item.endTime}}</span>
          <span>申请编号:{{item.no}}---申请时间:{{item.createTime}}---到期时间:{{item.endPassTime}}</span>
        </template>
      </avue-form>
src/views/work/send.vue
@@ -22,6 +22,11 @@
        </el-button>
        <el-button type="text"
                   size="small"
                   icon="el-icon-delete"
                   @click.stop="handleCancel(scope.row)">撤 销
        </el-button>
        <el-button type="text"
                   size="small"
                   icon="el-icon-search"
                   v-if="permission.work_send_follow"
                   @click.stop="handleImage(scope.row,scope.index)">流程图
@@ -42,7 +47,7 @@
<script>
  import {mapGetters} from "vuex";
  import {sendList} from "@/api/work/work";
  import {sendList, withdrawTask} from "@/api/work/work";
  import {flowCategory,flowRoute} from "@/util/flow";
  export default {
@@ -75,7 +80,7 @@
          viewBtn: false,
          delBtn: false,
          dialogWidth: 900,
          menuWidth: 150,
          menuWidth: 200,
          dialogClickModal: false,
          column: [
            {
@@ -126,7 +131,7 @@
      };
    },
    computed: {
      ...mapGetters(["permission", "flowRoutes"]),
      ...mapGetters(["permission", "flowRoutes","userInfo"]),
      ids() {
        let ids = [];
        this.selectionList.forEach(ele => {
@@ -182,6 +187,12 @@
          this.loading = false;
          this.selectionClear();
        });
      },
      handleCancel(row){
        console.log(row)
        withdrawTask(this.userInfo.user_id).then(res=>{
          this.$message(res.data.msg)
        })
      }
    }
  };
src/views/work/start.vue
@@ -13,12 +13,12 @@
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad">
      <template slot="menuLeft">
        <el-radio-group v-model="mode" size="small">
          <el-radio-button label="1">通用流程</el-radio-button>
          <el-radio-button label="2">定制流程</el-radio-button>
        </el-radio-group>
      </template>
<!--      <template slot="menuLeft">-->
<!--        <el-radio-group v-model="mode" size="small">-->
<!--          <el-radio-button label="1">通用流程</el-radio-button>-->
<!--          <el-radio-button label="2">定制流程</el-radio-button>-->
<!--        </el-radio-group>-->
<!--      </template>-->
      <template slot-scope="scope" slot="menu">
        <el-button type="text"
                   size="small"
@@ -63,7 +63,7 @@
    data() {
      return {
        form: {},
        mode: '1',
        mode: '2',
        selectionId: '',
        selectionList: [],
        query: {},