Kaynağa Gözat

异常管理流程

2213980799@qq.com 2 yıl önce
ebeveyn
işleme
c92fb50ee1

+ 53 - 0
src/api/bpm/components/exceptionManagement/index.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request';
+
+/**
+ * 详情
+ */
+export async function exceptionManagementDetails (id) {
+  const res = await request.get(`/mes/exception_management/details/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+
+//修改
+export async function update(data) {
+  const res = await request.post('/mes/exception_management/update' , data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * 生产订单
+ */
+ export async function workOrder(params) {
+  const res = await request.post('/aps/workorder/page', params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 生产工单
+ */
+ export async function produceOrder (params) {
+  const res = await request.post('/mes/workorder/page', params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * aps计划工单
+ */
+ export async function getList (data) {
+  const res = await request.post('/aps/productionplan/page', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 1 - 1
src/components/upload/fileUpload.vue

@@ -14,7 +14,7 @@
       :disabled="disabled"
     >
       <slot>
-        <el-button type="primary" icon="el-icon-plus">点击上传</el-button>
+        <el-button :disabled="disabled" type="primary" icon="el-icon-plus">点击上传</el-button>
       </slot>
     </el-upload>
     <el-button type="primary" class="lib" @click="handleOpenLib" v-if="showLib"

+ 5 - 1
src/enum/dict.js

@@ -72,7 +72,11 @@ export default {
   项目任务类型: 'task_type',
   交付物类型: 'deliverables_type',
   交付物流程类型:'pro_files_approve_type',
-  预算单位: 'pro_projects_budget_unit'
+  预算单位: 'pro_projects_budget_unit',
+  异常类型: 'Exception_type',
+  异常判定: 'Exception_decide',
+  异常处置: 'Exception_dispose',
+
 };
 
 export const numberList = [

+ 342 - 0
src/views/bpm/handleTask/components/exceptionManagement/exceptionList/create.vue

@@ -0,0 +1,342 @@
+<template>
+  <div>
+    <el-form
+      ref="form"
+      :model="form"
+      :rules="rules"
+      label-width="100px"
+      class="create-form"
+    >
+      <headerTitle title="基本信息" style="margin-top: 15px"></headerTitle>
+
+      <el-row :gutter="15">
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="类型:" prop="type">
+            <DictSelection
+              dictName="异常类型"
+              v-model="form.type"
+              :disabled="type == 'detail'"
+            ></DictSelection>
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 24 } : { span: 8 }">
+          <el-form-item label="编码:" prop="code">
+            <el-input v-model="form.code" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 16, md: 24 } : { span: 16 }">
+          <el-form-item label="名称:" prop="name">
+            <el-input v-model="form.name" :disabled="type == 'detail'" />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 16, md: 24 } : { span: 16 }">
+          <el-form-item label="异常描述:">
+            <el-input
+              v-model="form.describes"
+              type="textarea"
+              :rows="2"
+              :disabled="type == 'detail'"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 16, md: 24 } : { span: 16 }">
+          <el-form-item label="关联:" prop="relationType">
+            <el-select
+              :disabled="type == 'detail'"
+              v-model="form.relationType"
+              placeholder="请选择"
+              style="width: 100%"
+              clearable
+              @input="addProduct"
+            >
+              <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16">
+          <el-form-item prop="accessory" label="上传附件">
+            <fileUpload
+              v-model="form.accessory"
+              module="main"
+              :limit="5"
+              :disabled="type == 'detail'"
+              :showLib="false"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <headerTitle
+        v-if="form.relationJson.code"
+        style="margin-top: 15px"
+        :title="getTitle() + '信息'"
+      ></headerTitle>
+      <el-row :gutter="15" v-if="form.relationJson.code">
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item :label="'生产' + getTitle() + '号'">
+            <el-input v-model="form.relationJson.code" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="计划编号">
+            <el-input v-model="form.relationJson.productionPlanCode" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="计划类型">
+            <el-input v-model="form.relationJson.planTypeName" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="工艺路线">
+            <el-input v-model="form.relationJson.produceRoutingName" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="工序">
+            <el-input v-model="form.relationJson.produceVersionName" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="产品编码">
+            <el-input v-model="form.relationJson.productCode" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="产品名称">
+            <el-input v-model="form.relationJson.productName" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="牌号">
+            <el-input v-model="form.relationJson.brandNo" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="型号">
+            <el-input v-model="form.relationJson.model" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="批号">
+            <el-input v-model="form.relationJson.batchNo" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="要求生产数量">
+            <el-input v-model="form.relationJson.requiredFormingNum" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="要求生产重量">
+            <el-input v-model="form.relationJson.sumOrderWeight" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="计划开始时间">
+            <el-input v-model="form.relationJson.reqMoldTime" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="已生产数量">
+            <el-input v-model="form.relationJson.formedNum" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="已生产重量">
+            <el-input v-model="form.relationJson.formedWeight" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="计划结束时间">
+            <el-input v-model="form.relationJson.deliveryTime" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="状态">
+            <el-input v-model="form.relationJson.status" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="班组">
+            <el-input v-model="form.relationJson.teamName" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="优先级">
+            <el-input v-model="form.relationJson.priority" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="创建人">
+            <el-input v-model="form.relationJson.createUserName" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
+          <el-form-item label="创建时间">
+            <el-input v-model="form.relationJson.createTime" disabled />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <productionPlan ref="productionPlanRef" @choose="choose" />
+    <workOrder ref="workOrderRef" @choose="choose" />
+    <produceOrder ref="produceOrderRef" @choose="choose" />
+  </div>
+</template>
+
+<script>
+import fileUpload from '@/components/upload/fileUpload';
+import { exceptionManagementDetails } from '@/api/bpm/components/exceptionManagement';
+import { transitionData } from './transition';
+import productionPlan from './productionPlan';
+import workOrder from './workOrder';
+import produceOrder from './produceOrder';
+const defaultForm = function () {
+  return {
+    accessory: [],
+    images: [],
+    code: '',
+    type: '',
+    relationType: '', //关联类型 1 计划 2订单 3工单
+    relationId: '', //关联id
+    relationCode: '',
+    exceptionDetermine: '', //异常判定
+    exceptionDispose: '', //异常处置
+    approvalStatus: '', //审批状态
+    approvalOpinion: '', //审批意见
+    exceptionClose: '', //异常关闭 0否 1 是
+    createUserName: '', //创建人名称
+    id: '',
+    describes: '',
+    createTime: '',
+    relationJson: []
+  };
+};
+export default {
+  components: { fileUpload, productionPlan, workOrder, produceOrder },
+
+  data() {
+    return {
+      visible: false,
+      loading: false,
+      form: { ...defaultForm() },
+      // 表单验证规则
+      rules: {
+        type: [{ required: true, message: '请选择', trigger: 'change' }],
+        name: [{ required: true, message: '请选择', trigger: 'change' }],
+        relationType: [{ required: true, message: '请选择', trigger: 'change' }]
+      },
+      type: '',
+      title: '创建',
+      options: [
+        { label: '生产计划', value: 1 },
+        { label: '生产订单', value: 2 },
+        { label: '生产工单', value: 3 }
+      ],
+      planType: [
+        { label: '所有计划类型', value: null },
+        { label: '内销计划', value: '1' },
+        { label: '外销计划', value: '2' },
+        { label: '预制计划', value: '3' }
+      ]
+    };
+  },
+  props: {
+    businessId: {
+      default: ''
+    },
+    taskDefinitionKey: {
+      default: ''
+    }
+  },
+  computed: {
+    // 是否开启响应式布局
+    styleResponsive() {
+      return this.$store.state.theme.styleResponsive;
+    }
+  },
+  created() {
+    this.init();
+  },
+  methods: {
+    getTitle() {
+      return this.form.relationType == 1
+        ? '计划'
+        : this.form.relationType == 2
+        ? '订单'
+        : '工单';
+    },
+    async init() {
+      const data = await exceptionManagementDetails(this.businessId);
+      this.type = this.taskDefinitionKey == 'starter' ? 'edit' : 'detail';
+      this.form = data;
+      this.form.relationJson = this.form.relationJson[0];
+      this.form.type = this.form.type + '';
+      this.title =
+        this.type == 'add' ? '新增' : this.type == 'edit' ? '修改' : '详情';
+    },
+    async getTableValue() {
+      if (this.type == 'edit' && (await this.getValidate())) {
+        return this.form;
+      }
+      if (this.type == 'add') {
+        return this.form.approvalProcess;
+      }
+      return false
+    },
+    addProduct() {
+      if (this.form.relationType == 1) {
+        this.$refs.productionPlanRef.open();
+      } else if (this.form.relationType == 2) {
+        this.$refs.workOrderRef.open();
+      } else if (this.form.relationType == 3) {
+        this.$refs.produceOrderRef.open();
+      }
+    },
+    getValidate() {
+      return new Promise((resolve, reject) => {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            resolve(false);
+          } else {
+            resolve(true);
+          }
+        });
+      });
+    },
+    choose(data) {
+      this.form.relationJson = JSON.parse(
+        JSON.stringify(transitionData(data, this.form.relationType))
+      );
+      this.form.relationId = data.relationId;
+      this.form.relationCode = data.code;
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.basic-details-title {
+  margin: 10px 0;
+}
+
+.add-product {
+  width: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+  font-size: 30px;
+  color: #1890ff;
+  margin: 10px 0;
+  cursor: pointer;
+}
+
+.create-form .el-form-item {
+  margin-bottom: 15px !important;
+}
+</style>

+ 266 - 0
src/views/bpm/handleTask/components/exceptionManagement/exceptionList/produceOrder.vue

@@ -0,0 +1,266 @@
+<template>
+  <el-dialog
+    :visible.sync="equipmentdialog"
+    :before-close="handleClose"
+    :close-on-click-modal="true"
+    :close-on-press-escape="false"
+    append-to-body
+    width="70%"
+    title="生产工单"
+  >
+    <div>
+      <el-row>
+        <el-col :span="24" class="table_col" v-if="equipmentdialog">
+          <ele-pro-table
+            ref="equiTable"
+            :columns="columns"
+            :datasource="datasource"
+            :selection.sync="selection"
+            :current.sync="current"
+            highlight-current-row
+            row-key="id"
+            height="50vh"
+            @done="onDone"
+          >
+          </ele-pro-table>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="btns">
+      <el-button type="primary" size="small" @click="selected">选择</el-button>
+      <el-button size="small" @click="handleClose">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { produceOrder } from '@/api/bpm/components/exceptionManagement';
+
+export default {
+  components: {},
+  props: {
+    selectList: Array,
+    type: {
+      default: 2 //1多选 2单选
+    }
+  },
+  data() {
+    return {
+      planType: [
+        { label: '所有计划类型', value: null },
+        { label: '内销计划', value: '1' },
+        { label: '外销计划', value: '2' },
+        { label: '预制计划', value: '3' }
+      ],
+      equipmentdialog: false,
+      current: null,
+      columns: [
+        {
+          width: 45,
+          type: 'selection',
+          columnKey: 'selection',
+          align: 'center',
+          reserveSelection: true,
+          show: this.type == 1
+        },
+        {
+          label: '生产工单号',
+          align: 'center',
+          prop: 'code',
+
+          minWidth: 110
+        },
+
+        {
+          prop: 'productionPlanCode',
+          label: '计划编号',
+          align: 'center',
+          minWidth: 110
+        },
+        {
+          prop: 'planType',
+          label: '计划类型',
+          align: 'center',
+          formatter: (row) => {
+            const obj = this.planType.find((i) => i.value == row.planType);
+            return obj && obj.label;
+          }
+        },
+        {
+          prop: 'produceRoutingName',
+          label: '工艺路线',
+          align: 'center'
+        },
+        {
+          prop: 'productCode',
+          label: '产品编号',
+          align: 'center'
+        },
+        {
+          prop: 'productName',
+          label: '产品名称',
+          align: 'center'
+        },
+        {
+          prop: 'brandNo',
+          label: '牌号',
+          align: 'center'
+        },
+        {
+          prop: 'specification',
+          label: '规格',
+          align: 'center'
+        },
+        {
+          prop: 'model',
+          label: '型号',
+          align: 'center'
+        },
+        {
+          prop: 'batchNo',
+          label: '批号',
+          align: 'center',
+          minWidth: 100,
+          showOverflowTooltip: true
+        },
+
+        {
+          prop: 'priority',
+          label: '优先级',
+          align: 'center',
+          minWidth: 120,
+          sortable: 'custom'
+        },
+
+        {
+          prop: 'formingNum',
+          label: '要求生产数量',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'formingWeight',
+          label: '要求生产重量',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'formedNum',
+          label: '已生产数量',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'formedWeight',
+          label: '已生产重量',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'planStartTime',
+          label: '计划开始时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'planCompleteTime',
+          label: '计划结束时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'startTime',
+          label: '实际开始时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+
+        {
+          prop: 'teamName',
+          label: '班组',
+          align: 'center',
+          showOverflowTooltip: true
+        }
+      ],
+      categoryLevelId: null,
+      code: null,
+      selection: [],
+      ids: []
+    };
+  },
+
+  watch: {},
+  methods: {
+    datasource({ page, where, limit }) {
+      return produceOrder({
+        ...where,
+        pageNum: page,
+        size: limit
+      });
+    },
+    open(ids) {
+      this.equipmentdialog = true;
+    },
+    onDone() {
+      this.$nextTick(() => {
+        this.$refs.equiTable.setSelectedRowKeys(this.ids);
+      });
+    },
+    handleClose() {
+      this.equipmentdialog = false;
+      this.$refs.equiTable.clearSelection();
+    },
+    // 选择
+    selected() {
+      let data =
+        this.type == 1
+          ? JSON.parse(JSON.stringify(this.selection))
+          : JSON.parse(JSON.stringify(this.current));
+      this.$emit('choose', data);
+      this.handleClose();
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.tree_col {
+  border: 1px solid #eee;
+  padding: 10px 0;
+  box-sizing: border-box;
+  max-height: 530px;
+  overflow: auto;
+}
+.table_col {
+  padding-left: 10px;
+  ::v-deep .el-table th.el-table__cell {
+    background: #f2f2f2;
+  }
+}
+.pagination {
+  text-align: right;
+  padding: 10px 0;
+}
+.btns {
+  text-align: center;
+  padding: 10px 0;
+}
+.topsearch {
+  margin-bottom: 15px;
+}
+</style>

+ 241 - 0
src/views/bpm/handleTask/components/exceptionManagement/exceptionList/productionPlan.vue

@@ -0,0 +1,241 @@
+<template>
+  <el-dialog
+    :visible.sync="equipmentdialog"
+    :before-close="handleClose"
+    :close-on-click-modal="true"
+    :close-on-press-escape="false"
+    append-to-body
+    width="70%"
+    title="生产计划"
+  >
+    <div>
+      <el-row>
+        <el-col :span="24" class="table_col" v-if="equipmentdialog">
+          <ele-pro-table
+            ref="equiTable"
+            :columns="columns"
+            :datasource="datasource"
+            :selection.sync="selection"
+            :current.sync="current"
+            highlight-current-row
+            row-key="id"
+            height="50vh"
+            @done="onDone"
+          >
+          </ele-pro-table>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="btns">
+      <el-button type="primary" size="small" @click="selected">选择</el-button>
+      <el-button size="small" @click="handleClose">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { getList, getUpdateInfoById } from '@/api/bpm/components/exceptionManagement';
+
+export default {
+  components: {},
+  props: {
+    selectList: Array,
+    type: {
+      default: 2 //1多选 2单选
+    }
+  },
+  data() {
+    return {
+      equipmentdialog: false,
+      current: null,
+      planType: [
+        { label: '所有计划类型', value: null },
+        { label: '内销计划', value: '1' },
+        { label: '外销计划', value: '2' },
+        { label: '预制计划', value: '3' }
+      ],
+      columns: [
+        {
+          width: 45,
+          type: 'selection',
+          columnKey: 'selection',
+          align: 'center',
+          reserveSelection: true,
+          show: this.type == 1
+        },
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'code',
+          label: '计划编号',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 180
+        },
+        {
+          prop: 'productCode',
+          label: '产品编码',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+        {
+          prop: 'productName',
+          label: '产品名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+
+        {
+          prop: 'brandNo',
+          label: '牌号',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'batchNo',
+          label: '批号',
+          align: 'center',
+          minWidth: 100,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'model',
+          label: '型号',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+
+        {
+          prop: 'priority',
+          label: '优先级',
+          align: 'center',
+          minWidth: 120,
+          sortable: 'custom'
+        },
+
+        {
+          prop: 'productNum',
+          label: '计划数量',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'productWeight',
+          label: '计划重量',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'requiredFormingNum',
+          label: '要求生产数量',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+
+        {
+          prop: 'newSumOrderWeight',
+          label: '要求生产重量',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+
+        {
+          prop: 'reqMoldTime',
+          label: '要求生产日期',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+
+        {
+          prop: 'orderType',
+          label: '计划类型',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (row) => {
+            const obj = this.planType.find((i) => i.value == row.planType);
+            return obj && obj.label;
+          }
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        }
+      ],
+      categoryLevelId: null,
+      code: null,
+      selection: [],
+      ids: []
+    };
+  },
+
+  watch: {},
+  methods: {
+    datasource({ page, where, limit }) {
+      return getList({
+        ...where,
+        pageNum: page,
+        size: limit
+      });
+    },
+    open(ids) {
+      this.equipmentdialog = true;
+    },
+    onDone() {
+      this.$nextTick(() => {
+        this.$refs.equiTable.setSelectedRowKeys(this.ids);
+      });
+    },
+    handleClose() {
+      this.equipmentdialog = false;
+      this.$refs.equiTable.clearSelection();
+    },
+    // 选择
+    async selected() {
+      let data = await getUpdateInfoById(this.current.id);
+      
+      this.$emit('choose', data);
+      this.handleClose();
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.tree_col {
+  border: 1px solid #eee;
+  padding: 10px 0;
+  box-sizing: border-box;
+  max-height: 530px;
+  overflow: auto;
+}
+.table_col {
+  padding-left: 10px;
+  ::v-deep .el-table th.el-table__cell {
+    background: #f2f2f2;
+  }
+}
+.pagination {
+  text-align: right;
+  padding: 10px 0;
+}
+.btns {
+  text-align: center;
+  padding: 10px 0;
+}
+.topsearch {
+  margin-bottom: 15px;
+}
+</style>

+ 262 - 0
src/views/bpm/handleTask/components/exceptionManagement/exceptionList/submit.vue

@@ -0,0 +1,262 @@
+<template>
+  <el-col :span="16" :offset="6">
+    <el-form label-width="100px" ref="formRef" :model="form">
+      <el-form-item
+        v-if="taskDefinitionKey != 'starter'"
+        label="异常判定:"
+        prop="exceptionDetermine"
+        :rules="{
+          required: true,
+          message: '请选择',
+          trigger: 'change'
+        }"
+      >
+        <DictSelection
+          dictName="异常判定"
+          v-model="form.exceptionDetermine"
+        ></DictSelection>
+      </el-form-item>
+      <el-form-item
+        label="异常处置:"
+        prop="exceptionDispose"
+        v-if="form.exceptionDetermine != 1"
+        :rules="{
+          required: true,
+          message: '请选择',
+          trigger: 'change'
+        }"
+      >
+        <DictSelection
+          dictName="异常处置"
+          v-model="form.exceptionDispose"
+        ></DictSelection>
+      </el-form-item>
+
+      <el-form-item
+        label="审批建议"
+        prop="reason"
+        style="margin-bottom: 20px"
+        :rules="{
+          required: true,
+          message: '请选择',
+          trigger: 'change'
+        }"
+      >
+        <el-input
+          type="textarea"
+          v-model="form.reason"
+          placeholder="请输入审批建议"
+        />
+      </el-form-item>
+      <el-form-item
+        v-if="taskDefinitionKey != 'starter'"
+        label="异常关闭"
+        prop="exceptionClose"
+        style="margin-bottom: 20px"
+      >
+        <el-radio v-model="form.exceptionClose" label="1">是</el-radio>
+        <el-radio v-model="form.exceptionClose" label="2">否</el-radio>
+      </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(1)"
+        v-if="form.exceptionDetermine != 1 || taskDefinitionKey == 'starter'"
+        >通过
+      </el-button>
+      <el-button
+        icon="el-icon-edit-outline"
+        type="primary"
+        size="mini"
+        @click="handleUpdateAssignee"
+        v-if="form.exceptionDetermine == 1 && taskDefinitionKey != 'starter'"
+        >上报
+      </el-button>
+      <el-button
+        icon="el-icon-circle-close"
+        type="danger"
+        size="mini"
+        @click="handleAudit(0)"
+        v-if="taskDefinitionKey != 'starter'"
+        >驳回
+      </el-button>
+      <!-- <el-dropdown
+        @command="(command) => handleCommand(command)"
+        style="margin-left: 30px"
+      >
+        <span class="el-dropdown-link">
+          更多<i class="el-icon-arrow-down el-icon--right"></i>
+        </span>
+        <el-dropdown-menu slot="dropdown">
+          <el-dropdown-item command="cancel">作废</el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown> -->
+    </div>
+  </el-col>
+</template>
+
+<script>
+import { approveTaskWithVariables } from '@/api/bpm/task';
+import { listAllUserBind } from '@/api/system/organization';
+import { update } from '@/api/bpm/components/exceptionManagement';
+import dictMixins from '@/mixins/dictMixins';
+
+// import {
+//   assign,
+//   cancel
+// } from '@/api/bpm/components/purchasingManage/purchasePlanManage';
+
+// 流程实例的详情页,可用于审批
+export default {
+  mixins: [dictMixins],
+
+  name: '',
+  components: {
+    //   Parser
+  },
+  props: {
+    businessId: {
+      default: ''
+    },
+    taskId: {
+      default: ''
+    },
+    id: {
+      default: ''
+    },
+    taskDefinitionKey: {
+      default: ''
+    }
+  },
+  data() {
+    return {
+      form: {
+        reason: '',
+        exceptionClose: '2',
+        exceptionDetermine: '1',
+        exceptionDispose: ''
+      },
+      userOptions: []
+    };
+  },
+  created() {
+    console.log(this.taskDefinitionKey, 'this.taskDefinitionKey');
+    this.requestDict('异常处置');
+    this.requestDict('异常判定');
+    this.userOptions = [];
+    listAllUserBind().then((data) => {
+      this.userOptions.push(...data);
+    });
+  },
+  methods: {
+    /** 处理转办审批人 */
+    handleUpdateAssignee() {
+      this.$emit('handleUpdateAssignee');
+    },
+
+    async handleAudit(status) {
+      //申请人申请
+      if (this.taskDefinitionKey === 'starter') {
+        const data = await this.getTableValue();
+        console.log(data);
+        // return
+        if (data) {
+          data.relationJson = [data.relationJson];
+
+          await update(data);
+          await approveTaskWithVariables({
+            id: this.taskId,
+            reason: this.form.reason,
+            variables: {
+              pass: !!status
+            }
+          });
+          this.$emit('handleAudit', {
+            status,
+            title: status === 0 ? '驳回' : ''
+          });
+        }
+      } else {
+        if (status == 1 && !this.form.exceptionDispose) {
+          this.$message.error('请选择异常处置!');
+          return;
+        }
+        const res = await approveTaskWithVariables({
+          id: this.taskId,
+          reason: this.form.reason,
+          variables: {
+            pass: !!status
+          }
+        });
+
+        if (res.data.code == '0') {
+          this.formUpdate();
+          this.$emit('handleAudit', {
+            status,
+            title: status === 0 ? '驳回' : ''
+          });
+        }
+      }
+    },
+    getTableValue() {
+      return new Promise((resolve, reject) => {
+        this.$emit('getTableValue', async (data) => {
+          resolve(await data);
+        });
+      });
+    },
+    async formUpdate() {
+      let approvalProcess = (await this.getTableValue()) || [];
+
+      approvalProcess.push({
+        auditor: this.$store.state.user.info.name,
+        exceptionDetermine: this.getDictValue(
+          '异常判定',
+          this.form.exceptionDetermine + ''
+        ),
+        exceptionDispose: this.getDictValue(
+          '异常处置',
+          this.form.exceptionDispose + ''
+        )
+      });
+
+      update({
+        exceptionClose: this.form.exceptionClose,
+        exceptionDetermine: this.form.exceptionDetermine,
+        exceptionDispose: this.form.exceptionDispose,
+        id: this.businessId,
+        approvalProcess
+      });
+    }
+    // //更多
+    // handleCommand(command) {
+    //   if (command === 'cancel') {
+    //     this.$confirm('是否确认作废?', {
+    //       type: 'warning',
+    //       cancelButtonText: '取消',
+    //       confirmButtonText: '确定'
+    //     })
+    //       .then(() => {
+    //         cancel({
+    //           id: this.taskId,
+    //           reason: this.form.reason,
+    //           businessId: this.businessId
+    //         })
+    //           .then(() => {
+    //             this.$emit('handleClose');
+    //           })
+    //           .catch(() => {
+    //             this.$message.error('流程作废失败');
+    //           });
+    //       })
+    //       .catch(() => {});
+    //   }
+    // }
+  }
+};
+</script>
+
+<style lang="scss"></style>

+ 48 - 0
src/views/bpm/handleTask/components/exceptionManagement/exceptionList/transition.js

@@ -0,0 +1,48 @@
+const planType = [
+    { label: '所有计划类型', value: null },
+    { label: '内销计划', value: '1' },
+    { label: '外销计划', value: '2' },
+    { label: '预制计划', value: '3' }
+]
+const planStatus = [
+    { label: '待发布', value: '2' },
+    { label: '发布失败', value: '3' },
+    { label: '待生产', value: '4' },
+    { label: '生产中', value: '5' },
+    { label: '已完成', value: '6' },
+    { label: '已延期', value: '7' },
+    { label: '待下达', value: '8' },
+]
+
+
+export function transitionData(data,type) {
+    return {
+        code: data.code,//编码
+        productionPlanCode: data.productionPlanCode||data.code,//编码
+        planTypeName: data.planType&&planType.find((i) => i.value == data.planType).label,//计划类型
+        planType: data.planType,//计划类型
+        model: data.model,//型号
+        relationId: data.id,//关联id
+        productCode: data.productCode,//产品编码
+        productName: data.productName,//产品名称
+        specifications: data.specifications,//规格
+        requiredFormingNum: type==1?data.salesOrders[0]?.requiredFormingNum:(data.formingNum+' '+(data.unit&&data.unit||'')),//要求生产数量
+        sumOrderWeight: type==1?(data.sumOrderWeight+data.weightUnit):(data.formingWeight+' '+(data.newWeightUnit||data.weightUnit)),//要求生产重量
+        formedNum:data.formedNum&&(data.formedNum+' '+data.unit),//已生产数量
+        formedWeight:data.formedWeight&&(data.formedWeight+' '+data.weightUnit),//已生产数量
+        batchNo: data.batchNo,//批号
+        brandNo: data.brandNo,//牌号
+        priority: type==1?data.salesOrders[0]?.priority:data.priority,//优先级
+        produceRoutingId: data.produceRoutingId,//工艺id
+        produceRoutingName: data.produceRoutingName,//工艺名称
+        produceVersionId:data.produceVersionId,//工序id
+        produceVersionName: data.produceVersionName,//工序
+        status: planStatus.find((i) => i.value == (type==1?data.salesOrders[0]?.status:data.status)).label,//状态
+        createTime: data.createTime,//
+        createUserName: '',//创建人
+        deliveryTime:type==1?data.salesOrders[0]?.deliveryTime:data.planCompleteTime,//计划结束时间
+        reqMoldTime:type==1?data.salesOrders[0]?.reqMoldTime:data.planStartTime,//计划开始时间
+        teamName:data.teamName,//班组
+        teamId:data.teamId//班组
+    }
+}

+ 254 - 0
src/views/bpm/handleTask/components/exceptionManagement/exceptionList/workOrder.vue

@@ -0,0 +1,254 @@
+<template>
+  <el-dialog
+    :visible.sync="equipmentdialog"
+    :before-close="handleClose"
+    :close-on-click-modal="true"
+    :close-on-press-escape="false"
+    append-to-body
+    width="70%"
+    title="生产订单"
+  >
+    <div>
+      <el-row>
+        <el-col :span="24" class="table_col" v-if="equipmentdialog">
+          <ele-pro-table
+            ref="equiTable"
+            :columns="columns"
+            :datasource="datasource"
+            :selection.sync="selection"
+            :current.sync="current"
+            highlight-current-row
+            
+            row-key="id"
+            height="50vh"
+            @done="onDone"
+          >
+          </ele-pro-table>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="btns">
+      <el-button type="primary" size="small" @click="selected">选择</el-button>
+      <el-button size="small" @click="handleClose">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { workOrder} from '@/api/bpm/components/exceptionManagement';
+
+
+export default {
+  components: {},
+  props: {
+    selectList: Array,
+    type: {
+      default: 2//1多选 2单选
+    }
+  },
+  data() {
+    return {
+      equipmentdialog: false,
+      current: null,
+      planType: [
+        { label: '所有计划类型', value: null },
+        { label: '内销计划', value: '1' },
+        { label: '外销计划', value: '2' },
+        { label: '预制计划', value: '3' }
+      ],
+      columns: [
+        {
+          width: 45,
+          type: 'selection',
+          columnKey: 'selection',
+          align: 'center',
+          reserveSelection: true,
+          show:this.type==1
+        },
+        {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            label: '生产订单号',
+            align: 'center',
+            minWidth: 110,
+            prop: 'code',
+
+          },
+          {
+            prop: 'productionPlanCode',
+            label: '计划编号',
+            align: 'center'
+          },
+          {
+            prop: 'produceRoutingName',
+            label: '工艺路线',
+            align: 'center'
+          },
+          {
+            prop: 'productCode',
+            label: '产品编码',
+            align: 'center'
+          },
+          {
+            prop: 'productName',
+            label: '产品名称',
+            align: 'center'
+          },
+          {
+            prop: 'brandNo',
+            label: '牌号',
+            align: 'center'
+          },
+
+          {
+            prop: 'batchNo',
+            label: '批号',
+            align: 'center',
+            minWidth: 100,
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'model',
+            label: '型号',
+            align: 'center'
+          },
+ 
+
+          {
+            prop: 'priority',
+            label: '优先级',
+            align: 'center',
+            minWidth: 120,
+            sortable: 'custom'
+          },
+
+          {
+            prop: 'formingNum',
+            label: '要求生产数量',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'formingWeight',
+            label: '要求生产重量',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110,
+          },
+          {
+            prop: 'planStartTime',
+            label: '计划开始时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+
+          {
+            prop: 'planCompleteTime',
+            label: '计划结束时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+
+          {
+            prop: 'createTime',
+            label: '创建时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+      
+
+          {
+            prop: 'serialNo',
+            label: '客户代号',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+
+          {
+            prop: 'simpleName',
+            label: '客户简称',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+
+      ],
+      categoryLevelId: null,
+      code: null,
+      selection: [],
+      ids:[]
+    };
+  },
+
+  watch: {},
+  methods: {
+    datasource({ page, where, limit }) {
+      return workOrder({
+        ...where,
+        pageNum: page,
+        size: limit
+      });
+    },
+    open(ids) {
+    
+      this.equipmentdialog = true;
+
+    
+    },
+    onDone(){
+      this.$nextTick(() => {
+        this.$refs.equiTable.setSelectedRowKeys(this.ids);
+      });
+    },
+    handleClose() {
+      this.equipmentdialog = false;
+      this.$refs.equiTable.clearSelection();
+    },
+    // 选择
+    selected() {
+      let data=this.type==1?JSON.parse(JSON.stringify(this.selection)):JSON.parse(JSON.stringify(this.current))
+      data['productNumber']=data.formingNum
+
+      this.$emit('choose', data);
+      this.handleClose();
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.tree_col {
+  border: 1px solid #eee;
+  padding: 10px 0;
+  box-sizing: border-box;
+  max-height: 530px;
+  overflow: auto;
+}
+.table_col {
+  padding-left: 10px;
+  ::v-deep .el-table th.el-table__cell {
+    background: #f2f2f2;
+  }
+}
+.pagination {
+  text-align: right;
+  padding: 10px 0;
+}
+.btns {
+  text-align: center;
+  padding: 10px 0;
+}
+.topsearch {
+  margin-bottom: 15px;
+}
+</style>

+ 1 - 1
src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/submit.vue

@@ -166,7 +166,7 @@ export default {
             reason: this.form.reason,
             businessId: this.businessId,
           }).then(() => {
-            this.$emit('handleClose');
+            this.$emit('handleClose');c
           }).catch(() => {
             this.$message.error("流程作废失败");
           });

+ 350 - 347
src/views/bpm/handleTask/index.vue

@@ -244,384 +244,387 @@
 </template>
 
 <script>
-  // import { getProcessDefinitionBpmnXML } from '@/api/bpm/definition';
-  import store from '@/store';
-  //   import {decodeFields} from "@/utils/formGenerator";
-  //   import Parser from '@/components/parser/Parser'
-  import { getProcessInstance } from '@/api/bpm/processInstance';
-  import { listAllUserBind } from '@/api/system/organization';
-  import Vue from 'vue';
+// import { getProcessDefinitionBpmnXML } from '@/api/bpm/definition';
+import store from '@/store';
+//   import {decodeFields} from "@/utils/formGenerator";
+//   import Parser from '@/components/parser/Parser'
+import { getProcessInstance } from '@/api/bpm/processInstance';
+import { listAllUserBind } from '@/api/system/organization';
+import Vue from 'vue';
 
-  import {
-    approveTask,
-    delegateTask,
-    getReturnList,
-    getTaskListByProcessInstanceId,
-    rejectTask,
-    returnTask,
-    updateTaskAssignee
-  } from '@/api/bpm/task';
-  // import { getDate } from '@/utils/dateUtils';
+import {
+  approveTask,
+  delegateTask,
+  getReturnList,
+  getTaskListByProcessInstanceId,
+  rejectTask,
+  returnTask,
+  updateTaskAssignee
+} from '@/api/bpm/task';
+// import { getDate } from '@/utils/dateUtils';
 
-  // 流程实例的详情页,可用于审批
-  export default {
-    name: 'ProcessInstanceDetail',
-    components: {
-      //   Parser
-    },
-    data() {
-      return {
-        // 遮罩层
-        processInstanceLoading: true,
-        dialogVisible: false,
-        // 流程实例
-        listData: {
-          id: undefined, // 流程实例的编号
-          pcHandleRouter: '',
-          pcViewRouter: '',
-          businessId: '', // 业务id
-          taskDefinitionKey: '',
-          taskId: '' //任务编码
-        },
+// 流程实例的详情页,可用于审批
+export default {
+  name: 'ProcessInstanceDetail',
+  components: {
+    //   Parser
+  },
+  data() {
+    return {
+      // 遮罩层
+      processInstanceLoading: true,
+      dialogVisible: false,
+      // 流程实例
+      listData: {
+        id: undefined, // 流程实例的编号
+        pcHandleRouter: '',
+        pcViewRouter: '',
+        businessId: '', // 业务id
+        taskDefinitionKey: '',
+        taskId: '' //任务编码
+      },
+
+      processInstance: {},
+      formLoading: false,
+      // 流程表单详情
+      detailForm: {
+        fields: []
+      },
+      //回退列表数据
+      returnList: [],
+      formData: {
+        id: '',
+        targetDefinitionKey: undefined,
+        reason: ''
+      },
+      formRules: {
+        targetDefinitionKey: [
+          { required: true, message: '必须选择回退节点', trigger: 'change' }
+        ],
+        reason: [
+          { required: true, message: '回退理由不能为空', trigger: 'blur' }
+        ]
+      },
+      returnOpen: false,
+      activityList: [],
+
+      tasks: [],
 
-        processInstance: {},
-        formLoading: false,
-        // 流程表单详情
-        detailForm: {
-          fields: []
+      // 审批表单
+      runningTasks: [],
+      auditForms: [],
+      auditRule: {
+        reason: [
+          { required: true, message: '审批建议不能为空', trigger: 'blur' }
+        ]
+      },
+      // 转派审批人
+      userOptions: [],
+      updateAssignee: {
+        open: false,
+        form: {
+          assigneeUserId: undefined
         },
-        //回退列表数据
-        returnList: [],
-        formData: {
-          id: '',
-          targetDefinitionKey: undefined,
+        rules: {
+          assigneeUserId: [
+            { required: true, message: '新审批人不能为空', trigger: 'change' }
+          ]
+        }
+      },
+      updateDelegate: {
+        open: false,
+        form: {
+          delegateUserId: undefined,
           reason: ''
         },
-        formRules: {
-          targetDefinitionKey: [
-            { required: true, message: '必须选择回退节点', trigger: 'change' }
+        rules: {
+          delegateUserId: [
+            { required: true, message: '新审批人不能为空', trigger: 'change' }
           ],
           reason: [
-            { required: true, message: '回退理由不能为空', trigger: 'blur' }
-          ]
-        },
-        returnOpen: false,
-        activityList: [],
-
-        tasks: [],
-
-        // 审批表单
-        runningTasks: [],
-        auditForms: [],
-        auditRule: {
-          reason: [
-            { required: true, message: '审批建议不能为空', trigger: 'blur' }
+            { required: true, message: '委派理由不能为空', trigger: 'blur' }
           ]
-        },
-        // 转派审批人
-        userOptions: [],
-        updateAssignee: {
-          open: false,
-          form: {
-            assigneeUserId: undefined
-          },
-          rules: {
-            assigneeUserId: [
-              { required: true, message: '新审批人不能为空', trigger: 'change' }
-            ]
-          }
-        },
-        updateDelegate: {
-          open: false,
-          form: {
-            delegateUserId: undefined,
-            reason: ''
-          },
-          rules: {
-            delegateUserId: [
-              { required: true, message: '新审批人不能为空', trigger: 'change' }
-            ],
-            reason: [
-              { required: true, message: '委派理由不能为空', trigger: 'blur' }
-            ]
-          }
         }
-      };
-    },
-    created() {
-      //   this.id = this.$route.query.id;
-      //   if (!this.id) {
-      //     this.$message.error('未传递 id 参数,无法查看流程信息');
-      //     return;
-      //   }
-      //   this.getDetail();
+      }
+    };
+  },
+  created() {
+    //   this.id = this.$route.query.id;
+    //   if (!this.id) {
+    //     this.$message.error('未传递 id 参数,无法查看流程信息');
+    //     return;
+    //   }
+    //   this.getDetail();
 
-      // 获得用户列表
-      this.userOptions = [];
-      listAllUserBind().then((data) => {
-        this.userOptions.push(...data);
-      });
+    // 获得用户列表
+    this.userOptions = [];
+    listAllUserBind().then((data) => {
+      this.userOptions.push(...data);
+    });
+  },
+  methods: {
+    submit(data) {
+      this.$refs.bziRef.save(data);
     },
-    methods: {
-      submit(data) {
-        this.$refs.bziRef.save(data);
-      },
-      open(data) {
-        this.listData = data;
-        console.log('实例流程~~~~~~', data);
-        this.dialogVisible = true;
-        this.getDetail();
-      },
-      activeCompChange(activeComp) {
-        console.log(activeComp);
-        this.$refs.subForm[0].activeCompChange(activeComp);
-      },
-      /** 获得流程实例 */
-      getDetail() {
-        // 获得流程实例相关
-        this.processInstanceLoading = true;
-        getProcessInstance(this.listData.id).then((response) => {
-          if (!response) {
-            this.$message.error('查询不到流程信息!');
-            return;
-          }
-          // 设置流程信息
-          console.log('==', response);
-          console.log('==', this.listData);
-          this.processInstance = response;
-          // //将业务表单,注册为动态组件
-          // let formCustomCreatePath = JSON.parse(
-          //   this.processInstance.processDefinition.formCustomCreatePath
-          // );
-          // const bizpath = formCustomCreatePath.pcView;
-          // const subpath = formCustomCreatePath.pcHandle;
-          Vue.component('async-biz-form-component', (resolve) => {
-            require([`@/views${this.listData.pcViewRouter}`], resolve);
-          });
-          Vue.component('async-sub-form-component', (resolve) => {
-            require([`@/views${this.listData.pcHandleRouter}`], resolve);
-          });
-          //   // 设置表单信息
-          //   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 => {
-          //       const val = this.processInstance.formVariables[item.__vModel__]
-          //       if (val) {
-          //         item.__config__.defaultValue = val
-          //       }
-          //     });
-          //   }
-
-          // 取消加载中
-          this.processInstanceLoading = false;
+    open(data) {
+      this.listData = data;
+      console.log('实例流程~~~~~~', data);
+      this.dialogVisible = true;
+      this.getDetail();
+    },
+    activeCompChange(activeComp) {
+      this.$refs.subForm[0].activeCompChange(activeComp);
+    },
+    /** 获得流程实例 */
+    getDetail() {
+      // 获得流程实例相关
+      this.processInstanceLoading = true;
+      getProcessInstance(this.listData.id).then((response) => {
+        if (!response) {
+          this.$message.error('查询不到流程信息!');
+          return;
+        }
+        // 设置流程信息
+        console.log('==', response);
+        console.log('==', this.listData);
+        this.processInstance = response;
+        // //将业务表单,注册为动态组件
+        // let formCustomCreatePath = JSON.parse(
+        //   this.processInstance.processDefinition.formCustomCreatePath
+        // );
+        // const bizpath = formCustomCreatePath.pcView;
+        // const subpath = formCustomCreatePath.pcHandle;
+        Vue.component('async-biz-form-component', (resolve) => {
+          require([`@/views${this.listData.pcViewRouter}`], resolve);
         });
-
-        this.runningTasks = [];
-        this.auditForms = [];
-        getTaskListByProcessInstanceId(this.listData.id).then((response) => {
-          console.log(response, 'response');
-          // 审批记录
-          this.tasks = [];
-          // 移除已取消的审批
-          response.forEach((task) => {
-            if (task.result !== 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.user.info.userId;
-          this.tasks.forEach((task) => {
-            if (task.result !== 1 && task.result !== 6) {
-              // 只有待处理才需要
-              return;
-            }
-            if (!task.assigneeUser || task.assigneeUser.id !== userId) {
-              // 自己不是处理人
-              return;
-            }
-            if (task.taskDefinitionKey !== this.listData.taskDefinitionKey) {
-              // 不是当前流程的
-              return;
-            }
-            this.runningTasks.push({ ...task });
-            console.log(this.runningTasks, ' this.runningTasks');
-            this.auditForms.push({
-              reason: ''
-            });
-          });
+        Vue.component('async-sub-form-component', (resolve) => {
+          require([`@/views${this.listData.pcHandleRouter}`], resolve);
         });
-      },
-
-      /** 处理审批通过和不通过的操作 */
-      handleAudit(data) {
-        let text = data.status === 1 ? '通过' : '不通过';
-        this.$message.success(`审批${data.title || text}成功!`);
-        this.handleClose(); // 获得最新详情
-
-        // 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
-        //   };
-        //   if (pass) {
-        //     approveTask(data).then((response) => {
-        //       this.$message.success('审批通过成功!');
-        //       this.handleClose(); // 获得最新详情
-        //     });
-        //   } else {
-        //     rejectTask(data).then((response) => {
-        //       this.$message.success('审批不通过成功!');
-        //       this.handleClose(); // 获得最新详情
+        //   // 设置表单信息
+        //   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 => {
+        //       const val = this.processInstance.formVariables[item.__vModel__]
+        //       if (val) {
+        //         item.__config__.defaultValue = val
+        //       }
         //     });
         //   }
-        // });
-      },
-      /** 处理转办审批人 */
-      handleUpdateAssignee(task) {
-        // 设置表单
-        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.$message.success('转办任务成功!');
 
-            this.updateAssignee.open = false;
-            this.handleClose(); // 获得最新详情
-          });
+        // 取消加载中
+        this.processInstanceLoading = false;
+      });
+
+      this.runningTasks = [];
+      this.auditForms = [];
+      getTaskListByProcessInstanceId(this.listData.id).then((response) => {
+        console.log(response, 'response');
+        // 审批记录
+        this.tasks = [];
+        // 移除已取消的审批
+        response.forEach((task) => {
+          if (task.result !== 4) {
+            this.tasks.push(task);
+          }
         });
-      },
-      /** 取消转办审批人 */
-      cancelUpdateAssigneeForm() {
-        this.updateAssignee.open = false;
-        this.resetUpdateAssigneeForm();
-      },
-      /** 重置转办审批人 */
-      resetUpdateAssigneeForm() {
-        this.updateAssignee.form = {
-          id: undefined,
-          assigneeUserId: undefined
-        };
-        this.resetForm('updateAssigneeForm');
-      },
-      /** 处理审批委派的操作 */
-      handleDelegate(task) {
-        //this.$modal.msgError("暂不支持【委派】功能,可以使用【转派】替代!");
-        this.resetUpdateDelegateForm();
-        this.updateDelegate.form.id = task.id;
-        // 设置为打开
-        this.updateDelegate.open = true;
-      },
-      /** 提交委派审批人 */
-      submitUpdateDelegateForm() {
-        this.$refs['updateDelegateForm'].validate((valid) => {
-          if (!valid) {
-            return;
+        // 排序,将未完成的排在前面,已完成的排在后面;
+        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;
           }
-          delegateTask(this.updateDelegate.form).then((response) => {
-            this.$message.success('委派任务成功!');
-            this.updateDelegate.open = false;
-            this.handleClose(); // 获得最新详情
-          });
         });
-      },
-      /** 取消委派审批人 */
-      cancelUpdateDelegateForm() {
-        this.updateDelegate.open = false;
-        this.resetUpdateDelegateForm();
-      },
-      /** 重置委派审批人 */
-      resetUpdateDelegateForm() {
-        this.updateDelegate.form = {
-          id: undefined,
-          delegateUserId: undefined
-        };
-        this.resetForm('updateDelegateForm');
-      },
-      /** 处理审批退回的操作 */
-      /** 返回退回节点列表 */
-      handleBackList(task) {
-        // 可参考 http://blog.wya1.com/article/636697030/details/7296
-        getReturnList(task.id).then((response) => {
-          this.returnList = response.data.data;
-          if (this.returnList.length == 0) {
-            this.$message.error('当前没有可回退的节点!');
 
+        // 需要审核的记录
+        const userId = store.getters.user.info.userId;
+        this.tasks.forEach((task) => {
+          if (task.result !== 1 && task.result !== 6) {
+            // 只有待处理才需要
             return;
           }
-          this.formData.id = task.id;
-          this.returnOpen = true;
-        });
-      },
-      /** 提交退回任务 */
-      submitReturn() {
-        if (!this.formData.targetDefinitionKey) {
-          this.$message.error('请选择退回节点!');
-        }
-        this.$refs['formRef'].validate((valid) => {
-          if (!valid) {
+          if (!task.assigneeUser || task.assigneeUser.id !== userId) {
+            // 自己不是处理人
             return;
           }
-          returnTask(this.formData).then((res) => {
-            if (res.data) {
-              this.$message.success('回退成功!');
-
-              this.returnOpen = false;
-              this.handleClose(); // 获得最新详情
-            }
+          if (task.taskDefinitionKey !== this.listData.taskDefinitionKey) {
+            // 不是当前流程的
+            return;
+          }
+          this.runningTasks.push({ ...task });
+          console.log(this.runningTasks, ' this.runningTasks');
+          this.auditForms.push({
+            reason: ''
           });
         });
-      },
-      handleClose() {
-        this.$emit('reload');
-        this.dialogVisible = false;
-      },
-      getTableValue(fn) {
-        fn(this.$refs.bziRef.getTableValue());
+      });
+    },
+
+    /** 处理审批通过和不通过的操作 */
+    handleAudit(data) {
+      let text = data.status === 1 ? '通过' : '不通过';
+      this.$message.success(`审批${data.title || text}成功!`);
+      this.handleClose(); // 获得最新详情
+
+      // 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
+      //   };
+      //   if (pass) {
+      //     approveTask(data).then((response) => {
+      //       this.$message.success('审批通过成功!');
+      //       this.handleClose(); // 获得最新详情
+      //     });
+      //   } else {
+      //     rejectTask(data).then((response) => {
+      //       this.$message.success('审批不通过成功!');
+      //       this.handleClose(); // 获得最新详情
+      //     });
+      //   }
+      // });
+    },
+    /** 处理转办审批人 */
+    handleUpdateAssignee(task) {
+    
+      // 设置表单
+      this.resetUpdateAssigneeForm();
+      this.updateAssignee.form.id = task.id;
+      // 设置为打开
+      this.updateAssignee.open = true;
+    },
+    /** 提交转办审批人 */
+    submitUpdateAssigneeForm() {
+      this.$refs['updateAssigneeForm'].validate((valid) => {
+        if (!valid) {
+          return;
+        }
+        if (this.$refs.subForm[0].formUpdate) {
+        this.$refs.subForm[0].formUpdate();
+      }
+        updateTaskAssignee(this.updateAssignee.form).then((response) => {
+          this.$message.success('转办任务成功!');
+
+          this.updateAssignee.open = false;
+          this.handleClose(); // 获得最新详情
+        });
+      });
+    },
+    /** 取消转办审批人 */
+    cancelUpdateAssigneeForm() {
+      this.updateAssignee.open = false;
+      this.resetUpdateAssigneeForm();
+    },
+    /** 重置转办审批人 */
+    resetUpdateAssigneeForm() {
+      this.updateAssignee.form = {
+        id: undefined,
+        assigneeUserId: undefined
+      };
+      this.resetForm('updateAssigneeForm');
+    },
+    /** 处理审批委派的操作 */
+    handleDelegate(task) {
+      //this.$modal.msgError("暂不支持【委派】功能,可以使用【转派】替代!");
+      this.resetUpdateDelegateForm();
+      this.updateDelegate.form.id = task.id;
+      // 设置为打开
+      this.updateDelegate.open = true;
+    },
+    /** 提交委派审批人 */
+    submitUpdateDelegateForm() {
+      this.$refs['updateDelegateForm'].validate((valid) => {
+        if (!valid) {
+          return;
+        }
+        delegateTask(this.updateDelegate.form).then((response) => {
+          this.$message.success('委派任务成功!');
+          this.updateDelegate.open = false;
+          this.handleClose(); // 获得最新详情
+        });
+      });
+    },
+    /** 取消委派审批人 */
+    cancelUpdateDelegateForm() {
+      this.updateDelegate.open = false;
+      this.resetUpdateDelegateForm();
+    },
+    /** 重置委派审批人 */
+    resetUpdateDelegateForm() {
+      this.updateDelegate.form = {
+        id: undefined,
+        delegateUserId: undefined
+      };
+      this.resetForm('updateDelegateForm');
+    },
+    /** 处理审批退回的操作 */
+    /** 返回退回节点列表 */
+    handleBackList(task) {
+      // 可参考 http://blog.wya1.com/article/636697030/details/7296
+      getReturnList(task.id).then((response) => {
+        this.returnList = response.data.data;
+        if (this.returnList.length == 0) {
+          this.$message.error('当前没有可回退的节点!');
+
+          return;
+        }
+        this.formData.id = task.id;
+        this.returnOpen = true;
+      });
+    },
+    /** 提交退回任务 */
+    submitReturn() {
+      if (!this.formData.targetDefinitionKey) {
+        this.$message.error('请选择退回节点!');
       }
+      this.$refs['formRef'].validate((valid) => {
+        if (!valid) {
+          return;
+        }
+        returnTask(this.formData).then((res) => {
+          if (res.data) {
+            this.$message.success('回退成功!');
+
+            this.returnOpen = false;
+            this.handleClose(); // 获得最新详情
+          }
+        });
+      });
+    },
+    handleClose() {
+      this.$emit('reload');
+      this.dialogVisible = false;
+    },
+    getTableValue(fn) {
+      fn(this.$refs.bziRef.getTableValue());
     }
-  };
+  }
+};
 </script>
 
 <style lang="scss">
-  .my-process-designer {
-    height: calc(100vh - 200px);
-  }
+.my-process-designer {
+  height: calc(100vh - 200px);
+}
 
-  .box-card {
-    width: 100%;
-    margin-bottom: 20px;
-  }
+.box-card {
+  width: 100%;
+  margin-bottom: 20px;
+}
 </style>