huang_an 2 lat temu
rodzic
commit
2b5ba5ecc5

+ 12 - 0
src/api/warehouseManagement/outin.js

@@ -114,5 +114,17 @@ export default {
     if (res.data.code == 0) {
       return res.data.data;
     }
+  },
+  outinApprove: async (params) => {
+    const res = await request.post(`/bpm/outinApprove/submit`, params);
+    if (res.data.code == 0) {
+      return res.data.data;
+    }
+  },
+  update: async (params) => {
+    const res = await request.put(`/wms/outin/update`, params);
+    if (res.data.code == 0) {
+      return res.data;
+    }
   }
 };

+ 37 - 41
src/views/warehouseManagement/stockManagement/add.vue

@@ -881,24 +881,7 @@
                 <el-input
                   v-if="!row.isPack"
                   v-model="row.weight"
-                  @input="
-                    (value) => {
-                      const newValue = value.replace(/[^\d.]/g, ''); // 保留数字和小数点
-                      const decimalCount = (newValue.match(/\./g) || []).length; // 计算小数点的个数
-                      if (decimalCount > 1) {
-                        // 如果小数点个数大于1,移除多余的小数点
-                        const lastIndex = newValue.lastIndexOf('.');
-                        row.weight =
-                          newValue.slice(0, lastIndex) +
-                          newValue.slice(lastIndex + 1);
-                      } else if (decimalCount === 1) {
-                        // 如果小数点个数等于1,允许小数点的输入
-                        row.weight = newValue;
-                      } else {
-                        row.weight = newValue === '' ? 0 : parseFloat(newValue); // 如果输入为空,则设为0
-                      }
-                    }
-                  "
+                  @input="weightInput($event, row)"
                 ></el-input>
                 <span v-else>{{ row.weight }}</span>
               </template>
@@ -1238,14 +1221,27 @@
       this.initData();
     },
     methods: {
+      weightInput(value, row) {
+        const newValue = value.replace(/[^\d.]/g, ''); // 保留数字和小数点
+        const decimalCount = (newValue.match(/\./g) || []).length; // 计算小数点的个数
+        if (decimalCount > 1) {
+          // 如果小数点个数大于1,移除多余的小数点
+          const lastIndex = newValue.lastIndexOf('.');
+          row.weight =
+            newValue.slice(0, lastIndex) + newValue.slice(lastIndex + 1);
+        } else if (decimalCount === 1) {
+          // 如果小数点个数等于1,允许小数点的输入
+          row.weight = newValue;
+        } else {
+          row.weight = newValue === '' ? 0 : parseFloat(newValue); // 如果输入为空,则设为0
+        }
+      },
       handleIsDetail(event) {
         if (event) {
           const list = this.materialCodeReqList;
-          console.log(list);
           let resultArray = [];
           list.forEach((item) => {
             for (let i = 1; i <= Number(item.minPackingCount); i++) {
-              console.log('item', item);
               resultArray.push({
                 onlyCode: item.onlyCode,
                 no: item.onlyCode + i.toString().padStart(4, '0'),
@@ -1274,13 +1270,28 @@
           row.isPack = true;
           const code = row.assetCode;
           const batchNo = row.batchNo;
-          const count = this.materialCodeReqList.reduce(
-            (acc, curr) => acc + curr.weight,
-            0
-          );
+          //做防护,防止weight字符串类型
+          this.materialCodeReqList.forEach((ele) => {
+            ele.weight = Number(ele.weight);
+          });
+          // const count = this.materialCodeReqList.reduce(
+          //   (acc, curr) => acc + curr.weight,
+          //   0
+          // );
+
           this.isWeight = false;
           this.warehousingMaterialList.forEach((item) => {
             if (item.assetCode == code && item.batchNo == batchNo) {
+              let arr = [];
+              for (const key in this.materialCodeReqList) {
+                if (
+                  this.materialCodeReqList[key].assetCode == item.assetCode &&
+                  this.materialCodeReqList[key].batchNo == item.batchNo
+                ) {
+                  arr.push({ ...this.materialCodeReqList[key] });
+                }
+              }
+              const count = arr.reduce((acc, curr) => acc + curr.weight, 0);
               this.$set(item, 'weight', count);
             }
           });
@@ -1367,9 +1378,6 @@
           outInNum: Number(outInNum),
           univalence: Number(univalence == undefined ? 0 : univalence)
         };
-        console.log(PackingCount);
-        console.log(outInNum);
-        console.log(univalence);
         return total.PackingCount * total.outInNum * total.univalence;
       },
       handleRowUnit(row) {
@@ -1542,8 +1550,6 @@
         );
         rows.forEach((row, i) => {
           const index = indexes[i];
-          console.log('rowroworoworworworworworworoworworoworoworw', row);
-          console.log('indexindexindexirnjkdfnjfndjkfn', index);
           const fileds = [
             // `warehousingMaterialList.${index}.cargoSpaceCode`,
             `warehousingMaterialList.${index}.batchNo`,
@@ -1627,7 +1633,6 @@
       },
       // 入库明细生成条码信息
       async createMaterialCode(row) {
-        console.log('====', row);
         // 添加相同物品、批次号重新更新明细 原料编码
         const list = this.warehousingMaterialList.filter(
           (i) =>
@@ -1661,15 +1666,6 @@
               i.onlyCode = res.shift().onlyCode;
             });
           } else {
-            console.log(' item.isUnpack', item.isUnpack);
-            console.log('1', +item.outInNum);
-            console.log('2', item);
-            console.log(
-              '3',
-              item.isUnpack
-                ? item.outInNum * item.minPackingCount
-                : +item.minPackingCount
-            );
             this.$set(
               item,
               'warehouseLedgerDetails',
@@ -1711,7 +1707,6 @@
             batchList.forEach((item) => {
               let num = res1.shift()?.num;
               let minPackingCount = item.minPackingCount;
-              console.log('item', item);
               if (item.warehouseLedgerDetails?.length) {
                 item.warehouseLedgerDetails.forEach((i, index) => {
                   this.$set(i, 'num', num);
@@ -1893,9 +1888,10 @@
                   this.warehousingMaterialList[key].houseList[k].num;
               }
             }
-            console.log('===123', this.warehousingMaterialList);
+            console.log('1122', this.warehousingMaterialList);
             let arr = this.warehousingMaterialList.map((item) => {
               return {
+                netWeight: item.netWeight,
                 num: item.num,
                 batchNo: item.batchNo,
                 categoryId:

+ 19 - 22
src/views/warehouseManagement/stockManagement/details.vue

@@ -347,6 +347,12 @@
                 {{ row.clientCode }}
               </template>
             </el-table-column>
+            <!-- v-if="infoData.bizType == 1" -->
+            <el-table-column label="刻码" prop="engrave">
+              <template slot-scope="{ row }">
+                {{ row.engrave }}
+              </template>
+            </el-table-column>
             <el-table-column label="重量" prop="weight">
               <template slot-scope="{ row }">
                 {{ row.weight }}
@@ -358,16 +364,6 @@
               </template>
             </el-table-column>
 
-            <el-table-column
-              v-if="infoData.bizType == 1"
-              label="刻码"
-              prop="engrave"
-            >
-              <template slot-scope="{ row }">
-                {{ row.engrave }}
-              </template>
-            </el-table-column>
-
             <el-table-column label="日期" prop="createTime" width="200">
               <template slot="header" slot-scope="scope">
                 {{ dateTypes == 1 ? '采购日期' : '生产日期' }}
@@ -435,11 +431,8 @@
                 {{ row.clientCode }}
               </template>
             </el-table-column>
-            <el-table-column
-              v-if="infoData.bizType == 1"
-              label="刻码"
-              prop="engrave"
-            >
+            <!-- v-if="infoData.bizType == 1" -->
+            <el-table-column label="刻码" prop="engrave">
               <template slot-scope="{ row }">
                 {{ row.engrave }}
               </template>
@@ -529,15 +522,19 @@
         handler(val) {
           if (val == 0) {
             this.active = 1;
-            this.stepsTitle = '已完成';
-            this.stepsStatus = 'success';
+            this.stepsTitle = '未审核';
+            this.stepsStatus = 'wait';
           } else if (val == 1) {
-            this.active = 3;
-            this.stepsTitle = '已完成';
-            this.stepsStatus = 'success';
+            this.active = 2;
+            this.stepsTitle = '审核中';
+            this.stepsStatus = 'process';
           } else if (val == 2) {
-            this.active = 3;
-            this.stepsTitle = '已驳回';
+            this.active = 2;
+            this.stepsTitle = '审核通过';
+            this.stepsStatus = 'success';
+          } else if (val == 3) {
+            this.active = 2;
+            this.stepsTitle = '驳回';
             this.stepsStatus = 'error';
           }
         }

+ 1190 - 0
src/views/warehouseManagement/stockManagement/edit.vue

@@ -0,0 +1,1190 @@
+<template>
+  <div class="ele-body">
+    <el-card shadow="never">
+      <div class="page-title">
+        <PageHeader title="入库单修改"> </PageHeader>
+      </div>
+      <div>
+        <!-- <StatusStep :activeCode="infoData.verifyStatus" /> -->
+        <div class="stepsStatus">
+          <el-steps :active="active" align-center>
+            <el-step title="创建"></el-step>
+            <el-step title="待审核"></el-step>
+            <el-step :title="stepsTitle" :status="stepsStatus"></el-step>
+          </el-steps>
+        </div>
+        <div class="content-detail">
+          <header-title title="基本信息" size="16px"></header-title>
+
+          <div class="mt20">
+            <el-form label-width="120px">
+              <el-col :span="8">
+                <el-form-item label="入库单:">
+                  <span>{{ infoData.bizNo }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="入库物品类型:">
+                  <span>{{ handleAssetType(extInfo.assetType) }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="入库场景:">
+                  <span>{{ getSceneState(infoData.bizType) }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="销售订单:">
+                  <span>{{ extInfo.documentSource }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="权属部门:">
+                  <span>{{ extInfo.deptName }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="入库登记人:">
+                  <span>{{ extInfo.createUserName }}</span>
+                </el-form-item>
+              </el-col>
+              <!-- <el-col :span="8">
+                <el-form-item label="创建时间:">
+                  <span>{{ infoData.createTime }}</span>
+                </el-form-item>
+              </el-col> -->
+              <el-col :span="8">
+                <el-form-item label="入库时间:">
+                  <span>{{ infoData.createTime }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="状态:">
+                  <span>{{ getAuditStatus(infoData.verifyStatus) }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="审核人:">
+                  <span>{{ infoData.verifyName }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8" v-if="infoData.bizType == 2">
+                <el-form-item label="客户:">
+                  <span>{{ infoData.clientName }}</span>
+                </el-form-item>
+              </el-col>
+              <!-- <el-col :span="8" v-if="infoData.bizType == 2">
+                <el-form-item label="客户代码:">
+                  <span>{{ infoData.clientCode }}</span>
+                </el-form-item>
+              </el-col> -->
+              <el-col :span="8" v-if="infoData.bizType == 2">
+                <el-form-item label="供应商:">
+                  <span>{{ extInfo.supplierName }}</span>
+                </el-form-item>
+              </el-col>
+              <!-- <el-col :span="8" v-if="infoData.bizType != 2">
+                <el-form-item label="供应商代码:">
+                  <span>{{ extInfo.supplierCode }}</span>
+                </el-form-item>
+              </el-col> -->
+              <el-col :span="8">
+                <el-form-item label="送货人:">
+                  <span>{{ infoData.fromUser }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="送货人联系方式:">
+                  <span>{{ extInfo.deliveryPhone }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="附件:">
+                  <!-- <el-link
+                    type="primary"
+                    v-for="(item, index) in infoData.contentImage"
+                    @click="contentImageDownload(item)"
+                    :key="item.name"
+                    >{{ item.name }}</el-link
+                  > -->
+                </el-form-item>
+              </el-col>
+              <el-col :span="24">
+                <el-form-item label="备注:">
+                  <span>{{ infoData.remark }}</span>
+                </el-form-item>
+              </el-col>
+            </el-form>
+          </div>
+        </div>
+        <div class="content-detail mt20">
+          <header-title title="物品信息" size="16px"></header-title>
+          <!-- =={{ warehousingMaterialList }} -->
+          <div class="mt20">
+            <div class="mt10">
+              <el-form
+                ref="warehousingMaterialListRef"
+                :model="{ warehousingMaterialList: warehousingMaterialList }"
+                :show-message="false"
+              >
+                <el-table
+                  ref="multipleTable"
+                  :data="warehousingMaterialList"
+                  tooltip-effect="dark"
+                  :key="infoData.assetType"
+                  style="width: 100%"
+                  stripe
+                  :header-cell-style="rowClass"
+                >
+                  <el-table-column label="序号" type="index" width="50">
+                  </el-table-column>
+                  <el-table-column
+                    label="编码"
+                    prop="categoryCode"
+                    align="center"
+                    width="150"
+                  ></el-table-column>
+                  <el-table-column
+                    label="名称"
+                    align="center"
+                    width="170"
+                    prop="name"
+                  ></el-table-column>
+                  <el-table-column
+                    v-for="(item, index) in tableHeader"
+                    :key="index"
+                    align="center"
+                    :label="item.label"
+                    width="150"
+                    :prop="item.prop"
+                  >
+                    <template slot-scope="{ row }">
+                      <template v-if="item.formatter">{{
+                        item.formatter(row)
+                      }}</template>
+                      <template v-else>{{ row[item.prop] }}</template>
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                    label="批次号"
+                    prop="batchNo"
+                    width="70"
+                    align="center"
+                  >
+                  </el-table-column>
+                  <el-table-column
+                    label="最小包装单元"
+                    align="center"
+                    prop="minPackingCount"
+                    width="100"
+                  >
+                    <el-table-column
+                      label=""
+                      prop="minPackingCount"
+                      width="100"
+                      align="center"
+                    >
+                      <template slot-scope="{ row, $index }">
+                        <template v-if="true">
+                          {{ row.minPackingCount }}
+                        </template>
+                        <el-form-item
+                          v-else
+                          :prop="`warehousingMaterialList.${$index}.minPackingCount`"
+                          required
+                        >
+                          <el-input
+                            v-model="row.minPackingCount"
+                            @input="
+                              (value) =>
+                                (row.minPackingCount = value.replace(
+                                  /^(0+)|[^\d]+/g,
+                                  ''
+                                ))
+                            "
+                          >
+                          </el-input>
+                        </el-form-item>
+                      </template>
+                    </el-table-column>
+                    <el-table-column label="" prop="minPackingCount">
+                      <template slot-scope="{ row, $index }">
+                        {{ handleRowUnit(row) }} /{{ row.packingUnit }}
+                      </template>
+                    </el-table-column>
+                  </el-table-column>
+
+                  <el-table-column
+                    label="包装数量"
+                    prop="packingCount"
+                    width="130"
+                    align="center"
+                  >
+                    <!-- <template slot-scope="{ row, $index }">
+                      {{ row.packingCount }} {{ row.packingUnit }}
+                    </template> -->
+                    <template slot-scope="{ row, $index }">
+                      <template v-if="true">
+                        {{ row.packingCount }} {{ row.packingUnit }}
+                      </template>
+                      <el-form-item
+                        v-else
+                        :prop="`warehousingMaterialList.${$index}.packingCount`"
+                        required
+                      >
+                        <el-input
+                          v-model="row.packingCount"
+                          @input="packNum(row, $event)"
+                        >
+                          <template slot="append">
+                            {{ row.packingUnit ? row.packingUnit : '/' }}
+                          </template>
+                        </el-input>
+                      </el-form-item>
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                    label="计量数量"
+                    prop="batchNo"
+                    width="100"
+                    align="center"
+                  >
+                    <template slot-scope="{ row, $index }">
+                      <template>
+                        {{ row.minPackingCount * row.packingCount }}
+                      </template>
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                    label="计量单位"
+                    prop="batchNo"
+                    width="100"
+                    align="center"
+                  >
+                    <template slot-scope="{ row, $index }">
+                      <template>
+                        {{ row.measuringUnit }}
+                      </template>
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                    label="重量"
+                    prop="count"
+                    width="100"
+                    align="center"
+                  >
+                    <template slot-scope="{ row, $index }">
+                      {{ row.weight }}
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                    label="重量单位"
+                    prop="count"
+                    width="100"
+                    align="center"
+                  >
+                    <template slot-scope="{ row, $index }">
+                      {{ row.weightUnit }}
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                    label="单价"
+                    prop="price"
+                    width="190"
+                    align="center"
+                  >
+                    <template slot-scope="{ row, $index }">
+                      <template v-if="true">
+                        {{ row.packingCount }} {{ row.packingUnit }}
+                      </template>
+                      <el-form-item v-else>
+                        <el-input
+                          v-model="row.price"
+                          placeholder="非必填"
+                          @input="
+                            (value) =>
+                              (row.price = value.replace(/[^0-9.]+/g, ''))
+                          "
+                        >
+                          <template slot="append">
+                            元/{{ handleRowUnit(row) }}
+                          </template>
+                        </el-input>
+                      </el-form-item>
+                    </template>
+                  </el-table-column>
+
+                  <el-table-column
+                    label="金额"
+                    align="center"
+                    prop="contentImage"
+                    :show-overflow-tooltip="true"
+                    width="100"
+                  >
+                    <template slot-scope="{ row, $index }">
+                      <!-- // calcSum(
+                      //   row.outInNum,
+                      //   row.univalenceUnit,
+                      //   row.univalence,
+                      //   row
+                      // ) -->
+                      {{
+                        calcSumTotal(
+                          row.packingCount,
+                          row.minPackingCount,
+                          row.price,
+                          row
+                        )
+                      }}
+                    </template>
+                  </el-table-column>
+
+                  <el-table-column
+                    label="货位"
+                    prop="position"
+                    :show-overflow-tooltip="true"
+                    width="200"
+                  >
+                    <template slot-scope="{ row, $index }">
+                      <template v-if="row.isSave">
+                        {{ row.position }}
+                      </template>
+                      <el-form-item
+                        v-else
+                        :prop="`warehousingMaterialList.${$index}.position`"
+                        :required="true"
+                      >
+                        <span @click="handleWareHouse(row, $index)">
+                          {{ row.position }}</span
+                        >
+                      </el-form-item>
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                    label="操作"
+                    width="200"
+                    fixed="right"
+                    align="center"
+                  >
+                    <template slot-scope="{ row, $index }">
+                      <el-button
+                        type="text"
+                        v-show="!row.isSave"
+                        @click="listSave(row, $index)"
+                        >保存</el-button
+                      >
+                      <el-button
+                        type="text"
+                        v-show="row.isSave"
+                        @click="listEdit(row, $index)"
+                        >编辑</el-button
+                      >
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-form>
+            </div>
+          </div>
+        </div>
+        <div class="mt20">
+          <!-- =={{ getDictValue('类型用途', infoData.assetType) }} -->
+          <!-- ${handleAssetType(extInfo.assetType)} -->
+          <header-title :title="`包装明细`" size="16px"></header-title>
+
+          <el-table
+            ref="multipleTable"
+            :data="detailList"
+            tooltip-effect="dark"
+            :header-cell-style="rowClass"
+            style="width: 100%"
+            stripe
+          >
+            <el-table-column label="序号" type="index" width="50">
+            </el-table-column>
+            <el-table-column label="编码" prop="categoryCode"></el-table-column>
+            <el-table-column label="名称" prop="name"></el-table-column>
+            <el-table-column label="批次号" prop="batchNo"></el-table-column>
+            <el-table-column label="包装编码" prop="code"></el-table-column>
+            <el-table-column
+              label="包装数量"
+              prop="packingCount"
+              width="80"
+            ></el-table-column>
+            <el-table-column
+              label="包装单位"
+              prop="packingUnit"
+            ></el-table-column>
+            <el-table-column
+              label="计量数量"
+              prop="minPackingCount"
+            ></el-table-column>
+            <el-table-column
+              label="计量单位"
+              prop="measuringUnit"
+            ></el-table-column>
+            <el-table-column
+              v-if="infoData.bizType == 2 || infoData.bizType == 1"
+              label="物料代号"
+              prop="materielCode"
+            >
+              <template slot-scope="{ row }">
+                {{ row.materielCode }}
+              </template>
+            </el-table-column>
+            <el-table-column
+              v-if="infoData.bizType == 2 || infoData.bizType == 1"
+              label="客户代号"
+              prop="clientCode"
+            >
+              <template slot-scope="{ row }">
+                {{ row.clientCode }}
+              </template>
+            </el-table-column>
+            <!-- v-if="infoData.bizType == 1" -->
+            <el-table-column label="刻码" prop="engrave">
+              <template slot-scope="{ row }">
+                {{ row.engrave }}
+              </template>
+            </el-table-column>
+            <el-table-column label="重量" prop="weight">
+              <template slot-scope="{ row }">
+                {{ row.weight }}
+              </template>
+            </el-table-column>
+            <el-table-column label="重量单位" prop="weightUtil">
+              <template slot-scope="{ row }">
+                {{ row.weightUtil }}
+              </template>
+            </el-table-column>
+
+            <el-table-column label="日期" prop="createTime" width="200">
+              <template slot="header" slot-scope="scope">
+                {{ dateTypes == 1 ? '采购日期' : '生产日期' }}
+              </template>
+              <template slot-scope="{ row }">
+                {{ row.createTime }}
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div class="mt20">
+          <header-title :title="`物料明细`" size="16px"> </header-title>
+          <el-table
+            ref="multipleTable"
+            :data="metailList"
+            tooltip-effect="dark"
+            :header-cell-style="rowClass"
+            style="width: 100%"
+            stripe
+            height="300px"
+          >
+            <el-table-column label="序号" type="index" width="50">
+            </el-table-column>
+            <el-table-column label="编码" prop="assetCode"></el-table-column>
+            <el-table-column
+              label="名称"
+              prop="assetName"
+              width="200"
+            ></el-table-column>
+            <el-table-column
+              label="批次号"
+              prop="batchNo"
+              width="80"
+            ></el-table-column>
+            <el-table-column
+              label="物料编码"
+              prop="no"
+              width="200"
+            ></el-table-column>
+            <el-table-column
+              label="计量数量"
+              prop="minPackingCount"
+              width="90"
+            ></el-table-column>
+            <el-table-column
+              width="80"
+              label="计量单位"
+              prop="measuringUnit"
+            ></el-table-column>
+            <el-table-column
+              v-if="infoData.bizType == 2"
+              label="物料代号"
+              prop="materielCode"
+            >
+              <template slot-scope="{ row }">
+                {{ row.materielCode }}
+              </template>
+            </el-table-column>
+            <el-table-column
+              v-if="infoData.bizType == 2 || infoData.bizType == 1"
+              label="客户代号"
+              prop="clientCode"
+            >
+              <template slot-scope="{ row }">
+                {{ row.clientCode }}
+              </template>
+            </el-table-column>
+            <!-- v-if="infoData.bizType == 1" -->
+            <el-table-column label="刻码" prop="engrave">
+              <template slot-scope="{ row }">
+                {{ row.engrave }}
+              </template>
+            </el-table-column>
+            <el-table-column width="100" label="重量" prop="weight">
+              <template slot-scope="{ row }">
+                {{ row.weight }}
+              </template>
+            </el-table-column>
+            <el-table-column label="重量单位" prop="weightUnit">
+              <template slot-scope="{ row }">
+                {{ row.weightUnit }}
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="center mt20" style="text-align: center">
+        <el-button type="primary" @click="handleSave" :loading="saveLoading"
+          >保存</el-button
+        >
+        <el-button @click="$router.go(-1)">返回</el-button>
+      </div>
+      <WareHouseDailog
+        ref="wareHouseDailogRef"
+        @houseData="houseData"
+      ></WareHouseDailog>
+    </el-card>
+  </div>
+</template>
+
+<script>
+  // import { getInfo } from '@/api/stockManagement';
+  import PageHeader from '@/components/PageHeader';
+  import selectType from '../components/selectType.vue';
+  import WareHouseDailog from '../components/WareHouseDailog.vue';
+  import StatusStep from '@/components/StatusStep/common.vue';
+  // import { fileSystemDownload } from '@/utils';
+  import outin from '@/api/warehouseManagement/outin';
+  import { getTreeByPid } from '@/api/classifyManage';
+
+  import {
+    materialType,
+    warehousingType,
+    useDict,
+    useDictLabel,
+    inputStatus,
+    emergencyState,
+    sceneState
+  } from '@/utils/dict/index';
+  import { auditStatus } from '@/utils/dict/common';
+  // import { batchBarPrint } from '@/api/ledgerAssets/booksList';
+  import { tableHeader } from '../common';
+  import { mapGetters, mapActions } from 'vuex';
+  export default {
+    components: { StatusStep, PageHeader, WareHouseDailog },
+    data() {
+      return {
+        saveLoading: false,
+        metailList: [],
+        dateTypes: 1,
+        detailList: [],
+        extInfo: {},
+        codeList: [],
+        auditStatus,
+        infoData: {},
+        warehousingMaterialList: [],
+        tableData2: [],
+        activeName: 'a',
+        num: 1,
+        openWindows: false, //打印弹窗
+        barCodeConfig: [],
+        stepsTitle: '已完成',
+        stepsStatus: 'success',
+        active: 0,
+
+        // 条码类型枚举
+        codeTypeObj: {
+          生产设备: 'EQUIPMENT',
+          舟皿: '',
+          周转车: 'TURNOVER_CAR',
+          模具: 'MODE',
+          库位: 'STORE_LOCAL',
+          混合料: 'MIX_MATER',
+          混炼料: 'MIXING_MATER',
+          破碎料: 'CRUSH_MATER',
+          货架: 'GOODS_SHELF',
+          返回料: 'RETURN_MATER',
+          返工料: 'REWORK_MATER',
+          备品备件: 'SPARE_PART',
+          车削料: 'LATHE_MATER',
+          风管料: 'WIND_PIPE_MATER',
+          地面料: 'GROUND_MATER'
+        }
+      };
+    },
+    watch: {
+      'infoData.verifyStatus': {
+        immediate: true,
+        handler(val) {
+          if (val == 0) {
+            this.active = 1;
+            this.stepsTitle = '未审核';
+            this.stepsStatus = 'wait';
+          } else if (val == 1) {
+            this.active = 2;
+            this.stepsTitle = '审核中';
+            this.stepsStatus = 'process';
+          } else if (val == 2) {
+            this.active = 2;
+            this.stepsTitle = '审核通过';
+            this.stepsStatus = 'success';
+          } else if (val == 3) {
+            this.active = 2;
+            this.stepsTitle = '驳回';
+            this.stepsStatus = 'error';
+          }
+        }
+      }
+    },
+    computed: {
+      ...mapGetters(['getDictValue']),
+      curDateType() {
+        if (this.materialCodeReqList) {
+          return this.materialCodeReqList[0].manufactureTime
+            ? 'manufactureTime'
+            : 'procurementTime';
+        }
+      },
+      tableHeader() {
+        return tableHeader(this.infoData.assetType);
+      },
+      emergencyState() {
+        return useDict(emergencyState)(this.infoData.emergencyState);
+      }
+      // 条码信息
+      // materialCodeReqList() {
+      //   return this.warehousingMaterialList.warehouseLedgerDetails;
+      // }
+    },
+    created() {
+      this.requestDict('类型用途');
+      this._getInfo();
+    },
+    methods: {
+      houseData(argum, idx) {
+        this.$set(this.warehousingMaterialList[idx], 'houseList', argum);
+        argum.forEach((item) => {
+          item.position = `${item.warehouseName}-${item.areaName}-${item.shelfCode}-${item.cargoSpaceCode}`;
+          item.pathIds = `${item.warehouseId},${item.areaId},${item.shelfId},${item.cargoSpaceId}`;
+        });
+        console.log(argum);
+        this.$set(
+          this.warehousingMaterialList[idx],
+          'position',
+          argum[0].position
+        );
+        console.log(
+          'this.warehousingMaterialList',
+          this.warehousingMaterialList
+        );
+      },
+      // 仓库编辑
+      handleWareHouse(row, idx) {
+        const a = row.pathIds.split(',');
+        const b = row.position.split('-');
+        console.log('==', row, a);
+        row.houseList = [
+          {
+            warehouseId: a[0],
+            warehouseNam: b[0] + '-' + b[1],
+            areaId: a[1],
+            areaName: b[2],
+            shelfId: a[2],
+            shelfCode: b[3],
+            cargoSpaceId: a[3],
+            cargoSpaceCode: b[4],
+            num: row.packingCount
+          }
+        ];
+        this.$refs.wareHouseDailogRef.open(row, idx);
+      },
+      async handleSave() {
+        this.saveLoading = true;
+
+        if (this.detailList.length != 0) {
+          let a = this.infoData;
+          let array1 = this.warehousingMaterialList;
+          let array2 = this.detailList;
+          console.log(array1);
+          console.log(array2);
+          // 遍历数组1
+          array1.forEach((item1) => {
+            item1.arr = [];
+            item1.outInDetailRecordUpdatePOList = [];
+            // 遍历数组2
+            array2.forEach((item2) => {
+              if (
+                item1.id == item2.outInDetailId &&
+                item1.batchNo == item2.batchNo &&
+                item1.categoryCode == item2.categoryCode
+              ) {
+                // 判断id、batchNo、categoryId是否相等
+                // 将数组2对象添加到数组1对象的outInDetailRecordVOList中
+                item1.arr.push(item2);
+              } else {
+                console.log(item2);
+                item1.outInDetailRecordUpdatePOList.push({ ...item2 });
+              }
+            });
+          });
+          array1.forEach((ele) => {
+            if (ele.outInDetailRecordUpdatePOList.length == ele.arr.length) {
+              delete ele.arr;
+            } else {
+              ele.outInDetailRecordUpdatePOList = ele.arr;
+              delete ele.arr;
+            }
+          });
+          console.log('arr1', array1);
+          array1.forEach((e) => {
+            if (e.hasOwnProperty('houseList')) {
+              e.houseList.forEach((item) => {
+                e.position = `${item.warehouseName}-${item.areaName}-${item.shelfCode}-${item.cargoSpaceCode}`;
+                e.pathIds = `${item.warehouseId},${item.areaId},${item.shelfId},${item.cargoSpaceId}`;
+              });
+            }
+          });
+          delete array1.houseList;
+          a.outInDetailUpdatePOList = array1;
+          a.extInfo = this.extInfo;
+          const data = await outin.update(a);
+          // console.log('sss', data);
+          if (data.code == 0) {
+            this.$message.success('修改成功!');
+            this.$router.push('/warehouseManagement/stockManagement');
+          }
+        } else {
+          this.$message.warning('包装明细为空!');
+        }
+        this.saveLoading = false;
+      },
+      packNum(row, value) {
+        console.log(row);
+        const total = {
+          packingCount: Number(row.minPackingCount),
+          outInNum: Number(row.packingCount)
+        };
+        if (row.measuringUnit == row.weightUnit) {
+          row.weight = total.packingCount * 1 * total.outInNum.toFixed(2);
+        } else {
+          const totals = total.packingCount * total.outInNum;
+          row.weight = totals * row.netWeight.toFixed(2);
+        }
+        return (row.outInNum = value.replace(/^(0+)|[^\d]+/g, ''));
+      },
+      listEdit(row) {
+        this.$set(row, 'isSave', false);
+        const list = this.detailList;
+        for (const key in list) {
+          if (
+            list[key].outInDetailId == row.id &&
+            list[key].categoryCode == row.categoryCode &&
+            list[key].batchNo == row.batchNo
+          ) {
+            // this.detailList = [];
+            console.log(list[key]);
+          }
+        }
+      },
+      listSave(row, index) {
+        console.log(row);
+        const fileds = [
+          // `warehousingMaterialList.${index}.batchNo`,
+          `warehousingMaterialList.${index}.position`
+        ];
+        console.log('==1', this.infoData.bizType);
+        if (this.infoData.bizType != 5) {
+          fileds.push(
+            ...[
+              // `warehousingMaterialList.${index}.packingCount`,
+              // `warehousingMaterialList.${index}.minPackingCount`
+            ]
+          );
+        } else if (
+          this.warehousingMaterialList.some(
+            (i) => !i.outInDetailRecordVOList?.length
+          )
+        ) {
+          this.$message.error('请选择资产编号!');
+          return;
+        }
+        Promise.all(
+          fileds.map(
+            (item) =>
+              new Promise(async (resolve, rej) => {
+                this.$refs.warehousingMaterialListRef.validateField(
+                  item,
+                  (err) => {
+                    if (err) {
+                      rej(err);
+                    } else {
+                      resolve();
+                    }
+                  }
+                );
+              })
+          )
+        )
+          .then((res) => {
+            this.$set(row, 'isSave', true);
+            if (this.infoData.bizType != 5) {
+              this.createMaterialCode(row);
+            } else {
+              // 退还
+              // this.createMaterialCodeReturn(row);
+            }
+          })
+          .catch((err) => {
+            console.log(err);
+            this.$message.error('请填入必填项!');
+          });
+      },
+      async createMaterialCode(row) {
+        const {
+          packingCount,
+          minPackingCount,
+          weight,
+          outInDetailRecordVOList
+        } = row;
+        // console.log(row);
+        // if (row.houseList) {
+        //   row.houseList.forEach((item) => {
+        //     position = `${item.warehouseName}-${item.areaName}-${item.shelfCode}-${item.cargoSpaceCode}`;
+        //     pathIds = `${item.warehouseId},${item.areaId},${item.shelfId},${item.cargoSpaceId}`;
+        //   });
+        // }
+        const codes = outInDetailRecordVOList[0].code;
+        const index = outInDetailRecordVOList[0].code.indexOf('636');
+        const result = parseInt(codes.substring(index + 3, index + 6));
+        console.log(result);
+        const dataArray = [];
+        for (let i = 0; i < packingCount; i++) {
+          const newData = { ...row };
+          if (outInDetailRecordVOList.length != packingCount) {
+            newData.minPackingCount = row.minPackingCount;
+            newData.packingCount = 1;
+            newData.weight = weight / packingCount;
+            newData.weightUtil = row.weightUnit;
+            newData.outInDetailId = row.id;
+          } else {
+            newData.minPackingCount = row.minPackingCount;
+            newData.weight = weight / packingCount;
+            newData.packingCount = row.packingCount / packingCount;
+            newData.weightUtil = row.weightUnit;
+            newData.outInDetailId = row.id;
+          }
+          dataArray.push(newData);
+        }
+
+        for (let j = 0; j < dataArray.length; j++) {
+          dataArray[j].code =
+            dataArray[j].categoryCode + dataArray[j].batchNo + 0 + (result + j);
+        }
+
+        this.detailList = dataArray;
+        console.log('====>>>>>1', dataArray);
+      },
+      //计算金额
+      calcSumTotal(PackingCount, outInNum, univalence) {
+        //最小包装单元,包装数量,单价
+        const total = {
+          PackingCount: Number(PackingCount),
+          outInNum: Number(outInNum),
+          univalence: Number(univalence == undefined ? 0 : univalence)
+        };
+        return total.PackingCount * total.outInNum * total.univalence;
+      },
+      ...mapActions('dict', ['requestDict']),
+      getAuditStatus: useDictLabel(auditStatus),
+      getMaterialType: useDictLabel(materialType),
+      getInputStatus: useDictLabel(inputStatus),
+      getSceneState: useDictLabel(sceneState),
+      handleRowUnit(row) {
+        return row.measuringUnit;
+        // if (this.extInfo.assetType == 1) {
+        //   console.log(row);
+        //   return row.weightUnit;
+        // } else if (this.extInfo.assetType == 4) {
+        //   return row.measuringUnit;
+        // } else {
+        //   return row.measuringUnit;
+        // }
+      },
+      handleAssetType(r) {
+        const code = this.codeList.find((item) => item.dictCode == r);
+        return code?.dictValue;
+      },
+      rowClass({ row, column, rowIndex, columnIndex }) {
+        if (rowIndex === 1) {
+          return {
+            display: 'none',
+            background: '#EEEEEE',
+            border: 'none'
+          };
+        }
+
+        return { background: '#EEEEEE', border: 'none' };
+      },
+      async _getInfo() {
+        const res = await outin.getById(this.$route.query.id);
+        console.log('===', res);
+        if (res) {
+          this.infoData = res;
+          this.extInfo = res.extInfo;
+          this.warehousingMaterialList = res.outInDetailVOList.map((item) => {
+            return { ...item, isSave: true };
+          });
+          const arr = [];
+          for (const key in this.warehousingMaterialList) {
+            for (const k in this.warehousingMaterialList[key]
+              .outInDetailRecordVOList) {
+              arr.push({
+                ...this.warehousingMaterialList[key].outInDetailRecordVOList[k],
+                weightUnit: this.warehousingMaterialList[key].weightUnit
+              });
+            }
+          }
+          this.dateTypes = arr[0].dateType;
+          this.detailList = arr;
+          let iArr = [];
+          arr.forEach((item) => {
+            item.outInDetailRecordMaterialDetailVOList.forEach((ele) => {
+              iArr.push({ ...ele });
+            });
+          });
+          this.metailList = iArr;
+        }
+        const { data } = await getTreeByPid(0);
+        this.codeList = data.map((item) => {
+          return { dictCode: item.id, dictValue: item.name };
+        });
+      },
+      calcSum(a, b, c, row) {
+        if (
+          (Number.isNaN(+a) && a !== '') ||
+          (Number.isNaN(+b) && b !== '') ||
+          (Number.isNaN(+c) && c !== '')
+        ) {
+          return '';
+        }
+
+        return a * b * c + { yuan: '元', wanyuan: '万元' }[row.univalenceUnit];
+      },
+      contentImageDownload(item) {
+        fileSystemDownload(item);
+      },
+      selectActive(num) {
+        this.num = num;
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  ::v-deep .page-title {
+    border-bottom: none;
+  }
+  ::v-deep .page-title-div {
+    width: 100%;
+  }
+  .stepsStatus {
+    width: 40%;
+    margin: 0 auto;
+  }
+  .el-form-item {
+    margin-bottom: 10px;
+  }
+  .p20 {
+    padding: 20px;
+  }
+  .flex {
+    display: flex;
+  }
+  .title {
+    justify-content: space-between;
+    border-bottom: 1px solid #ccc;
+    padding-bottom: 5px;
+    span {
+      font-size: 16px;
+    }
+    .col {
+      padding-left: 40px;
+      font-size: 14px;
+      color: #aaaaaa;
+    }
+  }
+  .degree {
+    margin-right: 10px;
+    padding: 0px 15px;
+    color: #fff;
+    font-size: 13px;
+    line-height: 23px;
+    border-radius: 23px;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    span {
+      width: 5px;
+      height: 5px;
+      border-radius: 100%;
+      margin-right: 6px;
+      background-color: #fff;
+    }
+  }
+  .red {
+    background-color: rgb(163, 0, 20);
+  }
+  .blue {
+    background-color: #1989fa;
+  }
+  .createdInfo {
+    justify-content: space-around;
+    margin-top: 10px;
+    font-size: 14px;
+    .col {
+      color: #6e6e6e;
+      padding-right: 10px;
+    }
+  }
+  .mt40 {
+    margin-top: 40px;
+  }
+
+  .custSteps {
+    margin-top: 20px;
+    margin-left: 70px;
+    .box {
+      width: 158px;
+      border: 1px solid #ccc;
+      padding: 10px;
+      flex-direction: row;
+      flex-wrap: wrap;
+      // justify-content: space-between;
+      font-size: 12px;
+      color: #9e9e9e;
+      .x {
+        width: 20px;
+        height: 15px;
+        margin-right: 5px;
+      }
+      .q {
+        background-color: #d0e4d5;
+      }
+      .b {
+        background-color: #1989fa;
+      }
+      .g {
+        background-color: #157a2c;
+      }
+      .r {
+        background-color: #a30014;
+      }
+      .a {
+        align-items: center;
+        margin-bottom: 10px;
+      }
+      .mr10 {
+        margin-right: 10px;
+      }
+      .mb0 {
+        margin-bottom: 0;
+      }
+    }
+    .stepsInfo {
+      // flex: 1;
+      width: 483px;
+    }
+  }
+  .mt20 {
+    margin-top: 20px;
+  }
+  .content-detail {
+    overflow: hidden;
+  }
+  .executor {
+    font-size: 14px;
+    .col {
+      color: #6e6e6e;
+      padding-right: 10px;
+    }
+  }
+  .result {
+    justify-content: space-around;
+  }
+  .mr20 {
+    margin-right: 20px;
+  }
+  .details {
+    font-size: 14px;
+    margin-bottom: 10px;
+  }
+
+  .customSteps {
+    margin-top: 40px;
+    font-size: 14px;
+    margin-left: 80px;
+    .time {
+      font-size: 12px;
+      color: #6e6e6e;
+      margin-right: 20px;
+      position: relative;
+      &::after {
+        content: '';
+        width: 1px;
+        height: 100%;
+        background-color: #157a2c;
+        position: absolute;
+        right: -26px;
+      }
+    }
+    .flex:last-child {
+      .time {
+        &::after {
+          display: none;
+        }
+      }
+    }
+    .round {
+      margin-right: 20px;
+      width: 10px;
+      height: 10px;
+      border-radius: 100%;
+      background-color: #157a2c;
+      position: relative;
+      span {
+        position: absolute;
+        top: 50%;
+        left: 50%;
+        width: 4px;
+        height: 4px;
+        background-color: #fff;
+        border-radius: 100%;
+        transform: translate(-2px, -2px);
+      }
+    }
+    .text {
+      .info {
+        margin-top: 10px;
+        width: 955px;
+        background-color: #f0f3f3;
+        overflow: hidden;
+        padding: 10px;
+        margin-bottom: 10px;
+      }
+    }
+  }
+  .switch_left li {
+    border-right: 1px solid rgba(222, 222, 222, 1);
+    border-left: 1px solid rgba(222, 222, 222, 1);
+  }
+</style>

+ 47 - 4
src/views/warehouseManagement/stockManagement/index.vue

@@ -119,6 +119,24 @@
 
         <!-- 操作列 -->
         <template v-slot:action="{ row }">
+          <el-link
+            type="success"
+            :underline="false"
+            icon="el-icon-position"
+            v-if="row.verifyStatus == 0 || row.verifyStatus == 3"
+            @click="submit(row)"
+          >
+            提交
+          </el-link>
+          <el-link
+            type="warning"
+            :underline="false"
+            icon="el-icon-edit"
+            v-if="row.verifyStatus == 3"
+            @click="edit(row)"
+          >
+            编辑
+          </el-link>
           <el-link
             type="primary"
             :underline="false"
@@ -164,8 +182,9 @@
         },
         total: 0,
         status: [
-          { label: '待审核', class: 'ele-text-primary' },
-          { label: '已审核', class: 'ele-text-success' }, // 审核状态  1未审核  2
+          { label: '未审核', class: 'ele-text-info' },
+          { label: '审核中', class: 'ele-text-primary' },
+          { label: '审核通过', class: 'ele-text-success' },
           { label: '驳回', class: 'ele-text-danger' }
         ],
 
@@ -224,12 +243,13 @@
             label: '状态',
             align: 'center',
             slot: 'verifyStatus',
-            showOverflowTooltip: true
+            showOverflowTooltip: true,
+            width: 100
           },
           {
             columnKey: 'action',
             label: '操作',
-            width: 100,
+            width: 250,
             align: 'center',
             slot: 'action',
             showOverflowTooltip: true
@@ -239,6 +259,21 @@
     },
     created() {},
     methods: {
+      submit(row) {
+        this.$confirm('此操作将提交流程, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+          .then(async () => {
+            const data = await outin.outinApprove({ outInId: row.id });
+            if (data) {
+              this.$message.success('流程发起成功!');
+              this.getList();
+            }
+          })
+          .catch(() => {});
+      },
       handleBizType(code) {
         for (const key in this.sceneState) {
           if (this.sceneState[key].code == code) {
@@ -278,6 +313,14 @@
           // query
         });
       },
+      edit(row) {
+        this.$router.push({
+          path: '/warehouseManagement/stockManagement/edit',
+          query: {
+            id: row.id
+          }
+        });
+      },
       details(row) {
         this.$router.push({
           path: '/warehouseManagement/stockManagement/details',