695593266@qq.com 8 hónapja
szülő
commit
5f5d7ce8a9

+ 11 - 0
src/api/produce/index.js

@@ -208,3 +208,14 @@ export async function queryProductLicense(data) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+//获取任务报工的已报工数和损耗数
+export async function getTaskReport(data) {
+  const res = await request.get(`/aps/assign/allReportQt`, {
+    params: data
+  });
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 11 - 1
src/views/pick/pickApply/components/produceOrder.vue

@@ -28,6 +28,10 @@
         <el-tag> {{ row.singleReport == 1 ? '单个报工' : '批量报工' }}</el-tag>
       </template>
 
+      <template v-slot:pickStatus="{ row }">
+        <el-tag> {{ row.pickStatus == 1 ? '已领料' : '未领料' }}</el-tag>
+      </template>
+
       <template v-slot:formingNum="{ row }">
         <span> {{ row.formingNum }} {{ row.unit }} </span>
       </template>
@@ -111,7 +115,13 @@
             align: 'center',
             showOverflowTooltip: true
           },
-
+          {
+            prop: 'pickStatus',
+            slot: 'pickStatus',
+            label: '领料状态',
+            align: 'center',
+            showOverflowTooltip: true
+          },
           {
             prop: 'productCode',
             label: '产品编码',

+ 41 - 6
src/views/produce/components/feeding/components/workOrderBom.vue

@@ -83,10 +83,6 @@
           </div>
         </div>
 
-        <!-- <span v-if="row.outsourceStatus == 1">未委外</span>
-            <span v-if="row.outsourceStatus == 2">委外中</span>
-            <span v-if="row.outsourceStatus == 3">完成委外-未质检</span> -->
-
         <div class="item rx-sc" v-if="isOrder">
           <div class="rx ww33" v-if="!isDetails">
             <div class="lable rx-cc">最新工单状态</div>
@@ -115,6 +111,29 @@
           </div>
         </div>
 
+        <div class="item rx-sc" v-if="isOrder">
+          <div class="rx ww50">
+            <div class="lable rx-cc">任务报工</div>
+            <div class="content">
+              报工数:{{ taskReoportNum || 0 }}{{ item.unit }},损耗数:{{
+                taskLossNum || 0
+              }}{{ item.unit }}
+            </div>
+          </div>
+
+          <div class="rx ww50">
+            <div class="lable rx-cc">请托状态</div>
+            <div v-if="item.entrustStatus">
+              <div class="content" v-if="item.entrustStatus == 1">未请托</div>
+              <div class="content" v-if="item.entrustStatus == 2">请托中</div>
+              <div class="content" v-if="item.entrustStatus == 3">完成请托</div>
+            </div>
+            <div v-else>
+              <div class="content">未请托</div>
+            </div>
+          </div>
+        </div>
+
         <div class="item rx-sc" v-if="isReportWork">
           <div class="rx ww100">
             <div class="lable rx-cc">生产要求</div>
@@ -132,6 +151,7 @@
 </template>
 
 <script>
+  import { getTaskReport } from '@/api/produce';
   export default {
     name: 'workOrderBom',
     props: {
@@ -156,10 +176,16 @@
     computed: {},
 
     data() {
-      return {};
+      return {
+        taskReoportNum: '',
+        taskLossNum: ''
+      };
     },
 
-    mounted() {},
+    mounted() {
+      console.log(this.item, '返回的数据777777');
+      this.getTaskReportNum();
+    },
 
     methods: {
       sumStatus(row) {
@@ -169,6 +195,15 @@
         if (row.feedStatus === 1) {
           return '已投料';
         }
+      },
+
+      async getTaskReportNum() {
+        await getTaskReport({
+          workOrderId: this.item.workOrderId,
+          taskId: this.item.currentTaskDiagram.sourceTaskId
+        }).then((res) => {
+          console.log(res, '任务报工信息');
+        });
       }
     }
   };

+ 0 - 1
src/views/produce/components/new_produceOrder.vue

@@ -424,7 +424,6 @@
         if (row.feedStatus === 1) {
           return '已投料';
         }
-        // {{  row.reportStatus }}  {{  row.feedStatus }}
       },
 
       tableRowClassName({ row, rowIndex }) {

+ 152 - 0
src/views/produce/components/outsourcing/batchChooseGoods.vue

@@ -0,0 +1,152 @@
+<template>
+  <el-dialog
+    title="选择物品清单"
+    :visible.sync="visible"
+    v-if="visible"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    width="75%"
+  >
+    <ele-pro-table
+      ref="table"
+      :columns="columns"
+      :datasource="allList"
+      :selection.sync="selection"
+      row-key="id"
+      height="calc(100vh - 550px)"
+      :cache-key="tableKey"
+      :row-click-checked="true"
+      :row-click-checked-intelligent="false"
+      @update:selection="handleSelectionChange"
+    >
+      <!-- <template v-slot:engrave="{ row, $index }">
+        <el-input size="mini" v-model="row.engrave" @click.native.stop />
+      </template> -->
+    </ele-pro-table>
+
+    <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>
+  export default {
+    data() {
+      return {
+        visible: false,
+        allSelection: [],
+        allList: [],
+        selection: [],
+        tableKey: 'batchChooseGoodsKey',
+        itemData: {},
+        index: '',
+        clientEnvironmentId: this.$store.state.user.info.clientEnvironmentId
+      };
+    },
+
+    computed: {
+      columns() {
+        return [
+          {
+            width: 45,
+            type: 'selection',
+            columnKey: 'selection',
+            align: 'center',
+            reserveSelection: true
+          },
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 50,
+            align: 'center'
+          },
+          {
+            prop: 'categoryCode',
+            label: '编码',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'name',
+            label: '名称',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'extInfo.engrave',
+            label: '刻码',
+            slot: 'extInfo.engrave',
+            showOverflowTooltip: true,
+            show: this.itemData.singleReport == 1 ? true : false
+          },
+          {
+            prop: 'modelType',
+            label: '型号',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'specification',
+            label: '规格',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'brandNum',
+            label: '牌号',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'feedQuantity',
+            label: '数量',
+            showOverflowTooltip: true
+          }
+        ];
+      }
+    },
+
+    methods: {
+      handleClose() {
+        this.visible = false;
+      },
+
+      open(item, allList, list, index) {
+        this.visible = true;
+        this.allSelection = list || [];
+        this.allList = allList.map((item) => item);
+        this.index = index;
+
+        console.log(this.allList, 'this.allListthis.allList');
+        this.itemData = item;
+        this.$nextTick(() => {
+          this.allSelection.forEach((item) => {
+            this.$refs.table.toggleRowSelection(item, true);
+          });
+        });
+      },
+
+      handleSelectionChange(list) {
+        this.allSelection = list;
+      },
+
+      selected() {
+        if (this.allSelection.length == 0) {
+          return this.$message.warning('请至少选择一条数据');
+        }
+
+        this.$emit('chooseData', this.allSelection, this.index);
+        this.handleClose();
+      }
+    }
+  };
+</script>
+
+<style scoped>
+  .btns {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-end;
+    padding: 10px 0;
+  }
+</style>

+ 17 - 3
src/views/produce/components/outsourcing/index.vue

@@ -96,7 +96,7 @@
           </div>
         </el-form-item>
 
-        <!-- <el-form-item label="到货方式:" prop="deliveryMethod">
+        <el-form-item label="交付类型:" prop="deliveryMethod">
           <el-select
             v-model="attributeData.deliveryMethod"
             placeholder="请选择"
@@ -110,7 +110,17 @@
             >
             </el-option>
           </el-select>
-        </el-form-item> -->
+
+          <el-link
+            type="primary"
+            :underline="false"
+            @click="setBatchTime"
+            v-if="attributeData.deliveryMethod == 2"
+            style="margin-left: 10px"
+          >
+            设置分批时间
+          </el-link>
+        </el-form-item>
 
         <el-form-item label="委外单位:">
           <el-select
@@ -371,7 +381,7 @@
           factoriesName: '',
           taskDataList: [],
           priority: '',
-          // deliveryMethod: 1,
+          deliveryMethod: 1,
           timeList: []
         },
         isInWarehouse: true,
@@ -765,6 +775,10 @@
         console.log(this.gysList, '供应商数据');
       },
 
+      setBatchTime() {
+        this.$refs.timeDialogRef.open(this.attributeData, null, false);
+      },
+
       // handleClick(tab, event) {
       //   this.activeName = tab._props.name;
       //   if (this.activeName == '1') {

+ 1384 - 0
src/views/produce/components/outsourcing/new_outsourceList.vue

@@ -0,0 +1,1384 @@
+<template>
+  <!-- 委外下一步 -->
+  <div class="card">
+    <div class="c_header_title">
+      <div class="c_title">委外记录</div>
+    </div>
+
+    <div class="card_box">
+      <el-form
+        label-width="100px"
+        :rules="rules"
+        ref="form"
+        :model="attributeData"
+      >
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="委外名称:" prop="name">
+              <el-input
+                v-model="attributeData.name"
+                class="full"
+                :disabled="isInfo"
+              />
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="委外类型:" prop="type">
+              <el-select
+                v-model="attributeData.type"
+                class="full"
+                :disabled="isInfo"
+              >
+                <el-option
+                  v-for="item in typeList"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="委外工序:" prop="taskIdes">
+              <el-select
+                v-model="attributeData.taskIdes"
+                @change="changeTaskId"
+                multiple
+                class="full"
+                :disabled="isInfo"
+              >
+                <el-option
+                  v-for="item in newStepsList"
+                  :key="item.taskId"
+                  :label="item.taskTypeName"
+                  :value="item.taskId"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="委外场景:" prop="sceneText">
+              <el-input
+                v-model="attributeData.sceneText"
+                disabled
+                class="full"
+              />
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="直接入库:" prop="warehouseId">
+              <el-select
+                v-if="attributeData.clientEnvironmentId == 2 || isInWarehouse"
+                v-model="attributeData.warehouseId"
+                placeholder="请选择"
+                class="full"
+                :disabled="isInfo"
+              >
+                <el-option
+                  v-for="item in warehouseList"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id"
+                />
+              </el-select>
+              <span v-else style="font-size: 15px">是</span>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="委外单位:" prop="supplierId">
+              <el-select
+                v-model="attributeData.supplierId"
+                placeholder="请选择"
+                filterable
+                class="full"
+                :disabled="isInfo"
+              >
+                <el-option
+                  v-for="item in gysList"
+                  :key="item.id"
+                  :value="item.id"
+                  :label="item.name"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12" v-if="isInfo">
+            <el-form-item label="委外数量:" prop="formedNumLast">
+              <el-input
+                placeholder="请输入委外数量"
+                type="number"
+                v-model="attributeData.formedNumLast"
+                class="full"
+                disabled
+              ></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12" v-if="isInfo">
+            <el-form-item label="交付日期:" prop="requireDeliveryTime">
+              <el-date-picker
+                v-model="attributeData.requireDeliveryTime"
+                class="full"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                type="date"
+                placeholder="选择日期"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12" v-if="isInfo">
+            <el-form-item label="交付类型:" prop="deliveryMethod">
+              <el-select
+                v-model="attributeData.deliveryMethod"
+                placeholder="请选择"
+              >
+                <el-option
+                  v-for="item in deliveryMethodTypeList"
+                  :key="item.value"
+                  :label="item.name"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
+
+              <el-link
+                type="primary"
+                :underline="false"
+                @click="setBatchTime"
+                v-if="attributeData.deliveryMethod == 2"
+                style="margin-left: 10px"
+              >
+                设置分批时间
+              </el-link>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+
+      <div class="btn-box" v-if="!isInfo">
+        <el-button @click="cancel">取消</el-button>
+        <el-button type="primary" @click="save"> 确认 </el-button>
+      </div>
+    </div>
+
+    <!-- <el-descriptions> -->
+    <!-- <el-descriptions-item label="委外名称">{{
+          outsourceData.name
+        }}</el-descriptions-item>
+        <el-descriptions-item label="委外类型">{{
+          outsourceData.type == 4 ? '带料委外' : '不带料委外'
+        }}</el-descriptions-item>
+
+        <el-descriptions-item label="委外数量">{{
+          outsourceData.formedNumLast
+        }}</el-descriptions-item> -->
+
+    <!-- <el-descriptions-item label="直接入库">{{ outObj.isInWarehouse == 1 ? '是' : '否' }}</el-descriptions-item> -->
+    <!-- <el-descriptions-item label="直接入库">{{ '是' }}</el-descriptions-item> -->
+
+    <!-- <el-descriptions-item v-if="outsourceData.deliveryMethod == 2">
+          <el-button type="primary" size="mini" @click="batchDeliveryTime"
+            >设置分批到货时间</el-button
+          >
+        </el-descriptions-item> -->
+    <!-- </el-descriptions> -->
+
+    <el-tabs v-model="activeName">
+      <el-tab-pane label="物品清单" name="0">
+        <div class="materialList">
+          <div class="u-reset">
+            <el-button
+              type="primary"
+              size="small"
+              class="u-reset-button"
+              @click="openPicking(2, 'goods')"
+              v-if="pickOutInList.length == 0 && isInfo"
+            >
+              添加
+            </el-button>
+          </div>
+
+          <el-table
+            ref="pickOutRef"
+            class="table_content"
+            :max-height="600"
+            :data="pickOutInList"
+            tooltip-effect="dark"
+            style="width: 100%; margin-top: 10px"
+            stripe
+            border
+            @select="handleRowSelect"
+            @select-all="handleSelectAll"
+            @selection-change="selectionPickOut"
+          >
+            <el-table-column align="center" type="selection" width="55">
+            </el-table-column>
+            <el-table-column label="序号" type="index" width="55">
+              <template slot-scope="{ row, $index }">
+                {{ $index + 1 }}
+              </template>
+            </el-table-column>
+
+            <el-table-column
+              label="编码"
+              type="code"
+              minWidth="110"
+              show-overflow-tooltip
+            >
+              <template slot-scope="{ row, $index }">
+                {{ row.categoryCode }}
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="名称"
+              type="name"
+              minWidth="110"
+              show-overflow-tooltip
+            >
+              <template slot-scope="{ row, $index }">
+                {{ row.name }}
+                <!-- ({{
+							row.rootCategoryLevelId == 2
+							? '在制品'
+							: row.rootCategoryLevelId == 23
+							? '半成品'
+							: row.rootCategoryLevelId == 9
+							? '产品'
+							: item.rootCategoryLevelId == 28
+							? '废品'
+							: ''
+						}}) -->
+              </template>
+            </el-table-column>
+
+            <el-table-column
+              label="型号"
+              type="modelType"
+              show-overflow-tooltip
+            >
+              <template slot-scope="{ row, $index }">
+                {{ row.modelType }}
+              </template>
+            </el-table-column>
+
+            <el-table-column
+              label="规格"
+              type="specification"
+              show-overflow-tooltip
+            >
+              <template slot-scope="{ row, $index }">
+                {{ row.specification }}
+              </template>
+            </el-table-column>
+
+            <el-table-column label="牌号" type="brandNum" show-overflow-tooltip>
+              <template slot-scope="{ row, $index }">
+                {{ row.brandNum }}
+              </template>
+            </el-table-column>
+
+            <el-table-column
+              label="数量"
+              type="feedQuantity"
+              show-overflow-tooltip
+            >
+              <template slot-scope="{ row, $index }">
+                <el-input
+                  v-model="row.feedQuantity"
+                  v-if="row.isSelection == '1'"
+                  @input="inputNum(row, $index)"
+                ></el-input>
+                <span v-else> {{ row.feedQuantity }}</span>
+              </template>
+              <!-- <template slot-scope="{ row, $index }" v-else>
+                {{ row.feedQuantity }}
+              </template> -->
+            </el-table-column>
+
+            <el-table-column
+              label="重量"
+              type="weightUnit"
+              width="120"
+              show-overflow-tooltip
+            >
+              <template slot-scope="{ row, $index }">
+                {{ row.newWeight || 0 }} {{ row.weightUnit }}
+              </template>
+            </el-table-column>
+            <el-table-column label="刻码" type="engrave" show-overflow-tooltip>
+              <template slot-scope="{ row, $index }">
+                {{ row.extInfo.engrave }}
+              </template>
+            </el-table-column>
+
+            <el-table-column
+              label="物料代号"
+              type="materielCode"
+              show-overflow-tooltip
+            >
+              <template slot-scope="{ row, $index }">
+                {{ row.extInfo.materielCode }}
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="客户代号"
+              type="clientCode"
+              show-overflow-tooltip
+            >
+              <template slot-scope="{ row, $index }">
+                {{ row.extInfo.clientCode }}
+              </template>
+            </el-table-column>
+
+            <el-table-column label="操作" show-overflow-tooltip fixed="right">
+              <template slot-scope="{ row, $index }">
+                <el-button type="text" @click="deleteData(row, $index)"
+                  >删除</el-button
+                >
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="带料清单" name="1">
+        <div class="materialList">
+          <div class="u-reset">
+            <el-button
+              type="primary"
+              size="small"
+              class="u-reset-button"
+              @click="openPicking(2, 'belting')"
+            >
+              添加
+            </el-button>
+          </div>
+
+          <div v-for="(item, index) in bomMaterialList" :key="index">
+            <label class="listBox rx-bs">
+              <div class="listBox-con">
+                <div class="listBox-bottom rx">
+                  <div class="items"> <span>序号</span>{{ index + 1 }} </div>
+                  <div class="items" :title="item.name">
+                    <span>名称</span>{{ item.name }}
+                  </div>
+
+                  <div class="items" :title="item.code">
+                    <span>编码</span>{{ item.code }}
+                  </div>
+
+                  <div
+                    v-for="(itm, index) in tableH(item.rootCategoryLevelId)"
+                    :key="index"
+                    class="items"
+                    v-if="!itm.formatter"
+                  >
+                    <span>{{ itm.label }}</span
+                    >{{ item[itm.prop] }}
+                  </div>
+
+                  <div
+                    class="items"
+                    v-if="item.isDemandQuantity && clientEnvironmentId != 2"
+                    style="width: 15%"
+                  >
+                    <span>数量</span
+                    >{{
+                      checkListLen == 0
+                        ? item.demandQuantity
+                        : item.count * (checkListLen || 1)
+                    }}
+                    {{ item.unit }}
+                  </div>
+                  <div
+                    class="items content_num"
+                    v-if="!item.isDemandQuantity && clientEnvironmentId != 2"
+                    style="width: 15%"
+                  >
+                    <span>数量</span>
+                    <input
+                      style="width: 90% !important"
+                      v-model="item.demandQuantity"
+                    />
+                    {{ item.measuringUnit }}
+                  </div>
+
+                  <div
+                    class="items"
+                    v-if="item.isDemandQuantity && clientEnvironmentId == 2"
+                    style="width: 15%"
+                  >
+                    <span>数量</span
+                    >{{ item.count * (outObj.formedNumLast || 1) }}
+                  </div>
+                  <div
+                    class="items content_num"
+                    v-if="!item.isDemandQuantity && clientEnvironmentId == 2"
+                    style="width: 15%"
+                  >
+                    <span>数量</span>
+                    <input
+                      style="width: 90% !important"
+                      v-model="item.demandQuantity"
+                    />
+                    {{ item.measuringUnit }}
+                  </div>
+
+                  <div>
+                    <el-button type="text" @click="convertList(item, index)"
+                      >转物品清单</el-button
+                    >
+
+                    <el-button
+                      type="text"
+                      style="color: red"
+                      @click="deleteBomMaterial(item, index)"
+                      >删除</el-button
+                    >
+                  </div>
+                </div>
+              </div>
+            </label>
+          </div>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="产出清单" name="2">
+        <div class="materialList">
+          <div class="u-reset">
+            <!-- <el-button
+              type="primary"
+              size="small"
+              class="u-reset-button"
+              @click="openPicking(3, 'output')"
+            >
+              添加
+            </el-button> -->
+          </div>
+          <div v-for="(item, index) in standardOutputList" :key="index">
+            <label class="listBox rx-bs">
+              <div class="listBox-con">
+                <div class="listBox-bottom rx">
+                  <div class="items" style="width: 15%">
+                    <span>序号</span>{{ index + 1 }}
+                  </div>
+                  <div class="items"> <span>名称</span>{{ item.name }} </div>
+
+                  <div class="items"> <span>编码</span>{{ item.code }} </div>
+
+                  <div
+                    v-for="(itm, index) in tableH(item.rootCategoryLevelId)"
+                    :key="index"
+                    class="items"
+                    v-if="!itm.formatter"
+                  >
+                    <span>{{ itm.label }}</span
+                    >{{ item[itm.prop] }}
+                  </div>
+
+                  <div class="items">
+                    <span>数量</span>
+                    <input
+                      style="width: 30% !important"
+                      v-model="item.demandQuantity"
+                    />
+                  </div>
+
+                  <div
+                    class="items"
+                    v-if="item.isSelection && item.isSelection == '1'"
+                  >
+                    <span>产出工序</span>
+                    <el-select v-model="item.taskId" placeholder="请选择">
+                      <el-option
+                        v-for="item in outObj.taskDataList"
+                        :key="item.taskId"
+                        :label="item.taskTypeName"
+                        :value="item.taskId"
+                      >
+                      </el-option>
+                    </el-select>
+                  </div>
+
+                  <div>
+                    <el-button
+                      type="text"
+                      @click="deleteOutput(index)"
+                      style="color: red"
+                      >删除</el-button
+                    >
+                  </div>
+                </div>
+              </div>
+            </label>
+          </div>
+        </div>
+      </el-tab-pane>
+    </el-tabs>
+
+    <div class="operate_box" v-if="isInfo">
+      <el-button
+        size="small"
+        class="u-reset-button"
+        @click="close"
+        style="margin-left: 10px"
+      >
+        取消
+      </el-button>
+      <el-button
+        type="primary"
+        size="small"
+        class="u-reset-button"
+        @click="handOK(0)"
+      >
+        确认
+      </el-button>
+
+      <el-button
+        type="primary"
+        size="small"
+        class="u-reset-button"
+        @click="handOK(1)"
+      >
+        提交
+      </el-button>
+    </div>
+
+    <pickingList
+      ref="pickingListRef"
+      isType="weiwai"
+      @allSelection="allSelection"
+    ></pickingList>
+
+    <timeDialog ref="timeDialogRef" @chooseTime="chooseTime"></timeDialog>
+  </div>
+</template>
+
+<script>
+  import { applyoutsourceSave } from '@/api/produce/index.js';
+  import {
+    getWarehouseList,
+    producerouting,
+    checkOutsourceMaterial
+  } from '@/api/produce/index.js';
+  import { contactList } from '@/api/produce/bom.js';
+  import { tableHeader } from '@/utils/dict/common.js';
+
+  import pickingList from './pickingList.vue';
+  import timeDialog from './timeDialog.vue';
+  export default {
+    components: { pickingList, timeDialog },
+    data() {
+      return {
+        checkListLen: 0,
+        checkedAll: true,
+        checkList: [],
+        mode: 'center',
+        show: false,
+        topHight: 20 || 20,
+        activeName: '0',
+        outObj: {
+          name: '111',
+          type: 4,
+          isInWarehouse: 1
+        },
+        isInWarehouse: true,
+
+        tabList: [
+          {
+            name: '物品清单'
+          },
+          {
+            name: '带料清单'
+          },
+          {
+            name: '产出清单'
+          }
+        ],
+
+        actTab: '物品清单',
+        datapickOutInList: [],
+        bomMaterialList: [],
+        pickOutInList: [],
+        materialList: [],
+        standardOutputList: [],
+
+        isFirstTask: null,
+        isLoading: null,
+
+        // clientEnvironmentId: uni.getStorageSync("userInfo") && uni.getStorageSync("userInfo")
+        // 	.clientEnvironmentId, // *1 主环境-601环境   2 soll-索尔环境    3 tg-碳谷环境
+
+        seletedAll: false, //全选状态
+
+        warehouseList: [],
+        pickOutInListSelect: [],
+        selectionIds: [],
+        newStepsList: [],
+        gysList: [],
+        outsourceData: {},
+        attributeData: {
+          name: '',
+          type: '', //类型
+          sceneText: '', //场景
+          formedNumLast: '', //数据
+          taskIds: '', //委外到
+          isFirstTask: '',
+          clientEnvironmentId: 1, //直接入库
+          requireDeliveryTime: '', //计划交期
+          warehouseId: '', //仓库id
+          produceRoutingId: '', //工艺路线id
+          supplierId: '', //供应商id
+          supplierName: '',
+          taskIdes: [],
+          factoriesId: '',
+          factoriesName: '',
+          taskDataList: [],
+          priority: '',
+          deliveryMethod: 1
+        },
+        timeList: [],
+        rules: {
+          name: [
+            { required: true, message: '请输入委外名称', trigger: 'blur' }
+          ],
+          type: [
+            { required: true, message: '请选择委外类型', trigger: 'blur' }
+          ],
+          formedNumLast: [
+            { required: true, message: '请输入委外数量', trigger: 'blur' }
+          ],
+          taskIdes: [
+            { required: true, message: '请选择委外工序', trigger: 'blur' }
+          ],
+          sceneText: [
+            { required: true, message: '请选择委外场景', trigger: 'blur' }
+          ],
+          warehouseId: [{ required: true, message: '请选择', trigger: 'blur' }],
+          requireDeliveryTime: [
+            { required: true, message: '请选择计划交期时间', trigger: 'blur' }
+          ]
+        },
+        typeList: [
+          {
+            id: 4,
+            name: '带料生产委外'
+          },
+          {
+            id: 5,
+            name: '不带料生产委外'
+          }
+        ],
+        newStepsList: [],
+        produceList: [],
+        deliveryMethodTypeList: [
+          {
+            name: '一次性到货',
+            value: 1
+          },
+          {
+            name: '分批到货',
+            value: 2
+          }
+        ],
+        isInfo: false
+      };
+    },
+
+    created() {
+      console.log(this.workData, '89586');
+      this.outsourceData = this.deepCopy(this.outObj);
+      // this.getWarehouseFn();
+      this.getContactList();
+      if (this.chooseType == '1') {
+        this.attributeData.name = this.taskObj.name
+          ? this.taskObj.name + '委外'
+          : this.taskObj.taskTypeName + '委外';
+      }
+    },
+
+    computed: {
+      clientEnvironmentId() {
+        return this.$store.state.user.info.clientEnvironmentId;
+      }
+    },
+
+    props: {
+      taskObj: {
+        type: Object,
+        default: ''
+      },
+      chooseType: {
+        type: String,
+        default: '1'
+      },
+      outsourceFormVal: {
+        type: Object,
+        default: () => {}
+      },
+      workData: {
+        type: Object,
+        default: () => {}
+      }
+    },
+    watch: {
+      outsourceFormVal: {
+        handler(val) {
+          Object.assign(this.attributeData, val);
+
+          if (this.clientEnvironmentId == 3) {
+            if (
+              this.attributeData.newStepsList &&
+              this.attributeData.newStepsList.length != 0
+            ) {
+              this.newStepsList = this.attributeData.newStepsList.filter(
+                (item) => item.type != 6
+              );
+            }
+          } else {
+            this.newStepsList = this.attributeData.newStepsList;
+          }
+
+          this.getWarehouseFn();
+          this.produceFn();
+        },
+        deep: true,
+        immediate: true
+      }
+    },
+
+    methods: {
+      allSelection(e, item, type) {
+        if (e == 2) {
+          if (type == 'goods') {
+            item.map((it) => {
+              it.isSelection = '1';
+              it.categoryCode = it.code;
+              it.feedQuantity = 1;
+              it.categoryId = it.id;
+              it.newWeight = it.weight;
+              it.checked = true;
+              this.pickOutInList.push(this.deepCopy(it));
+            });
+            this.changNumber(this.pickOutInList);
+            this.selectionData();
+          } else {
+            if (item.length) {
+              item.map((v) => {
+                this.bomMaterialList.push(v);
+              });
+            }
+          }
+        } else if (e == 3) {
+          if (item.length) {
+            item.map((it) => {
+              it.isSelection = '1';
+              it.categoryCode = it.code;
+              it.feedQuantity = 1;
+              it.categoryId = it.id;
+              it.newWeight = it.weight;
+              it.rootCategoryLevelId = it.categoryLevelPathIdParent;
+              it.taskId = '';
+              it.taskName = '';
+              this.standardOutputList.push(this.deepCopy(it));
+            });
+          }
+        }
+      },
+
+      produceFn() {
+        let param = {
+          pageNum: 1,
+          size: -1,
+          routeType: 2
+        };
+        producerouting(param).then((res) => {
+          this.produceList = res.list;
+        });
+      },
+
+      deepCopy(obj, hash = new WeakMap()) {
+        if (obj === null) return null;
+        if (obj instanceof Date) return new Date(obj);
+        if (obj instanceof RegExp) return new RegExp(obj);
+        if (typeof obj !== 'object' && typeof obj !== 'function') return obj;
+        if (hash.has(obj)) return hash.get(obj);
+
+        const result = Array.isArray(obj) ? [] : {};
+        hash.set(obj, result);
+
+        return Object.keys(obj).reduce((acc, key) => {
+          acc[key] = this.deepCopy(obj[key], hash);
+          return acc;
+        }, result);
+      },
+
+      openPicking(id, type) {
+        this.$refs.pickingListRef.open(id, type);
+      },
+
+      outsourceMaterialFn(res) {
+        let _arr = [];
+        _arr = [...res.pickOutInList, ...res.materialList];
+
+        this.pickOutInList = _arr.reduce((acc, item) => {
+          const existingItem = acc.find((existing) => existing.id === item.id);
+          if (!existingItem) {
+            item.isSelection = '2';
+            acc.push(item);
+          }
+          return acc;
+        }, []);
+
+        this.bomMaterialList = res.bomMaterialList.map((m) => {
+          return {
+            ...m,
+            isDemandQuantity: true
+          };
+        });
+
+        this.pickOutInList.map((v) => {
+          v.checked = true;
+        });
+
+        this.checkListLen = this.pickOutInList.length;
+
+        this.standardOutputList = res.standardOutputList;
+
+        this.changNumber(this.pickOutInList);
+
+        // let param = {
+        // 	taskId: this.outObj.taskId,
+        // 	taskIds: this.outObj.taskIds,
+        // 	workOrderId: this.outObj.workOrderId
+
+        // }
+        // checkOutsourceMaterial(param).then(res => {
+
+        // 	let _arr = []
+        // 	_arr = [...res.pickOutInList, ...res.materialList]
+        // 	this.pickOutInList = _arr.reduce((acc, item) => {
+        // 		const existingItem = acc.find(existing => existing.id === item.id);
+        // 		if (!existingItem) {
+        // 			acc.push(item);
+        // 		}
+        // 		return acc;
+        // 	}, []);
+
+        // 	this.bomMaterialList = res.bomMaterialList.map((m) => {
+        // 		return {
+        // 			...m,
+        // 			isDemandQuantity: true
+
+        // 		}
+        // 	})
+        // 	this.standardOutputList = res.standardOutputList
+        // 	this.$forceUpdate()
+        // })
+        this.$nextTick(() => {
+          this.$refs.pickOutRef.toggleAllSelection();
+        });
+      },
+
+      changNumber(list) {
+        let total = 0;
+        if (list && list.length != 0) {
+          total = list.reduce(
+            (acc, pro) =>
+              acc + (pro.checked ? Number(pro.feedQuantity || 0) : 0),
+            0
+          );
+        }
+
+        this.attributeData.formedNumLast = total;
+      },
+
+      handleRowSelect(selection, row) {
+        this.changNumber(selection);
+      },
+
+      handleSelectAll(selection) {
+        this.changNumber(selection);
+      },
+
+      inputNum(item, index) {
+        if (item.feedQuantity) {
+          const totalWeight = Number(item.feedQuantity) * Number(item.weight);
+          this.$set(this.pickOutInList[index], 'newWeight', totalWeight);
+          this.$forceUpdate();
+        } else {
+          this.$set(this.pickOutInList[index], 'newWeight', item.weight);
+          this.$forceUpdate();
+        }
+
+        this.changNumber(this.pickOutInList);
+      },
+
+      deleteData(item, index) {
+        this.pickOutInList.splice(index, 1);
+      },
+
+      handTab(item) {
+        this.actTab = item.name;
+      },
+      //关闭弹窗
+      close() {
+        this.$emit('closeForm');
+      },
+
+      handleEvent({ message }) {
+        if (message.pid == 3) {
+          this.standardOutputList = message.memoList;
+        } else {
+          if (message.pid == 2) {
+            this.bomMaterialList = message.memoList;
+          }
+        }
+      },
+
+      tableH(type) {
+        return tableHeader(type);
+      },
+      //勾选
+      selectVal(e, val, index) {
+        this.$forceUpdate();
+        this.pickOutInList[index] = val;
+        this.$set(this, 'pickOutInList', this.pickOutInList);
+
+        this.checkListLen = this.pickOutInList.filter(
+          (f) => f.checked == true
+        ).length;
+      },
+
+      _seletedAll() {
+        console.log(this.seletedAll, this.pickOutInList, 'this.seletedAll');
+        // this.seletedAll true 是全选
+
+        if (!this.seletedAll) {
+          // 非全选
+          this.seletedAll = true;
+          this.checkListLen = 0;
+
+          this.pickOutInList.map((item) => {
+            item.checked = false;
+          });
+
+          this.$set(this, 'pickOutInList', this.pickOutInList);
+        } else {
+          this.seletedAll = false;
+
+          this.pickOutInList.map((item) => {
+            item.checked = true;
+          });
+          this.$set(this, 'pickOutInList', this.pickOutInList);
+        }
+        this.checkListLen = this.pickOutInList.filter(
+          (f) => f.checked == true
+        ).length;
+      },
+      selectionPickOut(val) {
+        this.pickOutInListSelect = val;
+        this.changNumber(val);
+      },
+
+      deleteOutput(index) {
+        this.standardOutputList.splice(index, 1);
+      },
+
+      deleteBomMaterial(item, index) {
+        this.bomMaterialList.splice(index, 1);
+      },
+
+      convertList(item, index) {
+        if (item.demandQuantity) {
+          item.categoryCode = item.code;
+          item.feedQuantity = item.demandQuantity;
+          item.isSelection = '1';
+          item.categoryId = item.id;
+          item.newWeight = item.weight;
+          item.checked = true;
+          this.pickOutInList.push(this.deepCopy(item));
+          this.selectionData();
+          this.changNumber(this.pickOutInList);
+          this.bomMaterialList.splice(index, 1);
+          this.$forceUpdate();
+        } else {
+          return this.$message({
+            message: '请输入转换数量',
+            type: 'warning'
+          });
+        }
+      },
+
+      selectionData() {
+        this.$nextTick(() => {
+          this.$refs.pickOutRef.toggleAllSelection();
+        });
+      },
+
+      changeTaskId() {
+        if (this.attributeData.taskIdes.length != 0) {
+          if (this.attributeData.taskIdes.length == 1) {
+            this.attributeData.sceneText = '单工序';
+            this.attributeData.outsourceScene = 2;
+          } else {
+            this.attributeData.sceneText = '多工序';
+            this.attributeData.outsourceScene = 3;
+          }
+        } else {
+          this.attributeData.sceneText = '';
+          this.attributeData.outsourceScene = '';
+        }
+      },
+
+      scrolltolower() {},
+
+      addPicking(id) {
+        const storageKey = Date.now() + '';
+        let arr = null;
+        if (id == 3) {
+          arr = [
+            {
+              standardOutputList: this.standardOutputList
+            }
+          ];
+        } else {
+          arr = [
+            {
+              bomMaterialList: this.bomMaterialList
+            }
+          ];
+        }
+      },
+
+      async getWarehouseFn() {
+        await getWarehouseList().then((res) => {
+          this.warehouseList = res.data.filter(
+            (item) => item.factoryId == this.$store.state.user.info.factoryId
+          );
+        });
+      },
+
+      async getContactList() {
+        let param = {
+          pageNum: 1,
+          type: 2,
+          size: -1,
+          status: 1
+        };
+        await contactList(param).then((res) => {
+          this.gysList = res.list;
+        });
+      },
+
+      setBatchTime() {
+        if (this.pickOutInList.length == 0) {
+          return this.$message.warning('请先添加物料清单!');
+        }
+
+        if (this.attributeData.formedNumLast == 0) {
+          return this.$message.warning('请先勾选需要分批物料清单');
+        }
+
+        const checkedList = this.pickOutInList.filter((item) => item.checked);
+
+        this.$refs.timeDialogRef.open(
+          this.attributeData,
+          null,
+          false,
+          checkedList,
+          this.workData.list[0]
+        );
+        // this.$refs.timeDialogRef.open(this.attributeData, null, false);
+      },
+
+      cancel() {
+        this.$emit('outScucc');
+      },
+
+      async save() {
+        const valid = await this.$refs.form.validate().catch(() => false);
+        if (!valid) return;
+
+        // chooseType = 1 的处理
+        if (this.chooseType == '1') {
+          if (this.attributeData.supplierId) {
+            const obj = this.gysList.find(
+              (item) => item.id === this.attributeData.supplierId
+            );
+            this.attributeData.supplierName = obj ? obj.name : '';
+          }
+
+          // 先清空,避免多次打开叠加
+          this.attributeData.taskDataList = [];
+
+          this.attributeData.taskIdes.forEach((it) => {
+            const match = this.newStepsList.find((i) => i.taskId == it);
+            if (match) this.attributeData.taskDataList.push(match);
+          });
+
+          this.attributeData.taskIds = this.attributeData.taskIdes.join(',');
+        }
+
+        const req = {
+          taskId: this.attributeData.taskId,
+          taskIds: this.attributeData.taskIds,
+          workOrderId: this.attributeData.workOrderId,
+          quantity: this.attributeData.formedNumLast
+        };
+
+        const res = await checkOutsourceMaterial(req);
+
+        // pickOutInList
+        this.outObj = this.deepCopy({ ...res.data, ...this.attributeData });
+
+        if (this.outObj.pickOutInList.length == 0) {
+          this.attributeData.formedNumLast = 0;
+        }
+
+        this.outsourceMaterialFn(this.outObj);
+
+        console.log(this.outObj, 'this.outObjthis.outObj');
+        this.isInfo = true;
+      },
+
+      outsourceMaterialFn(res) {
+        let _arr = [];
+        _arr = [...res.pickOutInList, ...res.materialList];
+
+        this.pickOutInList = _arr.reduce((acc, item) => {
+          const existingItem = acc.find((existing) => existing.id === item.id);
+          if (!existingItem) {
+            item.isSelection = '2';
+            acc.push(item);
+          }
+          return acc;
+        }, []);
+
+        this.bomMaterialList = res.bomMaterialList.map((m) => {
+          return {
+            ...m,
+            isDemandQuantity: true
+          };
+        });
+
+        this.pickOutInList.map((v) => {
+          v.checked = true;
+        });
+
+        this.checkListLen = this.pickOutInList.length;
+
+        this.standardOutputList = res.standardOutputList;
+
+        this.changNumber(this.pickOutInList);
+
+        this.$nextTick(() => {
+          this.$refs.pickOutRef.toggleAllSelection();
+        });
+      },
+
+      chooseTime(current, clonedTimeList, currentIndex) {
+        this.timeList = clonedTimeList;
+      },
+
+      handOK(isRelease) {
+        // isRelease? 0 提交 2提交并发布
+
+        if (!this.attributeData.requireDeliveryTime) {
+          return this.$message.warning('请选择交付日期!');
+        }
+
+        // if (this.checkListLen > 0 && !this.outObj.warehouseId) {
+        //   return this.$message({
+        //     message: '请选择仓库',
+        //     type: 'warning'
+        //   });
+        // }
+
+        // 环境判断
+        let _pickOutInList = [];
+
+        if (this.clientEnvironmentId == 2) {
+          _pickOutInList = this.pickOutInList;
+        } else {
+          // _pickOutInList = this.pickOutInList.filter(f => f.checked == true)
+          _pickOutInList = this.pickOutInListSelect;
+        }
+
+        for (let i = 0; i < _pickOutInList.length; i++) {
+          if (
+            !_pickOutInList[i].feedQuantity &&
+            _pickOutInList[i].isSelection == '1'
+          ) {
+            this.$message.warning('物品数量不能为空');
+            return;
+          }
+        }
+
+        if (this.standardOutputList.length != 0) {
+          for (let item of this.standardOutputList) {
+            if (!item.demandQuantity) {
+              this.$message.warning('产出清单数量不能为空');
+              return;
+            }
+          }
+        }
+
+        this.outObj = this.deepCopy({ ...this.outObj, ...this.attributeData });
+
+        // this.outObj.formedNumLast = this.outsourceData.formedNumLast;
+
+        let param = {
+          ...this.outObj,
+          isRelease: isRelease,
+          bomMaterialList: this.bomMaterialList,
+          pickOutInList: _pickOutInList,
+          materialList: this.materialList,
+          standardOutputList: this.standardOutputList,
+          timeList: this.timeList
+        };
+
+        this.isLoading = this.$loading({
+          lock: true,
+          text: '加载中',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+
+        applyoutsourceSave(param)
+          .then((res) => {
+            this.$emit('outScucc');
+            this.isLoading.close();
+            return this.$message({
+              message: '提交成功',
+              type: 'scuccess'
+            });
+            this.checkListLen = 0;
+          })
+          .catch(() => {
+            this.isLoading.close();
+          });
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .c_header_title {
+    display: flex;
+    align-items: center;
+    margin-bottom: 0;
+    height: 58px;
+    margin-bottom: 10px;
+    box-sizing: border-box;
+    border-bottom: 1px solid var(--border-color-lighter);
+  }
+
+  .operate_box {
+    display: flex;
+    flex-direction: row-reverse;
+    padding: 15px;
+    box-shadow: 0px -2px 15px 0px rgba(0, 0, 0, 0.1);
+    z-index: 9999;
+  }
+
+  .c_title {
+    color: #157a2c;
+    font-size: 16px;
+    font-weight: bold;
+  }
+
+  .materialList {
+    height: 25vh;
+    overflow: auto;
+  }
+
+  .card {
+    width: 100%;
+    padding: 0 20px;
+  }
+
+  .u-reset {
+    width: 100%;
+    padding: 5px;
+    text-align: right;
+  }
+
+  .listBox-con {
+    width: 100%;
+  }
+  .gxList {
+    margin-left: 10px;
+  }
+
+  .listBox-sel {
+    margin: 0 10px;
+  }
+
+  .listBox-top {
+    display: flex;
+    padding: 15px;
+    font-size: 14px;
+    font-weight: bold;
+    border-bottom: 1px solid #ddd;
+  }
+
+  .listBox-bottom {
+    display: flex;
+    width: 100%;
+    flex-wrap: wrap;
+    margin-bottom: 0;
+  }
+
+  .listBox {
+    display: flex;
+    align-items: center;
+    border: 1px solid #ddd;
+    margin-bottom: 20px;
+  }
+
+  .items {
+    font-size: 12px;
+    width: 23%;
+    display: flex;
+    align-items: center;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+
+    // border: 1px solid #ddd;
+    // border-bottom: 1px solid #ddd;
+    // border-right: 0;
+    span {
+      display: block;
+      padding: 10px;
+      margin-right: 5px;
+      color: #157a2c;
+      background-color: #f7f9fa;
+    }
+  }
+
+  ::v-deep .el-input--medium .el-input__inner {
+    height: 26px;
+    line-height: 26px;
+  }
+
+  ::v-deep .el-form-item {
+    margin-bottom: 5px;
+  }
+
+  .full {
+    width: 100%;
+  }
+
+  .btn-box {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-end;
+    margin-bottom: 10px;
+  }
+</style>

+ 19 - 0
src/views/produce/components/outsourcing/pickingList.vue

@@ -621,6 +621,15 @@
 
             resolve();
           }).then(() => {
+            if (this.type == 'goods') {
+              if (this.allSelection.length == 0) {
+                return this.$message.warning('请至少选中一条数据');
+              }
+
+              if (this.allSelection.length > 1) {
+                return this.$message.warning('物料清单只能选中一条数据');
+              }
+            }
             this.$emit('allSelection', this.id, this.allSelection, this.type);
             this.handleClose();
           });
@@ -629,6 +638,16 @@
             (a, b) => a.rootCategoryLevelId - b.rootCategoryLevelId
           );
 
+          if (this.type == 'goods') {
+            if (this.allSelection.length == 0) {
+              return this.$message.warning('请至少选中一条数据');
+            }
+
+            if (this.allSelection.length > 1) {
+              return this.$message.warning('物料清单只能选中一条数据');
+            }
+          }
+
           this.$emit('allSelection', this.id, this.allSelection, this.type);
           this.handleClose();
         }

+ 58 - 8
src/views/produce/components/outsourcing/timeDialog.vue

@@ -7,7 +7,7 @@
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     append-to-body
-    width="35%"
+    width="40%"
   >
     <el-form
       :model="form"
@@ -48,7 +48,27 @@
           </template>
         </el-table-column>
 
-        <el-table-column label="数量" prop="purchaseQuantity">
+        <el-table-column
+          label="数量"
+          prop="purchaseQuantity"
+          v-if="pickOutInList.length > 1 && workOrderData.singleReport == 1"
+        >
+          <template slot-scope="{ row, $index }">
+            <el-form-item
+              :prop="'timeList.' + $index + '.purchaseQuantity'"
+              :rules="tableFormRules.purchaseQuantity"
+            >
+              <el-input
+                v-model="row.purchaseQuantity"
+                placeholder="请选择数据"
+                @click.native="chooseList($index)"
+                readonly
+              ></el-input>
+            </el-form-item>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="数量" prop="purchaseQuantity" v-else>
           <template slot-scope="{ row, $index }">
             <el-form-item
               :prop="'timeList.' + $index + '.purchaseQuantity'"
@@ -102,14 +122,20 @@
       <el-button type="primary" size="small" @click="handleOk">确认</el-button>
       <el-button size="small" @click="handleClose">取消</el-button>
     </div>
+
+    <batchChooseGoods
+      ref="batchChooseGoodsRef"
+      @chooseData="chooseData"
+    ></batchChooseGoods>
   </el-dialog>
 </template>
 
 <script>
   import { getCode } from '@/api/codeManagement';
+  import batchChooseGoods from './batchChooseGoods.vue';
 
   export default {
-    components: {},
+    components: { batchChooseGoods },
 
     data() {
       return {
@@ -122,7 +148,8 @@
             {
               requireDeliveryTime: null,
               purchaseQuantity: null,
-              batchNo: null
+              batchNo: null,
+              pickoutInList: []
             }
           ]
         },
@@ -145,7 +172,9 @@
           }
         },
         currentIndex: '',
-        count: 0
+        count: 0,
+        pickOutInList: [],
+        workOrderData: {}
       };
     },
 
@@ -161,8 +190,9 @@
       }
     },
     methods: {
-      open(row, index, isAll) {
-        console.log(row, index, isAll, 'row,index,isAll');
+      open(row, index, isAll, pickOutInList, workOrderData) {
+        this.workOrderData = workOrderData;
+        this.pickOutInList = pickOutInList.map((item) => item);
         this.isAll = isAll;
         if (row) {
           let row1 = JSON.parse(JSON.stringify(row));
@@ -188,7 +218,8 @@
         this.form.timeList.push({
           requireDeliveryTime: null,
           purchaseQuantity: null,
-          batchNo: await getCode('lot_number_code')
+          batchNo: await getCode('lot_number_code'),
+          pickoutInList: []
         });
       },
 
@@ -196,6 +227,25 @@
         this.form.timeList.splice(index, 1);
       },
 
+      chooseList(index) {
+        this.$refs.batchChooseGoodsRef.open(
+          this.workOrderData,
+          this.pickOutInList,
+          this.form.timeList[index].list,
+          index
+        );
+      },
+
+      chooseData(list, index) {
+        const totalNum = list.reduce((acc, pro) => {
+          const val = Number(pro.feedQuantity) || 0;
+          return (acc * 10000 + val * 10000) / 10000;
+        }, 0);
+
+        this.form.timeList[index].purchaseQuantity = totalNum;
+        this.form.timeList[index].pickoutInList = list;
+      },
+
       handleOk() {
         this.$refs.tableForm.validate((valid) => {
           if (valid) {

+ 23 - 16
src/views/produce/index.vue

@@ -58,7 +58,7 @@
             </div>
           </el-tab-pane>
 
-          <!-- <el-tab-pane label="我的任务" name="second"> -->
+          <el-tab-pane label="我的任务" name="second">
             <!-- <AssetTree @handleNodeClick="handleNodeClickNew" @setRootId="setRootId" id="0" :paramsType="'type'"
               ref="treeList" eqDevice="sb" /> -->
             <!-- <el-tree
@@ -69,7 +69,7 @@
               @node-click="handleNodeClick"
             >
             </el-tree>-->
-          <!-- </el-tab-pane> -->
+          </el-tab-pane>
         </el-tabs>
       </div>
 
@@ -257,11 +257,21 @@
 
                 <!--   -->
                 <outsourceList
-                  :outsourceFormVal="outObj"
+                  :workData="workData"
+                  :taskObj="taskObj"
+                  :outsourceFormVal="outsourceForm"
+                  :chooseType="chooseType"
                   @closeForm="closeForm"
                   @outScucc="outScucc"
                   v-if="isOutsource"
                 ></outsourceList>
+                <!--
+                <outsourceList
+                  :outsourceFormVal="outObj"
+                  @closeForm="closeForm"
+                  @outScucc="outScucc"
+                  v-if="isOutsource"
+                ></outsourceList> -->
 
                 <pleaseEntrust
                   :outsourceFormVal="outObj"
@@ -369,7 +379,8 @@
   import workPlan from './components/workPlan/index.vue';
   import workes from './components/workPlan/components/work.vue';
   import warehousing from './components/warehousing/index.vue';
-  import outsourceList from './components/outsourcing/outsourceList.vue';
+  // import outsourceList from './components/outsourcing/outsourceList.vue';
+  import outsourceList from './components/outsourcing/new_outsourceList.vue';
   import pleaseEntrust from './components/outsourcing/pleaseEntrust.vue';
   import workStep from './components/workStep/index.vue';
   import createError from './components/createError.vue';
@@ -1091,17 +1102,13 @@
       },
 
       outsourcingAdd(type, activeName) {
-        this.getTaskInstanceByIdFn(this.workListIds[0]);
         this.chooseType = activeName;
-        // if (this.chooseType == 1) {
-        this.isStep = true;
-        // } else {
-        //   this.$refs.addPleaseRef.open(
-        //     this.workListIds[0],
-        //     this.workData,
-        //     this.taskObj
-        //   );
-        // }
+        this.getTaskInstanceByIdFn(this.workListIds[0]);
+        if (this.chooseType == '2') {
+          this.isStep = true;
+        } else {
+          this.isOutsource = true;
+        }
       },
 
       refreshPlease() {
@@ -1428,8 +1435,8 @@
     background: #f0f3f3;
   }
 
-  ::v-deep.el-tree-node__content > .el-tree-node__expand-icon {
-    padding-left: 0 !important;
+  ::v-deep .el-tree-node__content > .el-tree-node__expand-icon {
+    padding: 0 !important;
   }
 
   // .menu-container {

+ 3 - 1
src/views/produceOrder/index.vue

@@ -190,7 +190,9 @@
               报工
             </el-link>
             <el-link
-              v-if="row.status == 4 && row.isSplit == 0"
+              v-if="
+                row.status == 4 && row.isSplit == 0 && clientEnvironmentId != 9
+              "
               type="primary"
               :underline="false"
               @click="toUnpack(row)"