|
|
@@ -0,0 +1,1911 @@
|
|
|
+<!-- 采购入库(生产非生产性) -->
|
|
|
+<template>
|
|
|
+ <div class="procurementStorage">
|
|
|
+ <el-card shadow="never">
|
|
|
+ <header-title title="基本信息"></header-title>
|
|
|
+ <el-form
|
|
|
+ :model="formData"
|
|
|
+ ref="formName"
|
|
|
+ label-width="120px"
|
|
|
+ :rules="rules"
|
|
|
+ >
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="物品类型:" prop="extInfo.assetType">
|
|
|
+ <span>{{ assetTypeMapping[formData.extInfo.assetType] }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="入库类型:" prop="bizType">
|
|
|
+ <span>{{ inboundTypeMapping[formData.bizType] }}</span>
|
|
|
+ </el-form-item></el-col
|
|
|
+ >
|
|
|
+ <el-col
|
|
|
+ v-if="inboundTypeDocumentsMapping[formData.bizType]"
|
|
|
+ :span="8"
|
|
|
+ >
|
|
|
+ <el-form-item
|
|
|
+ :label="inboundTypeDocumentsMapping[formData.bizType] + ':'"
|
|
|
+ prop="documentSource"
|
|
|
+ >
|
|
|
+ <span>{{ formData.extInfo.documentSource }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="权属部门:" prop="deptName">
|
|
|
+ <span>{{ formData.extInfo.deptName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="入库登记人:">
|
|
|
+ <span>{{ formData.extInfo.createUserName }}</span>
|
|
|
+ </el-form-item></el-col
|
|
|
+ >
|
|
|
+ <el-col
|
|
|
+ :span="8"
|
|
|
+ v-if="inboundTypeMapping[formData.bizType] === '采购入库'"
|
|
|
+ >
|
|
|
+ <el-form-item label="供应商:" prop="supplierName">
|
|
|
+ <span>{{ formData.extInfo.supplierName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="送货人:" prop="fromUser">
|
|
|
+ <el-input
|
|
|
+ placeholder="请输入"
|
|
|
+ v-model="formData.fromUser"
|
|
|
+ clearable
|
|
|
+ /> </el-form-item
|
|
|
+ ></el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="送货人联系方式:" prop="deliveryPhone">
|
|
|
+ <el-input
|
|
|
+ placeholder="请输入"
|
|
|
+ v-model="formData.extInfo.deliveryPhone"
|
|
|
+ clearable /></el-form-item
|
|
|
+ ></el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="备注:" prop="remark">
|
|
|
+ <el-input
|
|
|
+ v-model="formData.remark"
|
|
|
+ clearable
|
|
|
+ type="textarea"
|
|
|
+ placeholder="请详细说明"
|
|
|
+ :rows="4"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <div class="material">
|
|
|
+ <header-title title="产品信息">
|
|
|
+ <el-button type="primary" @click="addStock" v-if="!isTask"
|
|
|
+ >添加</el-button
|
|
|
+ >
|
|
|
+ </header-title>
|
|
|
+
|
|
|
+ <div class="mt10 form-table">
|
|
|
+ <el-form
|
|
|
+ ref="warehousingMaterialListRef"
|
|
|
+ :model="{ warehousingMaterialList: warehousingMaterialList }"
|
|
|
+ :show-message="false"
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ v-if="warehousingMaterialList.length != 0"
|
|
|
+ type="success"
|
|
|
+ plain
|
|
|
+ style="margin-bottom: 20px; float: right; margin-right: 20px"
|
|
|
+ size="mini"
|
|
|
+ @click="listSaveArrs"
|
|
|
+ >批量保存</el-button
|
|
|
+ >
|
|
|
+ <el-table
|
|
|
+ v-if="isWeight"
|
|
|
+ :header-cell-style="rowClass"
|
|
|
+ ref="warehousingMaterialListTable"
|
|
|
+ :key="formData.extInfo.assetType"
|
|
|
+ :data="warehousingMaterialList"
|
|
|
+ tooltip-effect="dark"
|
|
|
+ style="width: 100%"
|
|
|
+ stripe
|
|
|
+ >
|
|
|
+ <el-table-column
|
|
|
+ label="序号"
|
|
|
+ type="index"
|
|
|
+ width="50"
|
|
|
+ align="center"
|
|
|
+ >
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column
|
|
|
+ label="编码"
|
|
|
+ prop="assetCode"
|
|
|
+ align="center"
|
|
|
+ width="130"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="名称"
|
|
|
+ align="center"
|
|
|
+ width="200"
|
|
|
+ prop="assetName"
|
|
|
+ ></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"
|
|
|
+ >
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ <template v-if="row.isSave">
|
|
|
+ {{ row.batchNo }}
|
|
|
+ </template>
|
|
|
+ <el-form-item
|
|
|
+ v-else
|
|
|
+ :prop="`warehousingMaterialList.${$index}.batchNo`"
|
|
|
+ required
|
|
|
+ >
|
|
|
+ <!-- <el-input v-model="row.batchNo"></el-input> -->
|
|
|
+ {{ row.batchNo }}
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column
|
|
|
+ label="最小包装单元"
|
|
|
+ align="center"
|
|
|
+ prop="minPackingCount"
|
|
|
+ width="100"
|
|
|
+ >
|
|
|
+ <el-table-column label="" prop="minPackingCount" width="100">
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ <template v-if="row.isSave">
|
|
|
+ {{ row.minPackingCount }}
|
|
|
+ </template>
|
|
|
+ <el-form-item
|
|
|
+ v-else
|
|
|
+ :prop="`warehousingMaterialList.${$index}.minPackingCount`"
|
|
|
+ required
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-model="row.minPackingCount"
|
|
|
+ @input="minPackingCountChange(row, $event)"
|
|
|
+ >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="" prop="minPackingCount">
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ {{ handleRowUnit(row) }} /{{ row.minPackUnit }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="包装数量"
|
|
|
+ prop="outInNum"
|
|
|
+ width="150"
|
|
|
+ align="center"
|
|
|
+ >
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ <template v-if="row.isSave || formData.bizType == 5">
|
|
|
+ {{ row.outInNum }} {{ row.minPackUnit }}
|
|
|
+ </template>
|
|
|
+ <el-form-item
|
|
|
+ v-else
|
|
|
+ :prop="`warehousingMaterialList.${$index}.outInNum`"
|
|
|
+ required
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-model="row.outInNum"
|
|
|
+ @input="packNum(row, $event)"
|
|
|
+ >
|
|
|
+ <template slot="append">
|
|
|
+ {{ row.minPackUnit ? row.minPackUnit : '/' }}
|
|
|
+ </template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="计量数量" prop="counts">
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ {{ row.minPackingCount * row.outInNum }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="计量单位"
|
|
|
+ prop="measuringUnit"
|
|
|
+ width="100"
|
|
|
+ align="center"
|
|
|
+ >
|
|
|
+ <!-- v-if="formData.extInfo.assetType == 1" -->
|
|
|
+
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ <template>
|
|
|
+ {{ row.measuringUnit }}
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="重量"
|
|
|
+ align="center"
|
|
|
+ prop="weight"
|
|
|
+ :show-overflow-tooltip="true"
|
|
|
+ >
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ {{ row.weight }}
|
|
|
+ <template slot="append">
|
|
|
+ {{ handleRowUnit(row) }}
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="重量单位"
|
|
|
+ align="center"
|
|
|
+ prop="weightUnit"
|
|
|
+ :show-overflow-tooltip="true"
|
|
|
+ >
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ {{ row.weightUnit }}
|
|
|
+ <template slot="append"> </template>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="单价"
|
|
|
+ prop="univalence"
|
|
|
+ width="150"
|
|
|
+ align="center"
|
|
|
+ >
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ <el-form-item
|
|
|
+ :prop="`warehousingMaterialList.${$index}.univalence`"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-model="row.univalence"
|
|
|
+ placeholder="非必填"
|
|
|
+ @input="
|
|
|
+ (value) =>
|
|
|
+ (row.univalence = 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"
|
|
|
+ >
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ {{
|
|
|
+ calcSumTotal(
|
|
|
+ row.outInNum,
|
|
|
+ row.minPackingCount,
|
|
|
+ row.univalence,
|
|
|
+ row
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="货位"
|
|
|
+ prop="warehouseName"
|
|
|
+ :show-overflow-tooltip="true"
|
|
|
+ width="250"
|
|
|
+ required
|
|
|
+ >
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ <el-form-item
|
|
|
+ :prop="`warehousingMaterialList.${$index}.houseList`"
|
|
|
+ :required="true"
|
|
|
+ >
|
|
|
+ <div @click="handleWareHouse(row, $index)">
|
|
|
+ <div
|
|
|
+ style="color: #ff4949"
|
|
|
+ v-if="row.houseList.length == 0"
|
|
|
+ >
|
|
|
+ ---(必填)
|
|
|
+ </div>
|
|
|
+ <div v-else>
|
|
|
+ <div
|
|
|
+ class="fontOmitted"
|
|
|
+ v-for="(item, index) in row.houseList"
|
|
|
+ :key="index"
|
|
|
+ >
|
|
|
+ {{ item.warehouseName }}- {{ item.areaName }}-
|
|
|
+ {{ item.shelfCode }}- {{ item.cargoSpaceCode
|
|
|
+ }}<span style="color: #ff4949" v-if="item.num">
|
|
|
+ - {{ item.num }}(数)</span
|
|
|
+ >
|
|
|
+ <br />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="质检单"
|
|
|
+ v-if="formData.extInfo.assetType === 3"
|
|
|
+ prop="contentImage"
|
|
|
+ :show-overflow-tooltip="true"
|
|
|
+ >
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ <upload @on-success="(data) => (row.contentImage = [data])"
|
|
|
+ ><template slot="placeholder">上传</template></upload
|
|
|
+ >
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column
|
|
|
+ label="操作"
|
|
|
+ width="200"
|
|
|
+ fixed="right"
|
|
|
+ align="center"
|
|
|
+ >
|
|
|
+ <template slot="header" slot-scope="scope"> 操作 </template>
|
|
|
+ <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
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ type="text"
|
|
|
+ @click="listDel(row, $index)"
|
|
|
+ v-if="!isTask"
|
|
|
+ >删除</el-button
|
|
|
+ >
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+ <div class="mt20">
|
|
|
+ <header-title :title="`包装明细`">
|
|
|
+ <div class="switch_right">
|
|
|
+ <span v-if="materialCodeReqList.length != 0">
|
|
|
+ 分拆<el-switch
|
|
|
+ v-model="isSplit"
|
|
|
+ active-color="#13ce66"
|
|
|
+ inactive-color="#ff4949"
|
|
|
+ @change="handleIsDetail"
|
|
|
+ style="margin-left: 10px"
|
|
|
+ >
|
|
|
+ </el-switch>
|
|
|
+ </span>
|
|
|
+
|
|
|
+ <el-button
|
|
|
+ style="margin-left: 20px"
|
|
|
+ type="text"
|
|
|
+ @click="dateSetting"
|
|
|
+ v-if="formData.bizType != 5"
|
|
|
+ >批量设置{{
|
|
|
+ curDateType === 'manufactureTime' ? '生产日期' : '采购日期'
|
|
|
+ }}</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </header-title>
|
|
|
+ <el-button
|
|
|
+ v-if="materialCodeReqList.length != 0"
|
|
|
+ type="success"
|
|
|
+ plain
|
|
|
+ style="margin-bottom: 20px; float: right; margin-right: 20px"
|
|
|
+ size="mini"
|
|
|
+ @click="wrapListSave"
|
|
|
+ >批量保存</el-button
|
|
|
+ >
|
|
|
+ <el-table
|
|
|
+ ref="materialCodeReqListTable"
|
|
|
+ :data="materialCodeReqList"
|
|
|
+ tooltip-effect="dark"
|
|
|
+ :key="formData.bizType"
|
|
|
+ :header-cell-style="rowClass"
|
|
|
+ style="width: 100%"
|
|
|
+ stripe
|
|
|
+ height="300px"
|
|
|
+ @selection-change="handleSelectionChange"
|
|
|
+ >
|
|
|
+ <el-table-column
|
|
|
+ label=""
|
|
|
+ type="selection"
|
|
|
+ align="center"
|
|
|
+ width="50"
|
|
|
+ v-if="formData.bizType != 5"
|
|
|
+ >
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="序号" type="index" width="50">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="编码"
|
|
|
+ prop="assetCode"
|
|
|
+ width="130"
|
|
|
+ :show-overflow-tooltip="true"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="名称"
|
|
|
+ prop="assetName"
|
|
|
+ width="150"
|
|
|
+ :show-overflow-tooltip="true"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="批次号"
|
|
|
+ prop="batchNo"
|
|
|
+ width="70"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ :label="`包装编码`"
|
|
|
+ prop="onlyCode"
|
|
|
+ width="130"
|
|
|
+ :show-overflow-tooltip="true"
|
|
|
+ ></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 label="物料代号" prop="materielCode" width="130">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-input
|
|
|
+ v-if="!row.isPack"
|
|
|
+ v-model="row.materielCode"
|
|
|
+ ></el-input>
|
|
|
+ <span v-else>{{ row.materielCode }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="客户代号" prop="clientCode">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-input
|
|
|
+ v-if="!row.isPack"
|
|
|
+ v-model="row.clientCode"
|
|
|
+ ></el-input>
|
|
|
+ <span v-else> {{ row.clientCode }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="刻码" prop="engrave">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-input v-if="!row.isPack" v-model="row.engrave"></el-input>
|
|
|
+ <span v-else>{{ row.engrave }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="重量" prop="weight" width="100">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-input
|
|
|
+ v-if="!row.isPack"
|
|
|
+ v-model="row.weight"
|
|
|
+ @input="weightInput($event, row)"
|
|
|
+ ></el-input>
|
|
|
+ <span v-else>{{ row.weight }}</span>
|
|
|
+ </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="result" width="120">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <DictSelection
|
|
|
+ dictName="质检结果"
|
|
|
+ clearable
|
|
|
+ v-model="row.result"
|
|
|
+ v-if="!row.isPack"
|
|
|
+ @updateVal="changeWrapStatus($event, row)"
|
|
|
+ />
|
|
|
+ <span v-else>{{ qualityResults[row.result] }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="质检状态" prop="status" width="120">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <span>{{ qualityStatus[row.status] }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column
|
|
|
+ v-if="formData.bizType != 5"
|
|
|
+ label="生产日期"
|
|
|
+ prop=""
|
|
|
+ width="220"
|
|
|
+ >
|
|
|
+ <template slot="header" slot-scope="scope">
|
|
|
+ <el-select filterable v-model="curDateType">
|
|
|
+ <el-option
|
|
|
+ value="manufactureTime"
|
|
|
+ label="生产日期"
|
|
|
+ ></el-option>
|
|
|
+ <el-option
|
|
|
+ value="procurementTime"
|
|
|
+ label="采购日期"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <template v-if="formData.bizType == 5">
|
|
|
+ {{ row[curDateType] }}
|
|
|
+ </template>
|
|
|
+ <el-date-picker
|
|
|
+ v-else
|
|
|
+ :disabled="row.ispack"
|
|
|
+ size="small"
|
|
|
+ v-model="row[curDateType]"
|
|
|
+ type="datetime"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="选择日期"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <template v-else>
|
|
|
+ <el-table-column
|
|
|
+ label="生产日期"
|
|
|
+ prop="manufactureTime"
|
|
|
+ width="200"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="采购日期"
|
|
|
+ prop="procurementTime"
|
|
|
+ width="200"
|
|
|
+ ></el-table-column>
|
|
|
+ </template>
|
|
|
+ <el-table-column label="操作" width="80" fixed="right">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-button type="text" @click="packCout(row)">
|
|
|
+ {{ !row.isPack ? '保存' : '编辑' }}
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <!-- </el-tab-pane>
|
|
|
+ </el-tabs> -->
|
|
|
+ </div>
|
|
|
+ <div class="mt20" v-if="isSplit">
|
|
|
+ <header-title :title="`物料明细`"> </header-title>
|
|
|
+ <el-button
|
|
|
+ v-if="resultArray.length != 0"
|
|
|
+ type="success"
|
|
|
+ plain
|
|
|
+ style="margin-bottom: 20px; float: right; margin-right: 20px"
|
|
|
+ size="mini"
|
|
|
+ @click="materialListSave"
|
|
|
+ >批量保存</el-button
|
|
|
+ >
|
|
|
+ <el-table
|
|
|
+ ref="resultArrayTable"
|
|
|
+ :data="resultArray"
|
|
|
+ tooltip-effect="dark"
|
|
|
+ :key="formData.bizType"
|
|
|
+ :header-cell-style="rowClass"
|
|
|
+ style="width: 100%"
|
|
|
+ stripe
|
|
|
+ height="300px"
|
|
|
+ @selection-change="handleSelectionChange"
|
|
|
+ >
|
|
|
+ <el-table-column label="序号" type="index" width="50">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="编码"
|
|
|
+ prop="assetCode"
|
|
|
+ :show-overflow-tooltip="true"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="名称"
|
|
|
+ prop="assetName"
|
|
|
+ width="200"
|
|
|
+ :show-overflow-tooltip="true"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="批次号"
|
|
|
+ prop="batchNo"
|
|
|
+ width="80"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="物料编码"
|
|
|
+ prop="no"
|
|
|
+ width="200"
|
|
|
+ :show-overflow-tooltip="true"
|
|
|
+ ></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 label="物料代号" prop="meterielCode" width="130">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-input
|
|
|
+ v-model="row.materielCode"
|
|
|
+ v-if="!row.isPack"
|
|
|
+ ></el-input>
|
|
|
+ <span v-else>{{ row.materialCode }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="客户代号" prop="clientCode">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-input
|
|
|
+ v-model="row.clientCode"
|
|
|
+ v-if="!row.isPack"
|
|
|
+ ></el-input>
|
|
|
+ <span v-else> {{ row.clientCode }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="刻码" prop="engrave">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-input v-model="row.engrave" v-if="!row.isPack"></el-input>
|
|
|
+ <span v-else> {{ row.engrave }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column width="100" label="重量" prop="weight">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-input v-model="row.weight" v-if="!row.isPack"></el-input>
|
|
|
+ <span v-else>{{ row.weight }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="重量单位" prop="weightUnit" width="100">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="质检结果" prop="result" width="120">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <DictSelection
|
|
|
+ dictName="质检结果"
|
|
|
+ clearable
|
|
|
+ v-model="row.result"
|
|
|
+ v-if="!row.isPack"
|
|
|
+ @updateVal="changeWrapStatus($event, row)"
|
|
|
+ />
|
|
|
+ <span v-else>{{ qualityResults[row.result] }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="质检状态" prop="status" width="120">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <span>{{ qualityStatus[row.status] }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" width="80" fixed="right">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-button type="text" @click="materialBtn(row)">
|
|
|
+ {{ !row.isPack ? '保存' : '编辑' }}
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ <selectType
|
|
|
+ :visibleDialog.sync="visibleDialog"
|
|
|
+ :title="title"
|
|
|
+ :tableHeader="tableHeader"
|
|
|
+ :bizScene="formData.bizType"
|
|
|
+ :type="[selectEquiType]"
|
|
|
+ :loadTree.sync="loadTree"
|
|
|
+ @selectTableData="addProduct"
|
|
|
+ />
|
|
|
+ <WareHouseDailog
|
|
|
+ ref="wareHouseDailogRef"
|
|
|
+ @houseData="houseData"
|
|
|
+ ></WareHouseDailog>
|
|
|
+ <el-dialog :visible.sync="dateVisible" title="选择日期" width="400px">
|
|
|
+ <el-date-picker
|
|
|
+ size="small"
|
|
|
+ v-model="batchTime"
|
|
|
+ type="datetime"
|
|
|
+ style="width: 320px"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="选择日期"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ <div style="text-align: right; margin-top: 20px">
|
|
|
+ <el-button @click="dateVisible = false">取消</el-button>
|
|
|
+ <el-button type="primary" @click="dateConfirm" :disabled="!batchTime"
|
|
|
+ >确认</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ import { getProductList } from '@/api/bpm/components/saleManage/contact';
|
|
|
+ import { getLoginUser } from '@/api/login';
|
|
|
+ import picker from '@/views/bpm/stockManagement/components/picker.vue';
|
|
|
+ import outin from '@/api/warehouseManagement/outin';
|
|
|
+ import { allCategoryLevel } from '@/api/classifyManage';
|
|
|
+ import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
|
|
|
+ import selectUpload from '@/components/selectUpload';
|
|
|
+ import upload from '@/components/uploadImg';
|
|
|
+ import { sceneState } from '@/utils/dict/index';
|
|
|
+ import selectTree from '@/components/selectTree';
|
|
|
+ import selectType from '@/views/bpm/stockManagement/components/selectType.vue';
|
|
|
+ import WareHouseDailog from '@/views/bpm/stockManagement/components/WareHouseDailog.vue';
|
|
|
+ import ReturnSelect from '@/views/bpm/stockManagement/components/ReturnSelect.vue';
|
|
|
+ import { tableHeader } from '@/views/bpm/handleTask/components/inoutBound/common';
|
|
|
+ import { getCode } from '@/api/codeManagement/index.js';
|
|
|
+ import { getReceiveSaleOrderrecordDetail } from '@/api/bpm/components/purchasingManage/purchaseorderreceive';
|
|
|
+
|
|
|
+ export default {
|
|
|
+ components: {
|
|
|
+ selectUpload,
|
|
|
+ selectTree,
|
|
|
+ selectType,
|
|
|
+ WareHouseDailog,
|
|
|
+ upload,
|
|
|
+ ReturnSelect,
|
|
|
+ picker
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ inboundTypeDocumentsMapping: {}, // 入库类型单据映射表
|
|
|
+ inboundTypeMapping: {}, // 入库类型映射表
|
|
|
+ assetTypeMapping: {}, // 物品类型映射表
|
|
|
+ isSplit: false, // 是否拆分到物料明细
|
|
|
+ qualityStatus: {
|
|
|
+ 0: '未检',
|
|
|
+ 1: '已检',
|
|
|
+ 2: '部分检'
|
|
|
+ }, // 质检状态 0未检 1已检
|
|
|
+ qualityResults: {
|
|
|
+ 0: '合格',
|
|
|
+ 1: '不合格',
|
|
|
+ 3: '让步接收'
|
|
|
+ }, // 质检结果 0合格 1不合格 3让步接收
|
|
|
+ isTask: false,
|
|
|
+ isWeight: true,
|
|
|
+ resultArray: [],
|
|
|
+ pickerRow: {},
|
|
|
+ codeList: [],
|
|
|
+ sceneState,
|
|
|
+ visibleDialog: false,
|
|
|
+ curDateType: 'manufactureTime',
|
|
|
+ materialCodeReqListSelected: [],
|
|
|
+ title: '',
|
|
|
+ warehousingMaterialList: [],
|
|
|
+ loadTree: true,
|
|
|
+ selectEquiType: '',
|
|
|
+ batchTime: '',
|
|
|
+ dateVisible: false,
|
|
|
+ formData: {
|
|
|
+ extInfo: {
|
|
|
+ assetType: '', //物品类型
|
|
|
+ deptCode: '', //部门code
|
|
|
+ deptName: '', //部门名称
|
|
|
+ verifyDeptCode: '', //审核部门编码
|
|
|
+ verifyDeptName: '', //审核部门名称
|
|
|
+ deliveryName: '', //送货人名称
|
|
|
+ deliveryPhone: '', //送货人电话
|
|
|
+ documentSource: '', //销售订单
|
|
|
+ urgent: '', //紧急状态
|
|
|
+ supplierId: '', //供应商ID
|
|
|
+ supplierName: '', //供应商名称
|
|
|
+ createUserName: '', //创建人名字
|
|
|
+ contentImage: [] //图片数组
|
|
|
+ },
|
|
|
+ fromUser: '', //送货人
|
|
|
+ bizType: '', //物品类型
|
|
|
+ verifyId: '', //审核人Id
|
|
|
+ verifyName: '', //审核人名称
|
|
|
+ createUserId: '',
|
|
|
+ remark: ''
|
|
|
+ },
|
|
|
+ rules: {
|
|
|
+ 'extInfo.assetType': {
|
|
|
+ required: true,
|
|
|
+ message: '请选择物品类型',
|
|
|
+ trigger: 'change'
|
|
|
+ },
|
|
|
+ bizType: {
|
|
|
+ required: true,
|
|
|
+ message: '请选择入库场景',
|
|
|
+ trigger: 'change'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ },
|
|
|
+ // type 入库分类
|
|
|
+ // productiveOrUnproductiveStorage (非)生产性采购入库
|
|
|
+ props: ['inboundType', 'type', 'form'],
|
|
|
+ computed: {
|
|
|
+ // 条码信息
|
|
|
+ materialCodeReqList() {
|
|
|
+ return this.warehousingMaterialList
|
|
|
+ .map((i) => i.warehouseLedgerDetails || [])
|
|
|
+ .flat();
|
|
|
+ },
|
|
|
+ tableHeader() {
|
|
|
+ return tableHeader(this.selectEquiType);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async created() {
|
|
|
+ await this.getAssetTypeOptions();
|
|
|
+ await this.getInboundTypeMapping();
|
|
|
+ this.initData();
|
|
|
+ switch (this.type) {
|
|
|
+ // (非)生产性采购入库
|
|
|
+ case 'productiveOrUnproductiveStorage':
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ // 入库类型和单据映射表
|
|
|
+ async getInboundTypeMapping() {
|
|
|
+ let obj = {};
|
|
|
+ let documents = {};
|
|
|
+ this.sceneState.forEach((item) => {
|
|
|
+ obj[item.code] = item.label;
|
|
|
+ documents[item.code] = item.documentsName;
|
|
|
+ });
|
|
|
+ this.inboundTypeMapping = obj;
|
|
|
+ this.inboundTypeDocumentsMapping = documents;
|
|
|
+ },
|
|
|
+ // 获取物品类型列表
|
|
|
+ async getAssetTypeOptions() {
|
|
|
+ const { data } = await allCategoryLevel();
|
|
|
+ let obj = {};
|
|
|
+ data.forEach((item) => {
|
|
|
+ obj[item.id] = item.name;
|
|
|
+ });
|
|
|
+ this.assetTypeMapping = obj;
|
|
|
+ },
|
|
|
+ // 包装维度最小包装单元改变——>总重量
|
|
|
+ minPackingCountChange(row, value) {
|
|
|
+ row.minPackingCount = value.replace(/^(0+)|[^\d]+/g, '');
|
|
|
+ if (row.outInNum >= 0 && value >= 0) {
|
|
|
+ this.packNum(row, row.outInNum);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 选择质检结果改变质检状态
|
|
|
+ changeWrapStatus(resultValue, row) {
|
|
|
+ switch (resultValue) {
|
|
|
+ case '':
|
|
|
+ // 清空质检状态
|
|
|
+ row.status = '0';
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ // 默认已检质检状态
|
|
|
+ row.status = '1';
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ 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) {
|
|
|
+ this.isSplit = event;
|
|
|
+ const list = this.materialCodeReqList;
|
|
|
+ if (event) {
|
|
|
+ let resultArray = [];
|
|
|
+ list.forEach((item) => {
|
|
|
+ // 包装维度改成已保存状态
|
|
|
+ item.isPack = true;
|
|
|
+ // 拆分物料维度并生成列表
|
|
|
+ for (let i = 1; i <= Number(item.minPackingCount); i++) {
|
|
|
+ resultArray.push({
|
|
|
+ onlyCode: item.onlyCode,
|
|
|
+ no: item.onlyCode + i.toString().padStart(4, '0'),
|
|
|
+ assetCode: item.assetCode,
|
|
|
+ assetName: item.assetName,
|
|
|
+ batchNo: item.batchNo,
|
|
|
+ minPackingCount: 1,
|
|
|
+ measuringUnit: item.measuringUnit,
|
|
|
+ materielCode: item.materielCode,
|
|
|
+ clientCode: item.clientCode,
|
|
|
+ weight: this.$math.format(
|
|
|
+ item.weight / Number(item.minPackingCount),
|
|
|
+ 14
|
|
|
+ ),
|
|
|
+ initWeight: this.$math.format(
|
|
|
+ item.weight / Number(item.minPackingCount),
|
|
|
+ 14
|
|
|
+ ),
|
|
|
+ weightUnit: item.weightUnit,
|
|
|
+ engrave: item.engrave,
|
|
|
+ result: item.result,
|
|
|
+ status: item.status,
|
|
|
+ isPack: false
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.resultArray = resultArray;
|
|
|
+ // 批量修改包装明细
|
|
|
+ this.isWeight = false;
|
|
|
+ this.bulkEditingWrap();
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.isWeight = true;
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // 包装维度改成编辑状态
|
|
|
+ list.forEach((item) => {
|
|
|
+ item.isPack = false;
|
|
|
+ });
|
|
|
+ // 清空物料维度列表
|
|
|
+ this.resultArray = [];
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //包装明细保存
|
|
|
+ packCout(row) {
|
|
|
+ //true保存==》反之
|
|
|
+ if (!row.isPack) {
|
|
|
+ row.isPack = true;
|
|
|
+ const code = row.assetCode;
|
|
|
+ const batchNo = row.batchNo;
|
|
|
+ //做防护,防止weight字符串类型
|
|
|
+ this.materialCodeReqList.forEach((ele) => {
|
|
|
+ ele.weight = Number(ele.weight);
|
|
|
+ });
|
|
|
+ // 修改产品信息重量(包装维度累计)
|
|
|
+ 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) => {
|
|
|
+ if (curr.isPack) {
|
|
|
+ this.$set(curr, 'initWeight', +curr.weight);
|
|
|
+ return Number(this.$math.format(+acc + +curr.weight, 14));
|
|
|
+ } else {
|
|
|
+ return Number(this.$math.format(+acc + +curr.initWeight, 14));
|
|
|
+ }
|
|
|
+ }, 0);
|
|
|
+ this.$set(item, 'weight', count);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.isWeight = true;
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ row.isPack = false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 批量修改包装明细
|
|
|
+ bulkEditingWrap() {
|
|
|
+ // 批量修改包装明细列表状态(已保存)
|
|
|
+ this.materialCodeReqList.forEach((item) => {
|
|
|
+ item.isPack = true;
|
|
|
+ });
|
|
|
+ // 改变产品明细重量
|
|
|
+ this.warehousingMaterialList.forEach((outItem) => {
|
|
|
+ let arr = [];
|
|
|
+ this.materialCodeReqList.forEach((inneritem) => {
|
|
|
+ if (
|
|
|
+ inneritem.assetCode == outItem.assetCode &&
|
|
|
+ inneritem.batchNo == outItem.batchNo
|
|
|
+ ) {
|
|
|
+ arr.push(inneritem);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ const count = arr.reduce((acc, curr) => {
|
|
|
+ if (curr.isPack) {
|
|
|
+ this.$set(curr, 'initWeight', +curr.weight);
|
|
|
+ return Number(this.$math.format(+acc + +curr.weight, 14));
|
|
|
+ } else {
|
|
|
+ return Number(this.$math.format(+acc + +curr.initWeight, 14));
|
|
|
+ }
|
|
|
+ }, 0);
|
|
|
+ this.$set(outItem, 'weight', count);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 批量修改物料明细
|
|
|
+ bulkEditingMaterial() {
|
|
|
+ // 批量修改物料明细列表状态(已保存)
|
|
|
+ this.resultArray.forEach((item) => {
|
|
|
+ item.isPack = true;
|
|
|
+ });
|
|
|
+ // 改变包装明细重量
|
|
|
+ this.materialCodeReqList.forEach((outItem) => {
|
|
|
+ let arr = [];
|
|
|
+ this.resultArray.forEach((inneritem) => {
|
|
|
+ if (
|
|
|
+ inneritem.assetCode == outItem.assetCode &&
|
|
|
+ inneritem.batchNo == outItem.batchNo
|
|
|
+ ) {
|
|
|
+ arr.push(inneritem);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ const count = arr.reduce((acc, curr) => {
|
|
|
+ if (curr.isPack) {
|
|
|
+ this.$set(curr, 'initWeight', +curr.weight);
|
|
|
+ return Number(this.$math.format(+acc + +curr.weight, 14));
|
|
|
+ } else {
|
|
|
+ return Number(this.$math.format(+acc + +curr.initWeight, 14));
|
|
|
+ }
|
|
|
+ }, 0);
|
|
|
+ this.$set(outItem, 'weight', count);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 物料明细保存
|
|
|
+ materialBtn(row) {
|
|
|
+ console.log(row);
|
|
|
+ console.log(this.resultArray);
|
|
|
+ console.log(this.materialCodeReqList);
|
|
|
+ // true保存 false编辑
|
|
|
+ if (!row.isPack) {
|
|
|
+ row.isPack = true;
|
|
|
+ // 物料维度修改质检改变包装维度质检(结果和状态)
|
|
|
+ this.materialCodeReqList.forEach((outItem) => {
|
|
|
+ let arr = [];
|
|
|
+ this.resultArray.forEach((inneritem) => {
|
|
|
+ if (inneritem.onlyCode == outItem.onlyCode) {
|
|
|
+ arr.push(inneritem);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ console.log(arr);
|
|
|
+ // 首先判断是未填/合格不合格
|
|
|
+ let boolen = arr.every((item) => {
|
|
|
+ return (
|
|
|
+ item.result === '' ||
|
|
|
+ item.result === undefined ||
|
|
|
+ item.result === null
|
|
|
+ );
|
|
|
+ });
|
|
|
+ // 判断只要物料全部质检结果(未填)——>包装质检结果(未填) 状态(未检)
|
|
|
+ if (boolen) {
|
|
|
+ this.$set(outItem, 'result', '');
|
|
|
+ this.$set(outItem, 'status', '0');
|
|
|
+ } else {
|
|
|
+ // 判断只要物料有一个质检结果(不合格)——>包装质检结果(不合格) 状态(已检)
|
|
|
+ let boolen = arr.some((item) => {
|
|
|
+ return item.result === '1';
|
|
|
+ });
|
|
|
+ if (boolen) {
|
|
|
+ this.$set(outItem, 'result', '1');
|
|
|
+ this.$set(outItem, 'status', '1');
|
|
|
+ } else {
|
|
|
+ // 判断只要物料有一个质检结果(让步接收)——>包装质检结果(让步接收) 状态(已检)
|
|
|
+ let boolen = arr.some((item) => {
|
|
|
+ return item.result === '3';
|
|
|
+ });
|
|
|
+ if (boolen) {
|
|
|
+ // 让步接收 已检
|
|
|
+ this.$set(outItem, 'result', '3');
|
|
|
+ this.$set(outItem, 'status', '1');
|
|
|
+ } else {
|
|
|
+ // 判断只要物料有全部质检结果(合格)——>包装质检结果(合格) 状态(已检)
|
|
|
+ let boolen = arr.every((item) => {
|
|
|
+ return item.result === '0';
|
|
|
+ });
|
|
|
+ if (boolen) {
|
|
|
+ // 合格 已检
|
|
|
+ this.$set(outItem, 'result', '0');
|
|
|
+ this.$set(outItem, 'status', '1');
|
|
|
+ } else {
|
|
|
+ // 合格 部分检
|
|
|
+ this.$set(outItem, 'result', '0');
|
|
|
+ this.$set(outItem, 'status', '2');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // this.$set(outItem, 'result', boolen ? '1' : '0');
|
|
|
+ });
|
|
|
+ // 物料维度修改重量改变包装维度重量
|
|
|
+ let onlyCode = row.onlyCode;
|
|
|
+ this.materialCodeReqList.forEach((item) => {
|
|
|
+ if (item.onlyCode === onlyCode) {
|
|
|
+ let arr = [];
|
|
|
+ for (const key in this.resultArray) {
|
|
|
+ if (this.resultArray[key].onlyCode == item.onlyCode) {
|
|
|
+ arr.push(this.resultArray[key]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const count = arr.reduce((acc, curr) => {
|
|
|
+ if (curr.isPack) {
|
|
|
+ this.$set(curr, 'initWeight', +curr.weight);
|
|
|
+ return Number(this.$math.format(+acc + +curr.weight, 14));
|
|
|
+ } else {
|
|
|
+ return Number(this.$math.format(+acc + +curr.initWeight, 14));
|
|
|
+ }
|
|
|
+ }, 0);
|
|
|
+ this.$set(item, 'weight', count);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 包装维度修改重量改变产品信息
|
|
|
+ this.isWeight = false;
|
|
|
+ // 批量修改包装明细
|
|
|
+ this.bulkEditingWrap();
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.isWeight = true;
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ row.isPack = false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 重量计算
|
|
|
+ packNum(row, value) {
|
|
|
+ const total = {
|
|
|
+ packingCount: Number(
|
|
|
+ row.minPackingCount > 0 ? row.minPackingCount : 0
|
|
|
+ ),
|
|
|
+ outInNum: Number(row.outInNum > 0 ? row.outInNum : 0)
|
|
|
+ };
|
|
|
+ if (row.measuringUnit == row.weightUnit) {
|
|
|
+ row.weight = Number(
|
|
|
+ this.$math.format(
|
|
|
+ total.packingCount * 1 * total.outInNum.toFixed(2),
|
|
|
+ 14
|
|
|
+ )
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ const totals = Number(
|
|
|
+ this.$math.format(total.packingCount * total.outInNum, 14)
|
|
|
+ );
|
|
|
+ row.weight = Number(
|
|
|
+ this.$math.format(
|
|
|
+ totals * (row.netWeight > 0 ? row.netWeight.toFixed(2) : 0),
|
|
|
+ 14
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+ return (row.outInNum = value.replace(/^(0+)|[^\d]+/g, ''));
|
|
|
+ },
|
|
|
+ // 根据单据信息初始化产品信息(外部调用)
|
|
|
+ async pickerSuccess(row) {
|
|
|
+ this.formData.bizType = '2';
|
|
|
+ this.codeListValue(row.categoryLevelTopId);
|
|
|
+ this.isTask = true;
|
|
|
+ this.pickerRow = row;
|
|
|
+ this.formData.extInfo.documentSource = row.orderNo;
|
|
|
+ this.formData.sourceBizNo = row.receiveNo;
|
|
|
+ this.formData.fromId = row.id;
|
|
|
+ this.formData.clientName = row.partaName;
|
|
|
+ this.formData.clientCode = row.partaId;
|
|
|
+ this.formData.extInfo.supplierName = row.supplierName;
|
|
|
+ this.formData.extInfo.supplierId = row.supplierId;
|
|
|
+ const data = await getReceiveSaleOrderrecordDetail(row.id);
|
|
|
+ if (this.warehousingMaterialList.length == 0) {
|
|
|
+ let list = data.productList.map((item) => {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ assetName: item.productName,
|
|
|
+ assetCode: item.productCode,
|
|
|
+ categoryId: item.productCategoryId,
|
|
|
+ minPackUnit: item.packingUnit
|
|
|
+ };
|
|
|
+ });
|
|
|
+ this.onSelectTableData(await this.serachMainCode(list));
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async serachMainCode(arr) {
|
|
|
+ let newArr = [];
|
|
|
+ // 使用 Promise.all 来等待所有异步操作完成
|
|
|
+ await Promise.all(
|
|
|
+ arr.map(async (item) => {
|
|
|
+ const data = await getProductList({
|
|
|
+ pageNum: 1,
|
|
|
+ size: 10,
|
|
|
+ categoryLevelId: item.categoryLevelPathIdParent,
|
|
|
+ code: item.assetCode
|
|
|
+ });
|
|
|
+ newArr.push(data.list); // 将结果存储到 newArr 中
|
|
|
+ })
|
|
|
+ );
|
|
|
+ let re = [];
|
|
|
+ for (const item of newArr) {
|
|
|
+ for (const it of item) {
|
|
|
+ re.push(it);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return re.map((item) => {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ minPackUnit: item.packingUnit,
|
|
|
+ assetCode: item.code,
|
|
|
+ assetName: item.name
|
|
|
+ };
|
|
|
+ });
|
|
|
+ },
|
|
|
+ onClear() {
|
|
|
+ this.formData.extInfo.documentSource = '';
|
|
|
+ this.pickerRow = {};
|
|
|
+ this.formData.clientName = '';
|
|
|
+ this.formData.clientCode = '';
|
|
|
+ this.formData.extInfo.supplierName = '';
|
|
|
+ this.formData.extInfo.supplierId = '';
|
|
|
+ this.$forceUpdate();
|
|
|
+ },
|
|
|
+ // 物品类型选择
|
|
|
+ codeListValue(val) {
|
|
|
+ this.formData.extInfo.assetType = val.id || val;
|
|
|
+ this.$forceUpdate();
|
|
|
+ this.title = val?.name;
|
|
|
+ this.selectEquiType = val?.id || val;
|
|
|
+ },
|
|
|
+ //计算金额
|
|
|
+ calcSumTotal(PackingCount, outInNum, univalence) {
|
|
|
+ //最小包装单元,包装数量,单价
|
|
|
+ const total = {
|
|
|
+ PackingCount: Number(PackingCount > 0 ? PackingCount : 0),
|
|
|
+ outInNum: Number(outInNum > 0 ? outInNum : 0),
|
|
|
+ univalence: Number(univalence == undefined ? 0 : univalence)
|
|
|
+ };
|
|
|
+ return total.PackingCount * total.outInNum * total.univalence;
|
|
|
+ },
|
|
|
+ handleRowUnit(row) {
|
|
|
+ return row.measuringUnit;
|
|
|
+ },
|
|
|
+ rowClass({ row, column, rowIndex, columnIndex }) {
|
|
|
+ if (rowIndex === 1) {
|
|
|
+ return {
|
|
|
+ display: 'none',
|
|
|
+ background: '#EEEEEE',
|
|
|
+ border: 'none'
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return { background: '#EEEEEE', border: 'none' };
|
|
|
+ },
|
|
|
+ // 仓库编辑
|
|
|
+ handleWareHouse(row, idx) {
|
|
|
+ this.$refs.wareHouseDailogRef.open(row, idx);
|
|
|
+ },
|
|
|
+ // 入库操作
|
|
|
+ listEdit(row) {
|
|
|
+ this.$set(row, 'isSave', false);
|
|
|
+ row.selfWarehouseLedgerDetails = row.warehouseLedgerDetails;
|
|
|
+ row.warehouseLedgerDetails = [];
|
|
|
+ // 重置重量
|
|
|
+ this.packNum(row, row.outInNum);
|
|
|
+ // 清空物料明细防止数据错乱
|
|
|
+ if (this.isSplit && this.resultArray?.length > 0) {
|
|
|
+ this.handleIsDetail(false);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 产品单个保存
|
|
|
+ listSave(row, index) {
|
|
|
+ // 清空物料明细防止数据错乱
|
|
|
+ if (this.isSplit && this.resultArray?.length > 0) {
|
|
|
+ this.handleIsDetail(false);
|
|
|
+ }
|
|
|
+ const fileds = [
|
|
|
+ // `warehousingMaterialList.${index}.cargoSpaceCode`,
|
|
|
+ `warehousingMaterialList.${index}.batchNo`,
|
|
|
+ `warehousingMaterialList.${index}.houseList`
|
|
|
+ ];
|
|
|
+ if (this.formData.bizType == 1) {
|
|
|
+ // fileds.push(...[`warehousingMaterialList.${index}.customCode`]);
|
|
|
+ } else if (this.formData.bizType == 2) {
|
|
|
+ // fileds.push(...[`warehousingMaterialList.${index}.supplierCode`]);
|
|
|
+ }
|
|
|
+ if (this.formData.bizType != 5) {
|
|
|
+ fileds.push(
|
|
|
+ ...[
|
|
|
+ `warehousingMaterialList.${index}.outInNum`,
|
|
|
+ `warehousingMaterialList.${index}.minPackingCount`
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ } else if (
|
|
|
+ this.warehousingMaterialList.some(
|
|
|
+ (i) => !i.selfWarehouseLedgerDetails?.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);
|
|
|
+ this.createMaterialCode(row);
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ this.$message.error('请填入必填项!');
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 产品批量保存
|
|
|
+ listSaveArrs() {
|
|
|
+ // 已经拆分(还原到未拆封编辑状态)
|
|
|
+ if (this.isSplit && this.resultArray.length > 0) {
|
|
|
+ this.handleIsDetail(false);
|
|
|
+ }
|
|
|
+ const rows = this.warehousingMaterialList;
|
|
|
+ const indexes = Array.from(
|
|
|
+ { length: this.warehousingMaterialList.length },
|
|
|
+ (_, index) => index
|
|
|
+ );
|
|
|
+ let showMessage = true;
|
|
|
+ rows.forEach((row, i) => {
|
|
|
+ const index = indexes[i];
|
|
|
+ const fileds = [
|
|
|
+ // `warehousingMaterialList.${index}.cargoSpaceCode`,
|
|
|
+ `warehousingMaterialList.${index}.batchNo`,
|
|
|
+ `warehousingMaterialList.${index}.houseList`
|
|
|
+ ];
|
|
|
+ if (this.formData.bizType == 1) {
|
|
|
+ // fileds.push(...[`warehousingMaterialList.${index}.customCode`]);
|
|
|
+ } else if (this.formData.bizType == 2) {
|
|
|
+ // fileds.push(...[`warehousingMaterialList.${index}.supplierCode`]);
|
|
|
+ }
|
|
|
+ if (this.formData.bizType != 5) {
|
|
|
+ fileds.push(
|
|
|
+ ...[
|
|
|
+ `warehousingMaterialList.${index}.outInNum`,
|
|
|
+ `warehousingMaterialList.${index}.minPackingCount`
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ } else if (
|
|
|
+ this.warehousingMaterialList.some(
|
|
|
+ (i) => !i.selfWarehouseLedgerDetails?.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);
|
|
|
+ this.createMaterialCode(row);
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ if (showMessage) {
|
|
|
+ showMessage = false;
|
|
|
+ this.$message.error('请填入必填项!');
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 批量设置生产日期
|
|
|
+ handleSelectionChange(val) {
|
|
|
+ this.materialCodeReqListSelected = val;
|
|
|
+ },
|
|
|
+ dateSetting() {
|
|
|
+ if (!this.materialCodeReqListSelected.length) {
|
|
|
+ return this.$message.error(`请选择${this.title}明细!`);
|
|
|
+ }
|
|
|
+ this.dateVisible = true;
|
|
|
+ },
|
|
|
+ dateConfirm() {
|
|
|
+ this.materialCodeReqListSelected.forEach((item) => {
|
|
|
+ this.$set(item, this.curDateType, this.batchTime);
|
|
|
+ });
|
|
|
+ this.dateVisible = false;
|
|
|
+ },
|
|
|
+ //入库明细删除
|
|
|
+ listDel(row, index) {
|
|
|
+ this.warehousingMaterialList.splice(index, 1);
|
|
|
+ if (this.isSplit && this.resultArray?.length > 0) {
|
|
|
+ this.handleIsDetail(false);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 入库明细生成条码信息
|
|
|
+ async createMaterialCode(row) {
|
|
|
+ // 添加相同物品、批次号重新更新明细 原料编码
|
|
|
+ const list = this.warehousingMaterialList.filter(
|
|
|
+ (i) =>
|
|
|
+ i.assetCode === row.assetCode &&
|
|
|
+ i.batchNo === row.batchNo &&
|
|
|
+ i.isSave
|
|
|
+ );
|
|
|
+ const num = list.reduce((num, pre) => {
|
|
|
+ num += row.isUnpack
|
|
|
+ ? pre.outInNum * pre.minPackingCount
|
|
|
+ : pre.outInNum - 0;
|
|
|
+ return num;
|
|
|
+ }, 0);
|
|
|
+
|
|
|
+ const nums = list.reduce((num, pre) => {
|
|
|
+ num += pre.outInNum * pre.minPackingCount;
|
|
|
+
|
|
|
+ return num;
|
|
|
+ }, 0);
|
|
|
+
|
|
|
+ const res = await outin.getAssetNum({
|
|
|
+ assetCode: row.assetCode,
|
|
|
+ batchNum: row.batchNo,
|
|
|
+ num: num
|
|
|
+ });
|
|
|
+ // row.measuringUnit == 'PCS' ? nums :
|
|
|
+
|
|
|
+ list.forEach((item) => {
|
|
|
+ if (item.warehouseLedgerDetails?.length) {
|
|
|
+ item.warehouseLedgerDetails.forEach((i) => {
|
|
|
+ i.onlyCode = res.shift().onlyCode;
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.$set(
|
|
|
+ item,
|
|
|
+ 'warehouseLedgerDetails',
|
|
|
+ Array.from(
|
|
|
+ new Array(
|
|
|
+ item.isUnpack
|
|
|
+ ? item.outInNum * item.minPackingCount
|
|
|
+ : // : item.measuringUnit == 'PCS'
|
|
|
+ // ? +item.outInNum * parseInt(item.minPackingCount)
|
|
|
+ +item.outInNum
|
|
|
+ ),
|
|
|
+ (val, idx) => {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ onlyCode: res.shift().onlyCode,
|
|
|
+ bizStatus: 1,
|
|
|
+ contentImage: []
|
|
|
+ };
|
|
|
+ }
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 添加相同物品,重复批次号 重新更新明细 包装编码
|
|
|
+ const batchList = this.warehousingMaterialList.filter(
|
|
|
+ (i) => i.batchNo === row.batchNo && i.isSave
|
|
|
+ );
|
|
|
+ if (batchList.length) {
|
|
|
+ const num = batchList.reduce((num, pre) => {
|
|
|
+ num += +pre.outInNum;
|
|
|
+ return num;
|
|
|
+ }, 0);
|
|
|
+ const res1 = await outin.getAssetNum({
|
|
|
+ batchNum: row.batchNo,
|
|
|
+ num
|
|
|
+ });
|
|
|
+ if (res1) {
|
|
|
+ batchList.forEach((item) => {
|
|
|
+ let num = res1.shift()?.num;
|
|
|
+ let minPackingCount = item.minPackingCount;
|
|
|
+ if (item.warehouseLedgerDetails?.length) {
|
|
|
+ item.warehouseLedgerDetails.forEach((i, index) => {
|
|
|
+ this.$set(i, 'num', num);
|
|
|
+ if (row.code == i.code) {
|
|
|
+ if (item.measuringUnit == item.weightUnit) {
|
|
|
+ this.$set(i, 'weight', item.minPackingCount);
|
|
|
+ this.$set(i, 'initWeight', item.minPackingCount);
|
|
|
+ } else {
|
|
|
+ this.$set(
|
|
|
+ i,
|
|
|
+ 'weight',
|
|
|
+ Number(
|
|
|
+ this.$math.format(
|
|
|
+ 1 * item.minPackingCount * item.netWeight,
|
|
|
+ 14
|
|
|
+ )
|
|
|
+ )
|
|
|
+ );
|
|
|
+ this.$set(
|
|
|
+ i,
|
|
|
+ 'initWeight',
|
|
|
+ Number(
|
|
|
+ this.$math.format(
|
|
|
+ 1 * item.minPackingCount * item.netWeight,
|
|
|
+ 14
|
|
|
+ )
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.$set(i, 'weightUtil', item.weightUnit);
|
|
|
+
|
|
|
+ this.$set(i, 'packingCount', 1);
|
|
|
+ this.$set(i, 'packingUnit ', item.packingUnit);
|
|
|
+ this.$set(i, 'minPackingCount ', item.minPackingCount);
|
|
|
+ this.$set(i, 'measuringUnit', item.measuringUnit);
|
|
|
+ this.$set(i, 'isPack', false);
|
|
|
+ console.log('inboundType------------', this.inboundType);
|
|
|
+ if (this.inboundType == '1') {
|
|
|
+ // 生产性采购(未检)
|
|
|
+ this.$set(i, 'result', '');
|
|
|
+ this.$set(i, 'status', '0');
|
|
|
+ } else {
|
|
|
+ // 非生产性采购(已检合格)
|
|
|
+ this.$set(i, 'result', '0');
|
|
|
+ this.$set(i, 'status', '1');
|
|
|
+ }
|
|
|
+ if (!item.isUnpack) {
|
|
|
+ if (index < item.warehouseLedgerDetails.length - 1) {
|
|
|
+ num = res1.shift()?.num;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 拆包的包装编码一致
|
|
|
+ minPackingCount--;
|
|
|
+ if (
|
|
|
+ minPackingCount === 0 &&
|
|
|
+ index < item.warehouseLedgerDetails.length - 1
|
|
|
+ ) {
|
|
|
+ minPackingCount = item.minPackingCount;
|
|
|
+ num = res1.shift()?.num;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 包装批量保存
|
|
|
+ wrapListSave() {
|
|
|
+ // 批量修改包装明细
|
|
|
+ this.isWeight = false;
|
|
|
+ this.bulkEditingWrap();
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.isWeight = true;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 物料批量保存
|
|
|
+ materialListSave() {
|
|
|
+ this.resultArray.forEach((item) => {
|
|
|
+ if (!item.isPack) {
|
|
|
+ this.materialBtn(item);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 外部调用获取入库数据
|
|
|
+ getReturnStorage() {
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ this.$refs.formName.validate(async (valid) => {
|
|
|
+ if (valid) {
|
|
|
+ if (!this.warehousingMaterialList?.length) {
|
|
|
+ return this.$message.error('请添加入库明细!');
|
|
|
+ } else if (
|
|
|
+ this.warehousingMaterialList.some((item) => !item.isSave)
|
|
|
+ ) {
|
|
|
+ return this.$message.error('请保存入库明细!');
|
|
|
+ }
|
|
|
+ // 默认全部保存
|
|
|
+ if (this.resultArray?.length > 0) {
|
|
|
+ // 物料批量保存
|
|
|
+ this.materialListSave();
|
|
|
+ } else {
|
|
|
+ // 包装批量保存
|
|
|
+ this.wrapListSave();
|
|
|
+ }
|
|
|
+ this.formatWarehouseMaterialList();
|
|
|
+
|
|
|
+ let arr = this.warehousingMaterialList.map((item) => {
|
|
|
+ console.log(item, 'item');
|
|
|
+ return {
|
|
|
+ netWeight: item.netWeight,
|
|
|
+ num: item.num,
|
|
|
+ batchNo: item.batchNo,
|
|
|
+ code: item.productCode,
|
|
|
+ categoryId:
|
|
|
+ this.formData.bizType == 2
|
|
|
+ ? item.categoryId
|
|
|
+ ? item.categoryId
|
|
|
+ : item.id
|
|
|
+ : item.id,
|
|
|
+ count:
|
|
|
+ parseInt(item.outInNum) * parseInt(item.minPackingCount),
|
|
|
+ minPackingCount: item.minPackingCount,
|
|
|
+ packingCount: item.outInNum,
|
|
|
+ price: item.univalence,
|
|
|
+ outInDetailRecordAddPOList: item.warehouseLedgerDetails,
|
|
|
+ position: `${item.warehouseName}-${item.areaName}-${item.shelfCode}-${item.cargoSpaceCode}`,
|
|
|
+ remark: '',
|
|
|
+ pathIds: `${item.warehouseId},${item.areaId},${item.shelfId},${item.cargoSpaceId}`,
|
|
|
+ pathName: `${item.warehouseName},${item.areaName},${item.shelfCode},${item.cargoSpaceCode}`,
|
|
|
+ totalMoney:
|
|
|
+ item.outInNum * item.minPackingCount * item.univalence,
|
|
|
+ weightUnit: item.weightUnit,
|
|
|
+ customCode: item.customCode,
|
|
|
+ supplierCode: item.supplierCode,
|
|
|
+ weight: item.weight,
|
|
|
+ houseList: [
|
|
|
+ `${item.warehouseName},${item.areaName},${item.shelfCode},${item.cargoSpaceCode}`
|
|
|
+ ]
|
|
|
+ };
|
|
|
+ });
|
|
|
+ arr.forEach((item) => {
|
|
|
+ if (item.outInDetailRecordAddPOList.length > 0) {
|
|
|
+ let list = item.outInDetailRecordAddPOList.map((it) => {
|
|
|
+ return this.formatOutInDetailRecordAddPO(it, item);
|
|
|
+ });
|
|
|
+ item.outInDetailRecordAddPOList = list;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ let obj = { ...this.formData, type: 1 };
|
|
|
+ obj.outInDetailAddPOList = arr;
|
|
|
+ resolve(obj);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 格式化产品信息入库数据
|
|
|
+ formatWarehouseMaterialList() {
|
|
|
+ for (let key in this.warehousingMaterialList) {
|
|
|
+ for (let k in this.warehousingMaterialList[key].houseList) {
|
|
|
+ let house = this.warehousingMaterialList[key].houseList[k];
|
|
|
+ this.warehousingMaterialList[key].warehouseName =
|
|
|
+ house.warehouseName;
|
|
|
+ this.warehousingMaterialList[key].areaName = house.areaName;
|
|
|
+ this.warehousingMaterialList[key].shelfCode = house.shelfCode;
|
|
|
+ this.warehousingMaterialList[key].cargoSpaceCode =
|
|
|
+ house.cargoSpaceCode;
|
|
|
+ this.warehousingMaterialList[key].warehouseId = house.warehouseId;
|
|
|
+ this.warehousingMaterialList[key].areaId = house.areaId;
|
|
|
+ this.warehousingMaterialList[key].shelfId = house.shelfId;
|
|
|
+ this.warehousingMaterialList[key].cargoSpaceId = house.cargoSpaceId;
|
|
|
+ this.warehousingMaterialList[key].num = house.num;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 格式化包装明细入库数据
|
|
|
+ formatOutInDetailRecordAddPO(it, item) {
|
|
|
+ return {
|
|
|
+ code: it.onlyCode,
|
|
|
+ dateType: this.curDateType === 'manufactureTime' ? 2 : 1,
|
|
|
+ dateValue: it[this.curDateType],
|
|
|
+ minUnit: it.minPackingCount,
|
|
|
+ minPositionId: it.cargoSpaceId,
|
|
|
+ minPackingCount: it.minPackingCount,
|
|
|
+ name: it.assetName,
|
|
|
+ pathIds: item.pathIds,
|
|
|
+ unit: it.unit,
|
|
|
+ packageNo: it.num,
|
|
|
+ clientCode: it.clientCode,
|
|
|
+ materielCode: it.materielCode,
|
|
|
+ weight: it.weight,
|
|
|
+ weightUtil: it.weightUtil,
|
|
|
+ engrave: it.engrave,
|
|
|
+ materialDetails: this.materialDetails(it.onlyCode),
|
|
|
+ packingCount: it.packingCount,
|
|
|
+ status: it.status,
|
|
|
+ result: it.result
|
|
|
+ };
|
|
|
+ },
|
|
|
+ // 过滤物料明细入库数据
|
|
|
+ materialDetails(onlyCode) {
|
|
|
+ return this.resultArray.filter((item) => item.onlyCode === onlyCode);
|
|
|
+ },
|
|
|
+ // 添加物品明细
|
|
|
+ addProduct(val) {
|
|
|
+ // 已经拆分(还原到未拆封编辑状态)
|
|
|
+ if (this.isSplit && this.resultArray.length > 0) {
|
|
|
+ this.handleIsDetail(false);
|
|
|
+ }
|
|
|
+ this.onSelectTableData(val);
|
|
|
+ },
|
|
|
+ //添加产品明细
|
|
|
+ async onSelectTableData(val) {
|
|
|
+ const res = await getCode('lot_number_code');
|
|
|
+ this.warehousingMaterialList.push(
|
|
|
+ ...val.map((next) => {
|
|
|
+ next.batchNo = res;
|
|
|
+ let cur = {};
|
|
|
+ next.realInventoryAmount = next.realInventoryAmount || 0;
|
|
|
+ cur = {
|
|
|
+ ...next,
|
|
|
+ cargoSpaceCode: '', //货位编码
|
|
|
+ cargoSpaceId: '', //货位id
|
|
|
+ shelfId: '', //货架id
|
|
|
+ shelfCode: '', //货架名称
|
|
|
+ areaId: '', //库区id
|
|
|
+ areaName: '', //库区名称
|
|
|
+ warehouseId: '', //仓库id
|
|
|
+ warehouseName: '', //仓库名称
|
|
|
+ assetType: this.formData.extInfo.assetType,
|
|
|
+ expirationDate: '',
|
|
|
+ outInNum: '',
|
|
|
+ minPackingCount: '',
|
|
|
+ bizStatus: 1,
|
|
|
+ contentImage: [],
|
|
|
+ warehouseLedgerDetails: [],
|
|
|
+ houseList: []
|
|
|
+ };
|
|
|
+ return cur;
|
|
|
+ })
|
|
|
+ );
|
|
|
+ },
|
|
|
+ // 初始化其他相关字段
|
|
|
+ async initData() {
|
|
|
+ const res = await warehouseDefinition.tree();
|
|
|
+ const info = await getLoginUser();
|
|
|
+ let obj = res.find(
|
|
|
+ (item) => item.id === info.deptId[info.deptId.length - 1]
|
|
|
+ );
|
|
|
+ if (!obj) return;
|
|
|
+ this.formData.extInfo.deptCode = obj.id;
|
|
|
+ this.formData.extInfo.deptName = obj.name;
|
|
|
+ this.formData.extInfo.createUserName = info.name;
|
|
|
+ this.formData.createUserId = info.id;
|
|
|
+ },
|
|
|
+ // 添加产品信息
|
|
|
+ addStock() {
|
|
|
+ if (!this.title) {
|
|
|
+ return this.$message.error('请选择入库产品类型');
|
|
|
+ }
|
|
|
+ if (!this.formData.bizType) {
|
|
|
+ return this.$message.error('请选择入库场景');
|
|
|
+ }
|
|
|
+ this.visibleDialog = true;
|
|
|
+ },
|
|
|
+ upload(data) {
|
|
|
+ this.formData.contentImage = data;
|
|
|
+ this.$refs.formName.validateField('contentImage');
|
|
|
+ },
|
|
|
+ houseData(argum, idx) {
|
|
|
+ this.$set(this.warehousingMaterialList[idx], 'houseList', argum);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ // 解决右侧悬浮操作栏不对称问题
|
|
|
+ warehousingMaterialList: {
|
|
|
+ handler() {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.warehousingMaterialListTable?.doLayout();
|
|
|
+ });
|
|
|
+ },
|
|
|
+ deep: true
|
|
|
+ },
|
|
|
+ // 解决右侧悬浮操作栏不对称问题
|
|
|
+ materialCodeReqList: {
|
|
|
+ handler() {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.materialCodeReqListTable?.doLayout();
|
|
|
+ });
|
|
|
+ },
|
|
|
+ deep: true
|
|
|
+ },
|
|
|
+ // 解决右侧悬浮操作栏不对称问题
|
|
|
+ resultArray: {
|
|
|
+ handler() {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.resultArrayTable?.doLayout();
|
|
|
+ });
|
|
|
+ },
|
|
|
+ deep: true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+ ::v-deep.form-table {
|
|
|
+ .el-form-item {
|
|
|
+ margin-bottom: 0;
|
|
|
+ }
|
|
|
+ .el-input__inner {
|
|
|
+ padding: 0 10px;
|
|
|
+ }
|
|
|
+ ::-webkit-scrollbar {
|
|
|
+ width: 8px;
|
|
|
+ height: 8px;
|
|
|
+ background-color: transparent;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .p20 {
|
|
|
+ padding: 20px;
|
|
|
+ }
|
|
|
+ .el-select,
|
|
|
+ .el-date-editor {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+ .el-form-item {
|
|
|
+ margin-bottom: 22px;
|
|
|
+ }
|
|
|
+ .material {
|
|
|
+ margin-top: 20px;
|
|
|
+ .flex {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ font-size: 14px;
|
|
|
+ align-items: center;
|
|
|
+ .red {
|
|
|
+ color: #ff4949;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .mt10 {
|
|
|
+ margin-top: 10px;
|
|
|
+ }
|
|
|
+ .mt20 {
|
|
|
+ margin-top: 20px;
|
|
|
+ }
|
|
|
+ .center {
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .switch_left li {
|
|
|
+ border-right: 1px solid rgba(222, 222, 222, 1);
|
|
|
+ border-left: 1px solid rgba(222, 222, 222, 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ .fontOmitted {
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ overflow: hidden;
|
|
|
+ word-break: break-all;
|
|
|
+ white-space: nowrap;
|
|
|
+ }
|
|
|
+ .table-fixed {
|
|
|
+ .el-table__fixed-right {
|
|
|
+ height: 100% !important;
|
|
|
+ }
|
|
|
+ .el-table__fixed-left {
|
|
|
+ height: 100% !important;
|
|
|
+ }
|
|
|
+ .el-table__fixed {
|
|
|
+ height: 100% !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+</style>
|