2213980799@qq.com 1 rok temu
rodzic
commit
7fd5726bcf

+ 31 - 0
src/api/beEntrusted/index.js

@@ -0,0 +1,31 @@
+import request from '@/utils/request';
+
+
+/**
+ * 列表
+ */
+export async function getList(data) {
+  const res = await request.post('/mes/be_entrusted_management/page', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 申请入库
+export async function warehouseEntry (params) {
+  const res = await request.get(`/mes/be_entrusted_management/warehouseEntry`, { params });
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//修改
+export async function update(data) {
+  const res = await request.post('mes/be_entrusted_management/update', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 48 - 0
src/api/entrust/index.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request';
+
+
+/**
+ * 列表
+ */
+export async function getList(data) {
+  const res = await request.post('/mes/please_entrust_management/page', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//新建/修改
+export async function save(data) {
+  const res = await request.post('/mes/please_entrust_management/' + (data.id ? 'update' : 'add'), data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 删除
+export async function remove(data) {
+  const res = await request.delete('/mes/please_entrust_management/remove' ,{data});
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+//提交
+export async function submit(data) {
+  const res = await request.post('/bpm/please_entrust/submit', data);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// please_entrust_management/warehouseEntry/?id=132133123&warehouseId=123131
+// 申请入库
+export async function warehouseEntry (params) {
+  const res = await request.get(`/mes/please_entrust_management/warehouseEntry`, { params });
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 37 - 31
src/components/CommomSelect/dept-select.vue

@@ -9,42 +9,48 @@
     default-expand-all
     :placeholder="placeholder"
     @input="updateValue"
+    @change="changeChoose"
+    ref="treeSelect"
+    v-bind="$attrs"
   />
 </template>
 
 <script>
-  import { listOrganizations } from '@/api/system/organization';
-  export default {
-    props: {
-      // 选中的数据(v-model)
-      value: [Number, String],
-      // 提示信息
-      placeholder: {
-        type: String,
-        default: '请选择'
-      }
-    },
-    data() {
-      return {
-        treeData: []
-      };
+import { listOrganizations } from '@/api/system/organization';
+export default {
+  props: {
+    // 选中的数据(v-model)
+    value: [Number, String],
+    // 提示信息
+    placeholder: {
+      type: String,
+      default: '请选择'
+    }
+  },
+  data() {
+    return {
+      treeData: []
+    };
+  },
+  created() {
+    this.getData();
+  },
+  methods: {
+    async getData(parmas = {}) {
+      const data = await listOrganizations(parmas);
+      this.treeData = this.$util.toTreeData({
+        data: data || [],
+        idField: 'id',
+        parentIdField: 'parentId'
+      });
     },
-    created() {
-      this.getData();
+    /* 更新选中数据 */
+    updateValue(value) {
+      this.$emit('input', value);
     },
-    methods: {
-      async getData(parmas = {}) {
-        const data = await listOrganizations(parmas);
-        this.treeData = this.$util.toTreeData({
-          data: data || [],
-          idField: 'id',
-          parentIdField: 'parentId'
-        });
-      },
-      /* 更新选中数据 */
-      updateValue(value) {
-        this.$emit('input', value);
-      }
+    changeChoose(val) {
+      this.$emit('changeGroup', val, this.$refs.treeSelect.getNodeByValue(val));
     }
-  };
+  }
+};
 </script>

+ 2 - 1
src/enum/dict.js

@@ -20,6 +20,7 @@ export default {
   不合格品原因:'unqualified_products_reason',
   订单计划类型: 'plan_type',
   异常类型: 'Exception_type',
-
+  请托类型: 'entrust_type',
+  
 };
 export const numberList = ['date_method'];

+ 1 - 1
src/styles/transition/common.scss

@@ -280,4 +280,4 @@
   flex-flow: column-reverse nowrap;
   justify-content: center;
   align-items: center;
-}
+}

+ 493 - 0
src/views/beEntrusted/components/create.vue

@@ -0,0 +1,493 @@
+<template>
+  <ele-modal
+    :visible.sync="visible"
+    :title="title"
+    width="45vw"
+    append-to-body
+    @close="cancel"
+  >
+    <!-- <div class="switch" v-if="type == 'detail'">
+      <div class="switch_left">
+        <ul>
+          <li
+            v-for="item in tabOptions"
+            :key="item.key"
+            :class="{ active: activeComp == item.key }"
+            @click="activeComp = item.key"
+          >
+            {{ item.name }}
+          </li>
+        </ul>
+      </div>
+    </div> -->
+    <el-form
+      ref="form"
+      :model="form"
+      :rules="rules"
+      label-width="100px"
+      class="create-form"
+      v-if="activeComp == 'main'"
+    >
+      <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 :span="8">
+          <el-form-item label="紧急程度:" prop="priority">
+            <el-select
+              style="width: 100%"
+              v-model="form.priority"
+              placeholder="请选择"
+              clearable
+              :disabled="type == 'detail'"
+            >
+              <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </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: 8, md: 24 } : { span: 8 }">
+          <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: 8, md: 24 } : { span: 8 }">
+          <el-form-item label="生产工单:" prop="workOrderCode">
+            <el-input
+              v-model="form.workOrderCode"
+              placeholder="请选择"
+              style="width: 100%"
+              clearable
+              :disabled="type == 'detail'"
+              @click.native="addProduct"
+            >
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 24 } : { span: 8 }">
+          <el-form-item label="工序:" prop="procedureList">
+            <el-select
+              style="width: 100%"
+              v-model="form.procedureList"
+              multiple
+              placeholder="请选择"
+              clearable
+              :disabled="type == 'detail'"
+            >
+              <el-option
+                v-for="item in produceTaskList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="请托部门:" prop="pleaseEntrustDeptName">
+            <!-- <deptSelect
+              :disabled="type == 'detail'"
+              v-model="form.pleaseEntrustDeptId"
+              @changeGroup="searchDeptNodeClick"
+            /> -->
+            <el-input v-model="form.pleaseEntrustDeptName" clearable disabled>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="请托人:" prop="pleaseEntrustUserId">
+            <el-input v-model="form.pleaseEntrustUserName" clearable disabled />
+
+            <!-- <el-select
+              :disabled="type == 'detail'"
+              v-model="form.pleaseEntrustUserId"
+              size="small"
+              style="width: 100%"
+              filterable
+            >
+              <el-option
+                v-for="item in executorList"
+                :key="item.id"
+                :value="item.id"
+                @click.native="changeExecutor(item)"
+                :label="item.name"
+              ></el-option>
+            </el-select> -->
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 8 } : { span: 8 }">
+          <el-form-item label="请托工厂:" prop="factoriesName">
+            <el-input v-model="form.factoriesName" style="width: 100%" disabled>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="受托工厂:" prop="beEntrustedFactoriesId">
+            <el-select
+              style="width: 100%"
+              v-model="form.beEntrustedFactoriesId"
+              placeholder="请选择"
+              clearable
+              :disabled="type == 'detail'"
+            >
+              <el-option
+                v-for="item in factoryList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+                @click.native="factoryListChange(item)"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="受托部门:" prop="beEntrustedDeptId">
+            <deptSelect
+              :disabled="type == 'detail'"
+              v-model="form.beEntrustedDeptId"
+              @changeGroup="beEntrustedDeptIdChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="完成时间:" prop="finishTime">
+            <el-date-picker
+              style="width: 100%"
+              v-model="form.finishTime"
+              type="date"
+              value-format="yyyy-MM-dd"
+              :disabled="type == 'detail'"
+            ></el-date-picker>
+          </el-form-item>
+        </el-col>
+      
+        <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
+          <el-form-item label="需求描述:">
+            <el-input
+              v-model="form.describes"
+              type="textarea"
+              :rows="2"
+              :disabled="type == 'detail'"
+            />
+          </el-form-item>
+        </el-col>
+        <!-- <el-col :span="8">
+          s
+        </el-col> -->
+      </el-row>
+      <headerTitle title="产品信息" style="margin-top: 15px"></headerTitle>
+
+      <el-table :data="form.pleaseEntrustObjList" border height="40vh">
+        <el-table-column label="序号" align="center" width="60">
+          <template slot-scope="scope">
+            <span>{{ scope.$index + 1 }}</span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="产品名称" align="center" prop="productName">
+        </el-table-column>
+        <el-table-column label="产品编号" align="center" prop="productCode">
+        </el-table-column>
+        <el-table-column label="牌号" align="center" prop="brandNo">
+        </el-table-column>
+        <el-table-column label="批号" align="center" prop="batchNo">
+        </el-table-column>
+        <!-- <el-table-column label="型号" align="center" prop="model">
+        </el-table-column> -->
+        <el-table-column label="规格" align="center" prop="specification">
+        </el-table-column>
+        <el-table-column label="数量" align="center" prop="productNumber">
+          <template slot-scope="scope">
+            <el-form-item
+              label-width="0px"
+              :prop="'pleaseEntrustObjList.' + scope.$index + '.productNumber'"
+              :rules="[
+                {
+                  required: true,
+                  message: '请输入数量',
+                  trigger: 'blur'
+                }
+              ]"
+            >
+              <el-input
+                :disabled="type == 'detail'"
+                v-model.number="scope.row.productNumber"
+                size="small"
+                oninput="value=value.replace(/[^\d]/g,'')"
+                style="width: 100%"
+                placeholder="输入数量"
+              ></el-input>
+            </el-form-item>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="完成时间"
+          align="center"
+          prop="finishTime"
+          width="180"
+        >
+          <template slot-scope="scope">
+            <el-form-item
+              label-width="0px"
+              :prop="'pleaseEntrustObjList.' + scope.$index + '.finishTime'"
+              :rules="[
+                {
+                  required: true,
+                  message: '请选择',
+                  trigger: 'blur'
+                }
+              ]"
+            >
+              <el-date-picker
+                :disabled="type == 'detail'"
+                style="width: 100%"
+                v-model="scope.row.finishTime"
+                type="date"
+                value-format="yyyy-MM-dd"
+              ></el-date-picker>
+            </el-form-item>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-form>
+
+    <template v-slot:footer>
+      <el-button @click="cancel">取消</el-button>
+      <el-button
+        type="primary"
+        @click="save"
+        :loading="loading"
+        v-if="type != 'detail'"
+      >
+        确定
+      </el-button>
+    </template>
+    <detail
+      v-if="activeComp === 'bpm' && form.processInstanceId"
+      :id="form.processInstanceId"
+    ></detail>
+
+  </ele-modal>
+</template>
+
+<script>
+import { save } from '@/api/entrust/index';
+import detail from '@/views/bpm/processInstance/detail.vue';
+import deptSelect from '@/components/CommomSelect/dept-select.vue';
+import { getProduceTaskList } from '@/api/aps';
+import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
+
+const defaultForm = function () {
+  return {
+    createTime: '', //创建时间
+    code: '', //编码
+    name: '', //名称
+    workOrderCode: '', //工单编码
+    pleaseEntrustUserId: '', //请托人id
+    pleaseEntrustUserName: '', //请托人名称
+    pleaseEntrustDeptId: '', //请托人部门id
+    pleaseEntrustDeptName: '', //请托人部门名称
+    beEntrustedDeptId: '', //受托人部门id
+    beEntrustedDeptName: '', //受托人部门名称
+    produceRoutingId: null,
+    produceRoutingName: '',
+    procedureList: [],
+    pleaseEntrustObjList: [], //具体请托对象
+    type: '', //类型
+    status: '',
+    describes: '', //描述
+    finishTime: '', //完成时间
+    processInstanceId: '', //流程实例id
+    factoriesName: '',
+    factoriesId: '',
+    priority: '',
+    beEntrustedFactoriesId: '', //受托工厂id
+    beEntrustedFactoriesName: '' //受托工厂名称
+  };
+};
+export default {
+  components: { detail, deptSelect },
+  data() {
+    return {
+      visible: false,
+      loading: false,
+      activeComp: 'main',
+      options: [
+        {
+          name: '一般',
+          value: 1
+        },
+        {
+          name: '紧急',
+          value: 2
+        }
+      ],
+      tabOptions: [
+        { key: 'main', name: '异常详情' },
+        { key: 'bpm', name: '流程详情' }
+      ],
+      form: { ...defaultForm() },
+      // 表单验证规则
+      rules: {
+        type: [{ required: true, message: '请选择', trigger: 'change' }],
+        name: [{ required: true, message: '请输入', trigger: 'change' }],
+
+        workOrderCode: [
+          { required: true, message: '请选择', trigger: 'change' }
+        ],
+        beEntrustedDeptId: [
+          { required: true, message: '请选择', trigger: 'change' }
+        ],
+        finishTime: [{ required: true, message: '请选择', trigger: 'change' }]
+      },
+      type: '',
+      title: '创建',
+      produceTaskList: [],
+      factoryList: []
+    };
+  },
+
+  computed: {
+    // 是否开启响应式布局
+    styleResponsive() {
+      return this.$store.state.theme.styleResponsive;
+    }
+  },
+  created() {
+    this.getFactoryList();
+  },
+  methods: {
+    open(type, row) {
+      this.visible = true;
+
+      (this.activeComp = 'main'), (this.type = type);
+      if (type != 'add') {
+        this.form = JSON.parse(JSON.stringify(row));
+        this.getProduceTaskList();
+        this.form.procedureList = this.form.procedureList.map(
+          (item) => item.produceTaskId
+        );
+        this.form.type = this.form.type + '';
+      }
+      this.title = type == 'add' ? '新增' : type == 'edit' ? '修改' : '详情';
+    },
+
+    addProduct() {
+      this.$refs.produceOrderRef.open();
+    },
+
+    beEntrustedDeptIdChange(val, row) {
+      this.form.beEntrustedDeptName = row.name;
+    },
+    factoryListChange(row) {
+      this.form.beEntrustedFactoriesName = row.name;
+    },
+    async getFactoryList() {
+      const { list } = await warehouseDefinition.getFactoryarea({
+        pageNum: 1,
+        size: 999,
+        type: 1
+      });
+      this.factoryList = list || [];
+    },
+    cancel() {
+      this.form = { ...defaultForm() };
+      this.produceTaskList=[]
+      this.visible = false;
+    },
+    choose(data) {
+      this.form.workOrderCode = data.code;
+      this.form.produceRoutingId = data.produceRoutingId;
+      this.form.produceRoutingName = data.produceRoutingName;
+      this.form.pleaseEntrustObjList = [data];
+      this.form.procedureList = [];
+      this.getProduceTaskList();
+    },
+    async getProduceTaskList() {
+      const res = await getProduceTaskList({
+        isDetail: true,
+        pageNum: 1,
+        routingId: this.form.produceRoutingId,
+        size: -1
+      });
+      console.log(res, 'res');
+      this.produceTaskList = res.list;
+    },
+    /* 保存编辑 */
+    save() {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return false;
+        }
+
+        // for (let key in this.form) {
+        //   if (key.includes('create')) {
+        //     this.form[key] = '';
+        //   }
+        // }
+        this.loading = true;
+        let data = JSON.parse(JSON.stringify(this.form));
+        data.procedureList = data.procedureList.map((item) => {
+          return {
+            produceTaskId: item,
+            produceTaskName: this.produceTaskList.find((val) => val.id == item)
+              .name
+          };
+        });
+        // console.log(data);
+        // return;
+        save(data)
+          .then((res) => {
+            this.loading = false;
+            this.$message.success('成功');
+            this.cancel();
+            this.$emit('refresh');
+          })
+          .catch((e) => {
+            this.loading = false;
+          });
+      });
+    }
+  }
+};
+</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>

+ 319 - 0
src/views/beEntrusted/index.vue

@@ -0,0 +1,319 @@
+<template>
+  <div class="ele-body">
+    <el-card shadow="never" v-loading="loading">
+      <order-search @search="reload" ref="searchRef"> </order-search>
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        :current.sync="current"
+        highlight-current-row
+        row-key="id"
+      >
+        <template v-slot:toolbar>
+          <el-button type="primary" @click="salesToProductionOpen(1)"
+            >转生产计划</el-button
+          >
+          <el-button type="primary" @click="salesToProductionOpen(2)"
+            >转生产订单</el-button
+          >
+          <el-button type="primary" @click="salesToProductionOpen(3)"
+            >转生产工单</el-button
+          >
+        </template>
+        <template v-slot:type="{ row }">
+          <span> {{ getDictValue('请托类型', row.type + '') }}</span>
+        </template>
+
+        <template v-slot:code="{ row }">
+          <el-link
+            type="primary"
+            :underline="false"
+            @click="open('detail', row)"
+          >
+            {{ row.code }}
+          </el-link>
+        </template>
+        <!-- 操作列 -->
+
+        <template v-slot:action="{ row }">
+          <el-link
+            type="primary"
+            :underline="false"
+            icon="el-icon-truck"
+            v-if="row.status == 0"
+            @click="update(row.id)"
+          >
+            接收
+          </el-link>
+          <el-link
+            type="primary"
+            :underline="false"
+            icon="el-icon-truck"
+            v-if="row.status == 1"
+            @click="openWarehouseEntry(row.id)"
+          >
+            申请入库
+          </el-link>
+        </template>
+      </ele-pro-table>
+    </el-card>
+    <Create ref="create" @refresh="reload" />
+    <SalesToProduction ref="salesToProductionRef" @success="reload" />
+    <ele-modal :visible.sync="visible" width="20vw" append-to-body>
+      <el-form label-width="100px">
+        <el-form-item label="入库仓库:" prop="warehouseId">
+          <el-select v-model="warehouseId">
+            <el-option
+              v-for="item in warehouseList"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <template v-slot:footer>
+        <el-button @click="visible = false">取消</el-button>
+        <el-button type="primary" @click="warehouseEntry"> 确定 </el-button>
+      </template>
+    </ele-modal>
+  </div>
+</template>
+  
+  <script>
+import OrderSearch from '@/views/entrust/components/order-search.vue';
+import dictMixins from '@/mixins/dictMixins';
+import Create from './components/create';
+import SalesToProduction from '@/views/unacceptedProduct/components/salesToProduction.vue';
+
+import { getList, warehouseEntry, update } from '@/api/beEntrusted/index';
+import {
+  getWarehouseList
+
+  // queryKilnXCH
+} from '@/api/mes';
+export default {
+  components: {
+    OrderSearch,
+    Create,
+    SalesToProduction
+  },
+  mixins: [dictMixins],
+  data() {
+    return {
+      visible: false,
+      loading: false,
+      id: '',
+      current: null,
+      warehouseId: '',
+      warehouseList: []
+    };
+  },
+  computed: {
+    // 表格列配置
+    columns() {
+      return [
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'type',
+          label: '类型',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          slot: 'type'
+        },
+        {
+          prop: 'priority',
+          label: '紧急程度',
+          width: 90,
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (row, column, cellValue) => {
+            return cellValue == 1 ? '一般' : cellValue == 2 ? '紧急' : '';
+          }
+        },
+        {
+          prop: 'code',
+          label: '编码',
+          align: 'center',
+          width: 160,
+          showOverflowTooltip: true,
+          slot: 'code'
+        },
+        {
+          prop: 'name',
+          label: '名称',
+          width: 130,
+          showOverflowTooltip: true,
+          align: 'center'
+        },
+        {
+          prop: 'workOrderCode',
+          label: '工单编码',
+          width: 160,
+          showOverflowTooltip: true,
+          align: 'center'
+        },
+        {
+          prop: 'procedureList',
+          width: 130,
+          showOverflowTooltip: true,
+
+          label: '工序',
+          align: 'center',
+          formatter: (row, column, cellValue) => {
+            return cellValue.map((item) => item.produceTaskName).toString();
+          }
+        },
+
+        // {
+        //   prop: 'a',
+        //   label: '关联名称',
+        //   align: 'center'
+        // },
+        {
+          prop: 'factoriesName',
+          label: '请托工厂',
+          align: 'center',
+          width: 130,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'pleaseEntrustDeptName',
+          label: '请托部门',
+          align: 'center',
+          width: 120,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'pleaseEntrustUserName',
+          label: '请托人',
+          align: 'center',
+          width: 80,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'beEntrustedFactoriesName',
+          label: '受托工厂',
+          align: 'center',
+          width: 130,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'beEntrustedDeptName',
+          label: '受托部门',
+          align: 'center',
+          width: 120,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'finishTime',
+          label: '完成时间',
+          align: 'center',
+          width: 150,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'describes',
+          label: '需求描述',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'status',
+          label: '状态',
+          align: 'center',
+          slot: 'status',
+          width: 80,
+          showOverflowTooltip: true,
+          formatter: (row, column, cellValue) => {
+            return cellValue == 0
+              ? '未接收'
+              : cellValue == 1
+              ? '已接收'
+              : cellValue == 2
+              ? '申请入库'
+              : '';
+          }
+        },
+
+        {
+          columnKey: 'action',
+          label: '操作',
+          width: 220,
+          align: 'center',
+          resizable: false,
+          fixed: 'right',
+          slot: 'action',
+          showOverflowTooltip: true
+        }
+      ];
+    }
+  },
+  created() {
+    this.requestDict('请托类型');
+    getWarehouseList().then((res) => {
+      this.warehouseList = res;
+    });
+  },
+  filters: {},
+  methods: {
+    /* 表格数据源 */
+    datasource({ page, limit, where }) {
+      return getList({
+        pageNum: page,
+        size: limit,
+        ...where
+      });
+    },
+    open(type, row) {
+      this.$refs.create.open(type, row);
+    },
+    salesToProductionOpen(type) {
+      this.$refs.salesToProductionRef.open(
+        this.current.pleaseEntrustObjList,
+        type
+      );
+    },
+    update(id) {
+      update({ id, status: 1 }).then((res) => {
+        this.reload();
+      });
+    },
+    openWarehouseEntry(id) {
+      this.id = id;
+      this.visible = true;
+    },
+    warehouseEntry() {
+      if (!this.warehouseId) {
+        this.$message.error('请选择仓库');
+        return;
+      }
+      warehouseEntry({
+        id: this.id,
+        warehouseId: this.warehouseId
+      }).then((res) => {
+        this.reload();
+        this.visible = false;
+      });
+    },
+    /* 刷新表格 */
+    reload(where) {
+      this.$nextTick(() => {
+        this.$refs.table.reload({ page: 1, where });
+      });
+    }
+  }
+};
+</script>
+  
+  <style lang="scss" scoped></style>

+ 495 - 0
src/views/entrust/components/create.vue

@@ -0,0 +1,495 @@
+<template>
+  <ele-modal
+    :visible.sync="visible"
+    :title="title"
+    width="45vw"
+    append-to-body
+    @close="cancel"
+  >
+    <div class="switch" v-if="type == 'detail'">
+      <div class="switch_left">
+        <ul>
+          <li
+            v-for="item in tabOptions"
+            :key="item.key"
+            :class="{ active: activeComp == item.key }"
+            @click="activeComp = item.key"
+          >
+            {{ item.name }}
+          </li>
+        </ul>
+      </div>
+    </div>
+    <el-form
+      ref="form"
+      :model="form"
+      :rules="rules"
+      label-width="100px"
+      class="create-form"
+      v-if="activeComp == 'main'"
+    >
+      <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 :span="8">
+          <el-form-item label="紧急程度:" prop="priority">
+            <el-select
+              style="width: 100%"
+              v-model="form.priority"
+              placeholder="请选择"
+              clearable
+              :disabled="type == 'detail'"
+            >
+              <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </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: 8, md: 24 } : { span: 8 }">
+          <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: 8, md: 24 } : { span: 8 }">
+          <el-form-item label="生产工单:" prop="workOrderCode">
+            <el-input
+              v-model="form.workOrderCode"
+              placeholder="请选择"
+              style="width: 100%"
+              clearable
+              :disabled="type == 'detail'"
+              @click.native="addProduct"
+            >
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 24 } : { span: 8 }">
+          <el-form-item label="工序:" prop="procedureList">
+            <el-select
+              style="width: 100%"
+              v-model="form.procedureList"
+              multiple
+              placeholder="请选择"
+              clearable
+              :disabled="type == 'detail'"
+            >
+              <el-option
+                v-for="item in produceTaskList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="请托部门:" prop="pleaseEntrustDeptName">
+            <!-- <deptSelect
+              :disabled="type == 'detail'"
+              v-model="form.pleaseEntrustDeptId"
+              @changeGroup="searchDeptNodeClick"
+            /> -->
+            <el-input v-model="form.pleaseEntrustDeptName" clearable disabled>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="请托人:" prop="pleaseEntrustUserId">
+            <el-input v-model="form.pleaseEntrustUserName" clearable disabled />
+
+            <!-- <el-select
+              :disabled="type == 'detail'"
+              v-model="form.pleaseEntrustUserId"
+              size="small"
+              style="width: 100%"
+              filterable
+            >
+              <el-option
+                v-for="item in executorList"
+                :key="item.id"
+                :value="item.id"
+                @click.native="changeExecutor(item)"
+                :label="item.name"
+              ></el-option>
+            </el-select> -->
+          </el-form-item>
+        </el-col>
+        <el-col v-bind="styleResponsive ? { lg: 8, md: 8 } : { span: 8 }">
+          <el-form-item label="所属工厂:" prop="factoriesName">
+            <el-input v-model="form.factoriesName" style="width: 100%" disabled>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="受托工厂:" prop="beEntrustedFactoriesId">
+            <el-select
+              style="width: 100%"
+              v-model="form.beEntrustedFactoriesId"
+              placeholder="请选择"
+              clearable
+              :disabled="type == 'detail'"
+            >
+              <el-option
+                v-for="item in factoryList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+                @click.native="factoryListChange(item)"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="受托部门:" prop="beEntrustedDeptId">
+            <deptSelect
+              :disabled="type == 'detail'"
+              v-model="form.beEntrustedDeptId"
+              @changeGroup="beEntrustedDeptIdChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="完成时间:" prop="finishTime">
+            <el-date-picker
+              style="width: 100%"
+              v-model="form.finishTime"
+              type="date"
+              value-format="yyyy-MM-dd"
+              :disabled="type == 'detail'"
+            ></el-date-picker>
+          </el-form-item>
+        </el-col>
+      
+        <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
+          <el-form-item label="需求描述:">
+            <el-input
+              v-model="form.describes"
+              type="textarea"
+              :rows="2"
+              :disabled="type == 'detail'"
+            />
+          </el-form-item>
+        </el-col>
+        <!-- <el-col :span="8">
+          s
+        </el-col> -->
+      </el-row>
+      <headerTitle title="产品信息" style="margin-top: 15px"></headerTitle>
+
+      <el-table :data="form.pleaseEntrustObjList" border height="40vh">
+        <el-table-column label="序号" align="center" width="60">
+          <template slot-scope="scope">
+            <span>{{ scope.$index + 1 }}</span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="产品名称" align="center" prop="productName">
+        </el-table-column>
+        <el-table-column label="产品编号" align="center" prop="productCode">
+        </el-table-column>
+        <el-table-column label="牌号" align="center" prop="brandNo">
+        </el-table-column>
+        <el-table-column label="批号" align="center" prop="batchNo">
+        </el-table-column>
+        <!-- <el-table-column label="型号" align="center" prop="model">
+        </el-table-column> -->
+        <el-table-column label="规格" align="center" prop="specification">
+        </el-table-column>
+        <el-table-column label="数量" align="center" prop="productNumber">
+          <template slot-scope="scope">
+            <el-form-item
+              label-width="0px"
+              :prop="'pleaseEntrustObjList.' + scope.$index + '.productNumber'"
+              :rules="[
+                {
+                  required: true,
+                  message: '请输入数量',
+                  trigger: 'blur'
+                }
+              ]"
+            >
+              <el-input
+                :disabled="type == 'detail'"
+                v-model.number="scope.row.productNumber"
+                size="small"
+                oninput="value=value.replace(/[^\d]/g,'')"
+                style="width: 100%"
+                placeholder="输入数量"
+              ></el-input>
+            </el-form-item>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="完成时间"
+          align="center"
+          prop="finishTime"
+          width="180"
+        >
+          <template slot-scope="scope">
+            <el-form-item
+              label-width="0px"
+              :prop="'pleaseEntrustObjList.' + scope.$index + '.finishTime'"
+              :rules="[
+                {
+                  required: true,
+                  message: '请选择',
+                  trigger: 'blur'
+                }
+              ]"
+            >
+              <el-date-picker
+                :disabled="type == 'detail'"
+                style="width: 100%"
+                v-model="scope.row.finishTime"
+                type="date"
+                value-format="yyyy-MM-dd"
+              ></el-date-picker>
+            </el-form-item>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-form>
+
+    <template v-slot:footer>
+      <el-button @click="cancel">取消</el-button>
+      <el-button
+        type="primary"
+        @click="save"
+        :loading="loading"
+        v-if="type != 'detail'"
+      >
+        确定
+      </el-button>
+    </template>
+    <detail
+      v-if="activeComp === 'bpm' && form.processInstanceId"
+      :id="form.processInstanceId"
+    ></detail>
+
+    <produceOrder ref="produceOrderRef" @choose="choose" />
+  </ele-modal>
+</template>
+
+<script>
+import { save } from '@/api/entrust/index';
+import produceOrder from './produceOrder';
+import detail from '@/views/bpm/processInstance/detail.vue';
+import deptSelect from '@/components/CommomSelect/dept-select.vue';
+import { getProduceTaskList } from '@/api/aps';
+import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
+
+const defaultForm = function () {
+  return {
+    createTime: '', //创建时间
+    code: '', //编码
+    name: '', //名称
+    workOrderCode: '', //工单编码
+    pleaseEntrustUserId: '', //请托人id
+    pleaseEntrustUserName: '', //请托人名称
+    pleaseEntrustDeptId: '', //请托人部门id
+    pleaseEntrustDeptName: '', //请托人部门名称
+    beEntrustedDeptId: '', //受托人部门id
+    beEntrustedDeptName: '', //受托人部门名称
+    produceRoutingId: null,
+    produceRoutingName: '',
+    procedureList: [],
+    pleaseEntrustObjList: [], //具体请托对象
+    type: '', //类型
+    status: '',
+    describes: '', //描述
+    finishTime: '', //完成时间
+    processInstanceId: '', //流程实例id
+    factoriesName: '',
+    factoriesId: '',
+    priority: '',
+    beEntrustedFactoriesId: '', //受托工厂id
+    beEntrustedFactoriesName: '' //受托工厂名称
+  };
+};
+export default {
+  components: { produceOrder, detail, deptSelect },
+  data() {
+    return {
+      visible: false,
+      loading: false,
+      activeComp: 'main',
+      options: [
+        {
+          name: '一般',
+          value: 1
+        },
+        {
+          name: '紧急',
+          value: 2
+        }
+      ],
+      tabOptions: [
+        { key: 'main', name: '异常详情' },
+        { key: 'bpm', name: '流程详情' }
+      ],
+      form: { ...defaultForm() },
+      // 表单验证规则
+      rules: {
+        type: [{ required: true, message: '请选择', trigger: 'change' }],
+        name: [{ required: true, message: '请输入', trigger: 'change' }],
+
+        workOrderCode: [
+          { required: true, message: '请选择', trigger: 'change' }
+        ],
+        beEntrustedDeptId: [
+          { required: true, message: '请选择', trigger: 'change' }
+        ],
+        finishTime: [{ required: true, message: '请选择', trigger: 'change' }]
+      },
+      type: '',
+      title: '创建',
+      produceTaskList: [],
+      factoryList: []
+    };
+  },
+
+  computed: {
+    // 是否开启响应式布局
+    styleResponsive() {
+      return this.$store.state.theme.styleResponsive;
+    }
+  },
+  created() {
+    this.getFactoryList();
+  },
+  methods: {
+    open(type, row) {
+      this.visible = true;
+
+      (this.activeComp = 'main'), (this.type = type);
+      if (type != 'add') {
+        this.form = JSON.parse(JSON.stringify(row));
+        this.getProduceTaskList();
+        this.form.procedureList = this.form.procedureList.map(
+          (item) => item.produceTaskId
+        );
+        this.form.type = this.form.type + '';
+      }
+      this.title = type == 'add' ? '新增' : type == 'edit' ? '修改' : '详情';
+    },
+
+    addProduct() {
+      this.$refs.produceOrderRef.open();
+    },
+
+    beEntrustedDeptIdChange(val, row) {
+      this.form.beEntrustedDeptName = row.name;
+    },
+    factoryListChange(row) {
+      this.form.beEntrustedFactoriesName = row.name;
+    },
+    async getFactoryList() {
+      const { list } = await warehouseDefinition.getFactoryarea({
+        pageNum: 1,
+        size: 999,
+        type: 1
+      });
+      this.factoryList = list || [];
+    },
+    cancel() {
+      this.form = { ...defaultForm() };
+      this.produceTaskList=[]
+      this.visible = false;
+    },
+    choose(data) {
+      this.form.workOrderCode = data.code;
+      this.form.produceRoutingId = data.produceRoutingId;
+      this.form.produceRoutingName = data.produceRoutingName;
+      this.form.pleaseEntrustObjList = [data];
+      this.form.procedureList = [];
+      this.getProduceTaskList();
+    },
+    async getProduceTaskList() {
+      const res = await getProduceTaskList({
+        isDetail: true,
+        pageNum: 1,
+        routingId: this.form.produceRoutingId,
+        size: -1
+      });
+      console.log(res, 'res');
+      this.produceTaskList = res.list;
+    },
+    /* 保存编辑 */
+    save() {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return false;
+        }
+
+        // for (let key in this.form) {
+        //   if (key.includes('create')) {
+        //     this.form[key] = '';
+        //   }
+        // }
+        this.loading = true;
+        let data = JSON.parse(JSON.stringify(this.form));
+        data.procedureList = data.procedureList.map((item) => {
+          return {
+            produceTaskId: item,
+            produceTaskName: this.produceTaskList.find((val) => val.id == item)
+              .name
+          };
+        });
+        // console.log(data);
+        // return;
+        save(data)
+          .then((res) => {
+            this.loading = false;
+            this.$message.success('成功');
+            this.cancel();
+            this.$emit('refresh');
+          })
+          .catch((e) => {
+            this.loading = false;
+          });
+      });
+    }
+  }
+};
+</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>

+ 201 - 0
src/views/entrust/components/order-search.vue

@@ -0,0 +1,201 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="90px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="类型:">
+          <DictSelection
+            dictName="请托类型"
+            v-model="where.type"
+          ></DictSelection>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="编码:">
+          <el-input clearable v-model="where.code" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="名称:">
+          <el-input clearable v-model="where.name" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="状态:">
+          <el-select v-model="where.status" style="width: 100%" clearable>
+            <el-option
+              v-for="item in options"
+              :key="item.code"
+              :value="item.code"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </el-col>
+
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="完成时间:">
+          <el-date-picker
+            class="w100"
+            style="width: 100%"
+            v-model="where.createTime"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            :default-time="['00:00:00', '23:59:59']"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="请托工厂:">
+          <el-select
+              style="width: 100%"
+              v-model="where.factoriesId"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="item in factoryList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="受托工厂:">
+          <el-select
+              style="width: 100%"
+              v-model="where.beEntrustedFactoriesId"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="item in factoryList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="组织机构:">
+          <auth-selection
+            data-type="Array"
+            v-model="where.deptIds"
+            style="width: 100%"
+          ></auth-selection>
+        </el-form-item>
+      </el-col>
+      
+      <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
+        <el-form-item>
+          <div style="display: flex; justify-content: end">
+            <el-button
+              type="primary"
+              icon="el-icon-search"
+              class="ele-btn-icon"
+              @click="search"
+            >
+              查询
+            </el-button>
+            <el-button @click="reset" icon="el-icon-refresh-left" type="primary"
+              >重置</el-button
+            >
+          </div>
+        </el-form-item>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+
+<script>
+import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
+
+export default {
+  props: [],
+  data() {
+    // 默认表单数据
+    const defaultWhere = {
+      type: '',
+      relationType: '',
+      name: '',
+      code: '',
+      status: '',
+      createTime: [],
+      createUserName: '',
+      beEntrustedFactoriesId:'',
+      factoriesId:'',
+      deptIds: ''
+    };
+    return {
+      // 表单数据
+      where: { ...defaultWhere },
+      factoryList:[],
+      options: [
+        { label: '草稿', value: 0 },
+        { label: '审核中', value: 1 },
+        { label: '审核通过', value: 2 },
+        { label: '生产工单', value: 3 },
+        { label: '已处置', value: 4 }
+      ]
+    };
+  },
+  computed: {
+    // 是否开启响应式布局
+    styleResponsive() {
+      return this.$store.state.theme.styleResponsive;
+    }
+  },
+  watch: {},
+  created() {
+    this.getFactoryList();
+    
+  },
+  methods: {
+    async getFactoryList() {
+      const { list } = await warehouseDefinition.getFactoryarea({
+        pageNum: 1,
+        size: 999,
+        type: 1
+      });
+      this.factoryList = list || [];
+    },
+    /* 搜索 */
+    search() {
+      const where = { ...this.where };
+      if (where.createTime?.length) {
+        where.startTime = where.createTime[0];
+        where.endTime = where.createTime[1];
+      }
+      delete where.createTime;
+      this.$emit('search', where);
+    },
+    /*  重置 */
+    reset() {
+      this.where = { ...this.defaultWhere };
+      this.search();
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.ele-form-actions {
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+}
+</style>

+ 267 - 0
src/views/entrust/components/produceOrder.vue

@@ -0,0 +1,267 @@
+<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/aps/index.js';
+
+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));
+      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>

+ 378 - 0
src/views/entrust/index.vue

@@ -0,0 +1,378 @@
+<template>
+  <div class="ele-body">
+    <el-card shadow="never" v-loading="loading">
+      <order-search @search="reload" ref="searchRef"> </order-search>
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        :selection.sync="selection"
+        row-key="id"
+      >
+        <template v-slot:type="{ row }">
+          <span> {{ getDictValue('请托类型', row.type + '') }}</span>
+        </template>
+
+        <template v-slot:code="{ row }">
+          <el-link
+            type="primary"
+            :underline="false"
+            @click="open('detail', row)"
+          >
+            {{ row.code }}
+          </el-link>
+        </template>
+        <!-- 操作列 -->
+        <!-- 表头工具栏 -->
+        <template v-slot:toolbar>
+          <el-button
+            size="small"
+            type="primary"
+            icon="el-icon-plus"
+            class="ele-btn-icon"
+            @click="open('add')"
+          >
+            新建
+          </el-button>
+          <el-button
+            size="small"
+            type="danger"
+            icon="el-icon-delete"
+            class="ele-btn-icon"
+            @click="remove()"
+            plain
+            :disabled="selection.length == 0"
+          >
+            删除
+          </el-button>
+
+          <!-- <el-button
+            size="small"
+            type="primary"
+            icon="el-icon-circle-plus-outline"
+            class="ele-btn-icon"
+            plain
+            :disabled="selection.length == 0"
+          >
+            处置
+          </el-button> -->
+        </template>
+
+        <template v-slot:action="{ row }">
+          <el-link
+            type="primary"
+            v-if="row.status == 0"
+            :underline="false"
+            icon="el-icon-truck"
+            @click="open('edit', row)"
+          >
+            编辑
+          </el-link>
+          <el-link
+            type="primary"
+            v-if="row.status == 2"
+            :underline="false"
+            icon="el-icon-truck"
+            @click="openWarehouseEntry(row.id)"
+          >
+            申请入库
+          </el-link>
+          <el-popconfirm
+            class="ele-action"
+            v-if="row.status == 0"
+            title="确定要删除吗?"
+            @confirm="remove([row.id])"
+          >
+            <template v-slot:reference>
+              <el-link type="danger" :underline="false" icon="el-icon-delete">
+                删除
+              </el-link>
+            </template>
+          </el-popconfirm>
+
+          <el-link
+            type="primary"
+            :underline="false"
+            icon="el-icon-circle-plus-outline"
+            @click="submit(row)"
+            v-if="row.status == 0"
+          >
+            提交
+          </el-link>
+        </template>
+      </ele-pro-table>
+    </el-card>
+    <Create ref="create" @refresh="reload" />
+    <ele-modal
+      :visible.sync="visible"
+      width="20vw"
+      append-to-body
+    >
+      <el-form label-width="100px">
+        <el-form-item label="入库仓库:" prop="warehouseId">
+          <el-select v-model="warehouseId">
+            <el-option
+              v-for="item in warehouseList"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <template v-slot:footer>
+        <el-button @click="visible = false">取消</el-button>
+        <el-button type="primary" @click="warehouseEntry"> 确定 </el-button>
+      </template>
+    </ele-modal>
+  </div>
+</template>
+  
+  <script>
+import OrderSearch from './components/order-search.vue';
+import dictMixins from '@/mixins/dictMixins';
+import Create from './components/create';
+import {
+  getWarehouseList
+
+  // queryKilnXCH
+} from '@/api/mes';
+import { getList, remove, submit, warehouseEntry } from '@/api/entrust/index';
+
+export default {
+  components: {
+    OrderSearch,
+    Create
+  },
+  mixins: [dictMixins],
+  data() {
+    return {
+      visible: false,
+      loading: false,
+      id: '',
+      warehouseId: '',
+      selection: [],
+      warehouseList: []
+    };
+  },
+  computed: {
+    // 表格列配置
+    columns() {
+      return [
+        {
+          columnKey: 'selection',
+          type: 'selection',
+          width: 45,
+          align: 'center',
+          fixed: 'left'
+        },
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'type',
+          label: '类型',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          slot: 'type'
+        },
+        {
+          prop: 'priority',
+          label: '紧急程度',
+          width: 90,
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (row, column, cellValue) => {
+            return cellValue == 1 ? '一般' : cellValue == 2 ? '紧急' : '';
+          }
+        },
+        {
+          prop: 'code',
+          label: '编码',
+          align: 'center',
+          width: 160,
+          showOverflowTooltip: true,
+          slot: 'code'
+        },
+        {
+          prop: 'name',
+          label: '名称',
+          width: 130,
+          showOverflowTooltip: true,
+          align: 'center'
+        },
+        {
+          prop: 'workOrderCode',
+          label: '工单编码',
+          width: 160,
+          showOverflowTooltip: true,
+          align: 'center'
+        },
+        {
+          prop: 'procedureList',
+          width: 130,
+          showOverflowTooltip: true,
+
+          label: '工序',
+          align: 'center',
+          formatter: (row, column, cellValue) => {
+            return cellValue.map((item) => item.produceTaskName).toString();
+          }
+        },
+
+        // {
+        //   prop: 'a',
+        //   label: '关联名称',
+        //   align: 'center'
+        // },
+        {
+          prop: 'factoriesName',
+          label: '所属工厂',
+          align: 'center',
+          width: 130,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'pleaseEntrustDeptName',
+          label: '请托部门',
+          align: 'center',
+          width: 120,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'pleaseEntrustUserName',
+          label: '请托人',
+          align: 'center',
+          width: 80,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'beEntrustedFactoriesName',
+          label: '受托工厂',
+          align: 'center',
+          width: 130,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'beEntrustedDeptName',
+          label: '受托部门',
+          align: 'center',
+          width: 120,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'finishTime',
+          label: '完成时间',
+          align: 'center',
+          width: 150,
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'describes',
+          label: '需求描述',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'status',
+          label: '状态',
+          align: 'center',
+          slot: 'status',
+          width: 80,
+          showOverflowTooltip: true,
+          formatter: (row, column, cellValue) => {
+            return cellValue == 0
+              ? '草稿'
+              : cellValue == 1
+              ? '审核中'
+              : cellValue == 2
+              ? '审核通过'
+              : '';
+          }
+        },
+
+        {
+          columnKey: 'action',
+          label: '操作',
+          width: 240,
+          align: 'center',
+          resizable: false,
+          fixed: 'right',
+          slot: 'action',
+          showOverflowTooltip: true
+        }
+      ];
+    }
+  },
+  created() {
+    this.requestDict('请托类型');
+    getWarehouseList().then((res) => {
+      this.warehouseList = res;
+    });
+  },
+  filters: {},
+  methods: {
+    /* 表格数据源 */
+    datasource({ page, limit, where }) {
+      return getList({
+        pageNum: page,
+        size: limit,
+        ...where
+      });
+    },
+    open(type, row) {
+      this.$refs.create.open(type, row);
+    },
+    openWarehouseEntry(id) {
+      this.id = id;
+      this.visible = true;
+    },
+    warehouseEntry() {
+      if(!this.warehouseId){
+        this.$message.error('请选择仓库');
+        return
+      }
+      warehouseEntry({
+        id:this.id,
+        warehouseId:this.warehouseId
+      }).then(res=>{
+        this.reload();
+        this.visible = false;
+      })
+    },
+    remove(id) {
+      let ids = id || this.selection.map((item) => item.id);
+      remove(ids).then((res) => {
+        this.$message.success('删除' + res);
+        this.reload();
+      });
+    },
+
+    submit(item) {
+      submit({
+        businessId: item.id,
+        beEntrustedDeptId: item.beEntrustedDeptId
+      }).then((res) => {
+        this.$message.success('提交' + res.message);
+        this.reload();
+        this.visible = false;
+      });
+    },
+    /* 刷新表格 */
+    reload(where) {
+      this.$nextTick(() => {
+        this.$refs.table.reload({ page: 1, where });
+      });
+    }
+  }
+};
+</script>
+  
+  <style lang="scss" scoped></style>

+ 1 - 1
src/views/exceptionManagement/components/create.vue

@@ -1,5 +1,5 @@
 <template>
-  <ele-modal :visible.sync="visible" :title="title" width="45vw" append-to-body>
+  <ele-modal :visible.sync="visible" :title="title" width="45vw" append-to-body @close="cancel">
     <div class="switch" v-if="type=='detail'">
       <div class="switch_left">
         <ul>

+ 1 - 1
src/views/unacceptedProduct/components/create.vue

@@ -1,5 +1,5 @@
 <template>
-  <ele-modal :visible.sync="visible" :title="title" width="80vw" append-to-body>
+  <ele-modal :visible.sync="visible" :title="title" width="80vw" append-to-body @close="cancel"> 
     <el-form
       ref="form"
       :model="form"