You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
465 lines
16 KiB
465 lines
16 KiB
<script>
|
|
import {
|
|
printShipmentBox,
|
|
removeShipmentBox,
|
|
updateShipmentBox,
|
|
updateShipmentBoxStatus
|
|
} from '../../../../api/shipment/box'
|
|
import {
|
|
getShipmentRollAllData,
|
|
getShipmentRollDataList, printShipmentRoll,
|
|
removeShipmentRollData,
|
|
saveShipmentRollData
|
|
} from '../../../../api/shipment/roll'
|
|
|
|
import {printShipmentInnerLabel} from '../../label/print_shipment_inner_label'
|
|
import {printShipmentBoxLabel} from '../../label/print_shipment_box_label'
|
|
import {getWareHouseList} from '../../../../api/material/poReceive'
|
|
import {getLocationListForSearch} from '../../../../api/base/normalSearch'
|
|
import {endShipment} from '../../../../api/shipment'
|
|
import dayjs from 'dayjs'
|
|
|
|
export default {
|
|
name: 'shipmentBox',
|
|
props:{
|
|
height:{
|
|
type:Number,
|
|
default:300
|
|
},
|
|
dataList:{
|
|
type:Array,
|
|
default:()=>[]
|
|
},
|
|
shipment:{
|
|
type:Object,
|
|
default:()=>{}
|
|
}
|
|
},
|
|
data(){
|
|
return {
|
|
open:false,
|
|
endOpen:false,
|
|
form:{},
|
|
endForm:{
|
|
warehouseId:'',
|
|
locationId:'',
|
|
shipmentDate:'',
|
|
},
|
|
rollDataList:[],
|
|
endDataList:[],
|
|
warehouseList:[],
|
|
locationList:[],
|
|
rules:{
|
|
warehouseId:[{required:true,message:'请选择仓库',trigger:'change'}],
|
|
locationId:[{required:true,message:'请选择库位',trigger:'change'}],
|
|
shipmentDate:[{required:true,message:'请选择出库日期',trigger:'change'}],
|
|
},
|
|
}
|
|
},
|
|
methods:{
|
|
handleAddBox(){
|
|
this.$emit('add',)
|
|
},
|
|
handleScanRoll(row){
|
|
this.form = {...row}
|
|
this.$nextTick(()=>{
|
|
this.$refs.inputRollNo.focus()
|
|
})
|
|
this.getDataList();
|
|
this.open = true;
|
|
},
|
|
getDataList(){
|
|
let params = {
|
|
...this.form
|
|
}
|
|
getShipmentRollDataList(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.rollDataList = data.rows
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
handleUpdateBoxStatus(row,status){
|
|
let params = {
|
|
...row
|
|
}
|
|
updateShipmentBoxStatus(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.$message.success(data.msg)
|
|
if (status === 0){
|
|
this.handlePrint(row)
|
|
}
|
|
this.$emit('refresh')
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
handleRemoveBox(row){
|
|
this.$confirm('确定要删除这条数据?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(()=>{
|
|
removeShipmentBox(row).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.$emit('refresh')
|
|
this.$message.success(data.msg)
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
})
|
|
},
|
|
handleRollScan(e){
|
|
let val = e.target.value.trim();
|
|
if (!val){
|
|
this.$message.warning('请输入条码')
|
|
this.form.rollNo = ''
|
|
return
|
|
}
|
|
let scanRow = val.split('|')
|
|
if (scanRow.length < 4){
|
|
this.$message.warning("二维码格式有误!")
|
|
return
|
|
}
|
|
let params = {
|
|
...this.form,
|
|
id:null,
|
|
rollNo:scanRow[3],
|
|
createBy:this.$store.state.user.name,
|
|
}
|
|
saveShipmentRollData(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.$emit('refresh')
|
|
this.$message.success(data.msg)
|
|
// 查询 roll
|
|
this.getDataList();
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
this.form.rollNo = ''
|
|
}).catch((error)=>{
|
|
this.form.rollNo = ''
|
|
this.$message.error(error)
|
|
})
|
|
|
|
},
|
|
handleGetRollDataList(row){
|
|
this.form = {
|
|
...row,
|
|
openDetail:true,
|
|
}
|
|
this.getDataList();
|
|
this.open = true;
|
|
},
|
|
handleRollRemove(row){
|
|
this.$confirm('确定要删除这条数据?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(()=>{
|
|
removeShipmentRollData(row).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.$emit('refresh')
|
|
this.getDataList();
|
|
this.$message.success(data.msg)
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
})
|
|
},
|
|
handleEndBox(){
|
|
this.endForm = {
|
|
warehouseId:'',
|
|
locationId:'',
|
|
shipmentDate:'',
|
|
}
|
|
this.getRecordData();
|
|
this.getWareHouseList();
|
|
},
|
|
getRecordData(){
|
|
if (this.dataList.length === 0){
|
|
this.$message.warning('未新增箱子')
|
|
return
|
|
}
|
|
let params = {
|
|
...this.shipment,
|
|
}
|
|
getShipmentRollAllData(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.endDataList = data.rows
|
|
this.endOpen = true;
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
endShipment(){
|
|
this.$refs.endForm.validate((valid,obj) => {
|
|
if (valid) {
|
|
let params = {
|
|
...this.endForm,
|
|
site:this.shipment.site,
|
|
shipmentId:this.shipment.shipmentId,
|
|
}
|
|
endShipment(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.endOpen = false;
|
|
this.$emit('end')
|
|
this.$message.success(data.msg)
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
}else {
|
|
let i = 0;
|
|
Object.keys(obj).forEach(key => {
|
|
if (i === 0){
|
|
this.$message.warning(obj[key][0].message)
|
|
return
|
|
}
|
|
i++;
|
|
})
|
|
}
|
|
})
|
|
},
|
|
getWareHouseList(){
|
|
let params = {
|
|
site:this.$store.state.user.site
|
|
}
|
|
getWareHouseList(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.warehouseList = data.rows
|
|
if (this.warehouseList.length > 0){
|
|
this.endForm.warehouseId = this.warehouseList[0].wareHouseId
|
|
}
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
getLocationListForSearch(){
|
|
let params={
|
|
site:this.$store.state.user.site,
|
|
warehouseId:this.endForm.warehouseId,
|
|
active:'Y'
|
|
}
|
|
this.locationList = []
|
|
getLocationListForSearch(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.locationList = data.rows
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
handlePrint(row){
|
|
this.printBoxLabel(row);
|
|
},
|
|
printBoxLabel(row){
|
|
printShipmentBox(row).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
let arr = data.rows.map((item)=>{
|
|
item.printType = 'boxLabel'
|
|
item.productionDate = `${dayjs(item.productionDate).format("YYYYMMDD")}`
|
|
item.shipDate = `${dayjs(item.shipDate).format("YYYY-MM-DD")}`
|
|
item.boxNo = `${dayjs(row.createDate).format("YYMMDDHHmmss")}${(row.boxNo+'').padStart(3,'0')}`
|
|
return item
|
|
})
|
|
// printShipmentBoxLabel(arr);
|
|
this.printRollLabel(row,arr);
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
printRollLabel(row,packList){
|
|
printShipmentRoll(row).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
let arr = [...packList];
|
|
let arrs = data.rows.map(item=>{
|
|
item.printType = 'innerBoxLabel'
|
|
item.productionDate = `${dayjs(item.productionDate).format("YYYYMMDD")}`
|
|
return item
|
|
})
|
|
for (let i = 0; i < arrs.length; i++) {
|
|
arr.push(arrs[i])
|
|
}
|
|
printShipmentBoxLabel(arr);
|
|
// printShipmentInnerLabel(arr);
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
}
|
|
},
|
|
watch:{
|
|
"endForm.warehouseId"(newVal,oldVal){
|
|
if (newVal && newVal !== oldVal){
|
|
this.endForm.locationId = '';
|
|
this.getLocationListForSearch()
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<div style="display: flex;justify-content: space-between;">
|
|
<div><el-button type="primary" @click="handleAddBox">新增箱子</el-button></div>
|
|
<div><el-button type="primary" @click="handleEndBox">最终出库</el-button></div>
|
|
</div>
|
|
<el-table :data="dataList" style="width: 100%" border :height="height">
|
|
<el-table-column prop="boxNoStr" label="箱号" width="200" header-align="center" align="left"></el-table-column>
|
|
<el-table-column prop="partNo" label="物料编码" width="100" header-align="center" align="left"></el-table-column>
|
|
<el-table-column prop="status" label="状态" width="100" header-align="center" align="center"></el-table-column>
|
|
<el-table-column prop="createBy" label="录入人" width="100" header-align="center" align="left"></el-table-column>
|
|
<el-table-column prop="createDate" label="录入时间" width="200" header-align="center" align="center"></el-table-column>
|
|
<el-table-column align="center" label="操作">
|
|
<template slot-scope="scope">
|
|
<el-link @click="handleScanRoll(scope.row)" v-if="scope.row.status==='未封箱'">扫描</el-link>
|
|
<el-link v-if="scope.row.status==='未封箱'" @click="handleUpdateBoxStatus(scope.row,0)">封箱</el-link>
|
|
<el-link v-if="scope.row.status==='已封箱'" @click="handleUpdateBoxStatus(scope.row,1)">解封箱</el-link>
|
|
<el-link v-if="scope.row.status==='未封箱'" @click="handleRemoveBox(scope.row)">删除</el-link>
|
|
<el-link @click="handleGetRollDataList(scope.row)">查看</el-link>
|
|
<el-link v-if="scope.row.status==='已封箱'" @click="handlePrint(scope.row)">补打</el-link>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
|
|
<el-dialog title="扫描" :visible.sync="open" v-drag :close-on-click-modal="false" append-to-body width="1000px">
|
|
<el-form :model="form" label-width="100px" label-position="top" >
|
|
<el-row :gutter="10">
|
|
<el-col :span="4">
|
|
<el-form-item label="发货ID">
|
|
<el-input v-model="form.shipmentId" disabled></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="箱号">
|
|
<el-input v-model="form.boxNoStr" disabled></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="装箱数量">
|
|
<el-input-number :controls="false" style="width: 100%" :value="rollDataList.length" disabled></el-input-number>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row :gutter="10">
|
|
<el-col :span="12">
|
|
<el-form-item label="请扫描">
|
|
<el-input v-model="form.rollNo" :disabled="form.openDetail" ref="inputRollNo" @keyup.enter.native="handleRollScan" placeholder="请输入扫描的条码"></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="24">
|
|
<el-form-item label="已扫描列表">
|
|
<el-table :data="rollDataList" border :height="200">
|
|
<el-table-column width="60" label="操作" align="center" v-if="!form.openDetail">
|
|
<template slot-scope="scope">
|
|
<el-link @click="handleRollRemove(scope.row)">删除</el-link>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="partNo" width="100" header-align="center" label="物料编码"></el-table-column>
|
|
<el-table-column prop="partDesc" width="200" header-align="center" label="物料名称"></el-table-column>
|
|
<el-table-column prop="rollNo" width="100" header-align="center" label="卷号"></el-table-column>
|
|
<el-table-column prop="rollQty" width="60" header-align="center" align="right" label="数量"></el-table-column>
|
|
<el-table-column prop="batchNo" width="60" header-align="center" label="批号"></el-table-column>
|
|
<el-table-column prop="ref" width="60" header-align="center" align="left" label="WD"></el-table-column>
|
|
<el-table-column prop="manufacturerTime" width="150" header-align="center" align="center" label="生产日期"></el-table-column>
|
|
<el-table-column prop="expirationDate" width="150" header-align="center" align="center" label="失效日期"></el-table-column>
|
|
<el-table-column prop="locationId" width="100" header-align="center" align="center" label="库位"></el-table-column>
|
|
<el-table-column prop="createBy" width="100" header-align="center" label="Created By"></el-table-column>
|
|
<el-table-column prop="createTime" width="150" header-align="center" align="center" label="Created Time"></el-table-column>
|
|
</el-table>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
<el-footer style="height: 20px"></el-footer>
|
|
</el-dialog>
|
|
|
|
<el-dialog title="最终出库" :visible.sync="endOpen" v-drag :close-on-click-modal="false" append-to-body width="800px">
|
|
<el-form :model="endForm" :rules="rules" ref="endForm" label-width="100px" label-position="top" >
|
|
<el-row :gutter="10">
|
|
<el-col :span="4">
|
|
<el-form-item label="仓库" prop="warehouseId" :show-message="false">
|
|
<el-select v-model="endForm.warehouseId" style="width: 100%;">
|
|
<el-option :value="i.wareHouseId" :label="i.wareHouseName" v-for="i in warehouseList" :key="i.menuId"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="库位" prop="locationId" :show-message="false">
|
|
<el-select v-model="endForm.locationId" style="width: 100%;">
|
|
<el-option :value="i.locationId" :label="i.locationName" v-for="i in locationList" :key="i.locationId"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="出库日期" prop="shipmentDate" :show-message="false">
|
|
<el-date-picker
|
|
style="width: 100%"
|
|
v-model="endForm.shipmentDate"
|
|
type="date"
|
|
value-format="yyyy-MM-dd"
|
|
placeholder="选择日期">
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4" :offset="8">
|
|
<el-form-item label=" ">
|
|
<div style="float: right;"><el-button type="primary" @click="endShipment">最终出库</el-button></div>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row :gutter="10">
|
|
<el-col :span="24">
|
|
<el-form-item label="已扫描信息汇总">
|
|
<el-table :data="endDataList" border :height="200">
|
|
<el-table-column prop="partNo" min-width="100" header-align="center" label="物料编码"></el-table-column>
|
|
<el-table-column prop="partDesc" min-width="200" header-align="center" label="物料描述"></el-table-column>
|
|
<el-table-column prop="total" min-width="100" header-align="center" align="right" label="总数量"></el-table-column>
|
|
<el-table-column prop="totalBox" min-width="100" header-align="center" align="right" label="总箱数"></el-table-column>
|
|
<el-table-column prop="totalRoll" min-width="100" header-align="center" align="right" label="总卷数"></el-table-column>
|
|
</el-table>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
<el-footer style="height: 20px"></el-footer>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
|
|
/deep/ .el-form-item--medium .el-form-item__content{
|
|
height: auto;
|
|
}
|
|
</style>
|