Browse Source

24-03-07 出库检验

master
zelian_wu 2 years ago
parent
commit
f236935580
  1. 4
      src/views/modules/print/print_package_label.js
  2. 189
      src/views/modules/production/scanForm.vue
  3. 521
      src/views/modules/production/shippingScan.vue

4
src/views/modules/print/print_package_label.js

@ -99,9 +99,9 @@ export function printPackageLabel(printList) {
LODOP.SET_PRINT_STYLEA(0,"Alignment",3);
LODOP.SET_PRINT_STYLEA(0,"Bold",1);
if(printData.code=='CODE128') {
LODOP.ADD_PRINT_BARCODE(40,143,236,23, "128A", printData.partSpec);
LODOP.ADD_PRINT_BARCODE(40,143,236,23, "128A",`${printData.site};${printData.partNo};${printData.unitQty}`);
}else {
LODOP.ADD_PRINT_BARCODE(40,143,236,23, "Code39", printData.partSpec);
LODOP.ADD_PRINT_BARCODE(40,143,236,23, "Code39",`${printData.site};${printData.partNo};${printData.unitQty}`);
}
LODOP.SET_PRINT_STYLEA(0,"ShowBarText",0);
// LODOP.ADD_PRINT_IMAGE(4,18,114,31,"<img src='http://192.168.1.83:81/upload/AMLogo.jpg'/>");

189
src/views/modules/production/scanForm.vue

@ -0,0 +1,189 @@
<script>
import {getPartValue, removeScanLabel, saveScanLabel, scanLabel} from "../../../api/production/generateReport";
import dayjs from "dayjs";
export default {
name:"scanForm",
props:{
detail:{
type: [Object],
required: true
},
scanFlag:{
type: Boolean,
default:false,
}
},
computed:{
flag:{
get(){
return this.scanFlag;
},
set(val){
this.$emit("update:scanFlag",val)
}
}
},
data(){
return{
model:{
flag:undefined,
label:'',
},
partValue:0,
scanLabelDetailList:[],
}
},
methods:{
removeScanLabel(row){
removeScanLabel(row).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg)
this.scanLabel();
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
getFocus(refName){
this.$refs[refName].focus()
},
openScanDialog(){
this.getFocus('focusInput')
// part
let params={
site:this.detail.site,
partNo:this.detail.partNo
}
getPartValue(params).then(({data})=>{
if (data && data.code === 0){
this.partValue = data.data;
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
scanLabel(){
let paramsScan={
site:this.detail.site,
delNotifyNo: this.detail.delNotifyNo,
delNotifyItemNo: this.detail.delNotifyItemNo,
}
scanLabel(paramsScan).then(({data})=>{
if (data && data.code === 0){
this.scanLabelDetailList = data.rows
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
scanLabelEnter(){
let arr = this.model.label.split(";");
if (arr.length !== 3){
this.$message.warning("标签格式错误")
return
}
if (arr[0] !== this.detail.site || arr[1] !== this.detail.partNo){
this.$message.warning(`扫描标签有误,标签site:${arr[0]}partNo:${arr[1]},site应为:${this.detail.site}partNo应为:${this.detail.partNo}`)
return;
}
if (this.partValue===0){
this.$message.warning(`工厂编码:${this.detail.site},partNo:${this.detail.partNo},每袋/每卷数量未维护;${this.partValue}`)
return;
}
if (this.model.flag !== 'Y' && this.partValue != arr[2]){
this.$message.warning(`标签数量与标准袋装数量不匹配`)
return;
}
// :this.detail.notifyQty
let params={
site:this.detail.site,
delNotifyNo: this.detail.delNotifyNo,
delNotifyItemNo: this.detail.delNotifyItemNo,
scanQty:arr[2],
scanType:this.model.flag === 'Y'?'零数量':'标准数量',
createBy:this.$store.state.user.userDisplay,
createData:dayjs().format("YYYY-MM-DD")
}
saveScanLabel(params).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg)
this.scanLabel();
}else {
this.$message.warning(data.msg)
}
//
this.model.flag = undefined;
this.model.label = '';
}).catch((error)=>{
this.$message.warning(error)
this.model.flag = undefined;
this.model.label = '';
})
}
}
}
</script>
<template>
<div>
<el-dialog
title="出货扫描" v-drag
:visible.sync="flag"
width="50%"
@open="scanLabel"
@close="()=>{
this.model = {
label: '',
flag: undefined,
}
this.scanLabelDetailList = [];
}" @opened="openScanDialog">
<el-form :model="model" :inline="true" label-position="top">
<el-form-item label=" ">
<el-select v-model="model.flag" clearable>
<el-option value="Y" label="零数袋"></el-option>
</el-select>
</el-form-item>
<el-form-item label="标签" style="width: 200px">
<el-input ref="focusInput" v-model="model.label" @keyup.enter.native="scanLabelEnter"></el-input>
</el-form-item>
</el-form>
<el-table :data="scanLabelDetailList" stripe border height="400">
<el-table-column label="操作" align="center">
<template slot-scope="{row,$index}">
<el-link style="cursor:pointer;" @click="removeScanLabel(row)">删除</el-link>
</template>
</el-table-column>
<el-table-column label="通知单号" align="center" show-overflow-tooltip prop="delNotifyNo"/>
<el-table-column label="通知单号序号" align="left" show-overflow-tooltip prop="delNotifyItemNo"/>
<el-table-column label="产品编码" show-overflow-tooltip>
<template slot-scope="{row,$index}">
{{detail.partNo}}
</template>
</el-table-column>
<el-table-column label="数量" align="center" show-overflow-tooltip prop="scanQty"/>
<el-table-column label="类型" align="left" show-overflow-tooltip prop="scanType"/>
<el-table-column label="操作员" align="left" show-overflow-tooltip prop="createBy"/>
<el-table-column label="扫描时间" align="center" show-overflow-tooltip prop="createData"/>
</el-table>
<div style="height: 20px"></div>
</el-dialog>
</div>
</template>
<style scoped>
.el-input-number /deep/ .el-input__inner{
text-align: left;
margin-top: 5px;
padding-right: 5px !important;
padding-left: 5px !important;
}
</style>

521
src/views/modules/production/shippingScan.vue

@ -0,0 +1,521 @@
<script>
import {
searchDelHeaderList,
searchDelNotifyDetail,
updateDelNotifyDetail,
} from '@/api/pad.js'
import scanForm from "./scanForm.vue";
import dayjs from "dayjs";
import {Decimal} from "decimal.js";
export default {
name: "shippingScan",
components:{
scanForm,
},
data() {
return {
height:200,
//
searchData:{
site:"",
startDate:dayjs().format("YYYY-MM-DD"),
endDate:dayjs().format("YYYY-MM-DD"),
customerId:undefined,
delNotifyNo:undefined,
shipFlag:true,
no:1,
size:50,
total:0,
},
scanFlag:false,
checkoutDelNotifyDetailDialogVisible:false,
//
delNotifyHeader:{
},
//
delNotifyDetail:{
},
//
delNotifyHeaderList:[],
//
delNotifyDetailList:[],
no:1,
size:50,
total:0,
}
},
mounted () {
this.$nextTick(() => {
this.height = window.innerHeight - 475
})
},
methods: {
searchDelHeaderList(){
let params = JSON.parse(JSON.stringify(this.searchData))
params.no = this.no;
params.size = this.size;
if (this.searchData.shipFlag){
params.shipFlag = "N";
}else {
params.shipFlag = null;
}
this.delNotifyHeaderList = [];
this.delNotifyDetailList = [];
this.delNotifyHeaderTableLoading = true;
searchDelHeaderList(params).then(({data})=>{
this.delNotifyHeaderTableLoading = false;
if (data && data.code === 0){
this.delNotifyHeaderList = data.data.records;
this.total = data.data.total;
this.delNotifyDetailList = data.data.records[0].delNotifyDetailVoList
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.delNotifyHeaderTableLoading = false;
})
},
//
sizeChangeHandle(val){
this.size = val;
this.no = 1;
this.searchDelHeaderList();
},
currentChangeHandle(val){
this.no = val;
this.searchDelHeaderList();
},
getSignNumber(number){
return new Decimal(number).toSignificantDigits().toNumber()
},
rowClickDelNotifyHeaderTable(row){
//
this.delNotifyHeader = row
this.delNotifyDetailList = this.delNotifyHeader.delNotifyDetailVoList;
},
updateDelNotifyDetailBtn(status){
this.delNotifyDetail.approveResultFlag = status;
console.log(this.$store.state.user)
this.delNotifyDetail.approvedBy = this.$store.state.user.name;
this.updateDelNotifyDetail();
},
updateDelNotifyDetail(){
updateDelNotifyDetail(this.delNotifyDetail).then(({data})=>{
if (data && data.code === 0){
this.searchDelHeaderList();
this.checkoutDelNotifyDetailDialogVisible = false;
this.$message.success(data.msg)
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error("网络异常")
})
},
checkoutDelNotifyDetailBtn(row){
this.delNotifyDetail = JSON.parse(JSON.stringify(row));
this.checkoutDelNotifyDetailDialogVisible = true;
},
clickScan(row){
this.delNotifyDetail = JSON.parse(JSON.stringify(row))
this.scanFlag = true
},
},
created() {
this.searchDelHeaderList();
}
}
</script>
<template>
<div style="padding: 10px">
<el-form ref="searchDataForm" label-position="top" :model="searchData" label-width="80px">
<el-row :gutter="20">
<el-col :span="7">
<el-row>
<el-col :span="11">
<el-form-item label="通知单日期">
<el-date-picker
style="width: 100%"
:editable="false"
v-model="searchData.startDate"
value-format="yyyy-MM-dd"
type="date">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="2">
<el-form-item label=" " style="text-align: center">
-->
</el-form-item>
</el-col>
<el-col :span="11">
<el-form-item label=" ">
<el-date-picker
style="width: 100%"
:editable="false"
v-model="searchData.endDate"
value-format="yyyy-MM-dd"
type="date">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="3">
<el-form-item label="客户编号">
<el-input v-model="searchData.customerId" clearable/>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="通知单单号">
<el-input v-model="searchData.delNotifyNo" clearable/>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="工厂编号" prop="site">
<el-select filterable v-model="searchData.site" default-first-option style="width: 100%">
<el-option label="全部" value=""></el-option>
<el-option label="1-沪声" value="1"></el-option>
<el-option label="2-赫艾" value="2"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item :label="' '">
<el-checkbox v-model="searchData.shipFlag">筛选未发货清单</el-checkbox>
</el-form-item>
</el-col>
<el-col :span="2">
<el-form-item :label="' '">
<el-button type="primary" style="height: 20px;font-size: 14px;line-height: 10px" @click="searchDelHeaderList"> </el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div v-loading="delNotifyHeaderTableLoading">
<el-table
:height="height"
:data="delNotifyHeaderList"
border stripe
@row-click="rowClickDelNotifyHeaderTable"
style="margin-top: 10px;">
<el-table-column
prop="delNotifyNo"
header-align="center"
align="left"
width="150"
label="通知单号"/>
<el-table-column
prop="notifyDate"
header-align="center"
align="left"
width="150"
label="要求发货日期"/>
<el-table-column
prop="customerId"
header-align="center"
align="left"
width="120"
label="客户编码"/>
<el-table-column
prop="customerName"
header-align="center"
align="left"
width="120"
label="客户名称"/>
<el-table-column
prop="billAirwayNo"
header-align="center"
align="left"
width="120"
label="运单号"/>
<el-table-column
prop="forwarderId"
header-align="center"
align="left"
width="80"
label="货代"/>
<el-table-column
prop="remark"
header-align="center"
align="left"
show-overflow-tooltip
min-width="120"
label="备注"/>
<el-table-column
prop="notifyDate"
header-align="center"
align="left"
width="120"
label="通知单日期"/>
<el-table-column
prop="receiver"
header-align="center"
align="left"
width="100"
label="经手人"/>
<el-table-column
prop="delAddId"
header-align="center"
align="left"
show-overflow-tooltip
width="120"
label="送货地址"/>
<el-table-column
prop="creditFlag"
header-align="center"
align="left"
width="120"
label="退货标记"/>
<el-table-column
prop="site"
header-align="center"
align="left"
width="120"
label="工厂编码"/>
<el-table-column
prop="shipFlag"
header-align="center"
align="left"
width="120"
label="是否发货"/>
<el-table-column
prop="shipResult"
header-align="center"
align="left"
width="150"
label="发货状态信息"/>
<el-table-column
prop="realShipDate"
header-align="center"
align="left"
width="150"
label="实际发货日期"/>
</el-table>
<div style=" font-size: 18px;">
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="no"
:page-sizes="[50, 100, 500, 1000]"
:page-size="size"
:total="total"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</div>
<el-table :data="delNotifyDetailList"
height="250"
border stripe
style="margin-top: 10px;">
<el-table-column label="操作" width="150px" header-align="center" fixed align="center">
<template slot-scope="{row,$index}">
<el-link style="cursor: pointer" v-if="row.approveFlag === 'N'" @click="checkoutDelNotifyDetailBtn(row)">检验</el-link>
<el-link style="cursor: pointer" v-if="row.shipQty < row.notifyQty" @click="clickScan(row)">标签扫描</el-link>
</template>
</el-table-column>
<el-table-column
prop="delNotifyItemNo"
header-align="center"
align="left"
width="150px"
label="通知单号序号">
<template slot-scope="{row,$index}">
{{getSignNumber(row.delNotifyItemNo)}}
</template>
</el-table-column>
<el-table-column
prop="partNo"
header-align="center"
align="left"
width="120"
label="产品编码"/>
<el-table-column
prop="partDescription"
header-align="center"
align="left"
width="150"
show-overflow-tooltip
label="产品名称规格"/>
<el-table-column
prop="approveResultFlag"
header-align="center"
align="left"
width="150"
show-overflow-tooltip
label="出货检验结果">
<template slot-scope="{row,$index}">
<span v-if="row.approveResultFlag === 'Y'">合格</span>
<span v-else-if="row.approveResultFlag === 'N'">不合格</span>
<span v-else>待检验</span>
</template>
</el-table-column>
<el-table-column
prop="notifyQty"
header-align="center"
align="right"
width="120"
label="通知单数量"/>
<el-table-column
prop="shipQty"
header-align="center"
align="right"
width="120"
label="发货数量"/>
<el-table-column
prop="umid"
header-align="center"
align="left"
width="120"
label="销售计量单位"/>
<el-table-column
prop="orderNo"
header-align="center"
align="left"
width="120"
label="销售订单号"/>
<el-table-column
prop="itemNo"
header-align="center"
align="left"
width="120"
label="订单序号"/>
<el-table-column
prop="customerPONo"
header-align="center"
align="left"
width="150"
label="客户采购订单号"/>
<el-table-column
prop="orderType"
header-align="center"
align="left"
width="120"
label="订单类型"/>
<el-table-column
prop="custPartNo"
header-align="center"
align="left"
width="150"
label="客户产品编号"/>
<el-table-column
prop="intSales"
header-align="center"
align="left"
width="120"
label="内部销售"/>
<el-table-column
prop="extSales"
header-align="center"
align="left"
width="120"
label="外部销售"/>
<el-table-column
prop="subOrderType"
header-align="center"
align="left"
width="180"
label="零部件订单类型"/>
<el-table-column
prop="techInfo"
header-align="center"
align="left"
width="150"
label="技术注意事项"/>
<el-table-column
prop="remark"
header-align="center"
align="left"
show-overflow-tooltip
width="180"
label="备注"/>
</el-table>
</div>
<!--检验弹框-->
<el-dialog
title="出货检验"
:visible.sync="checkoutDelNotifyDetailDialogVisible"
width="40%">
<el-form :model="delNotifyDetail" label-position="top" label-width="120">
<el-row :gutter="30">
<el-col :span="10">
<el-form-item label="通知单号">
<el-input disabled v-model="delNotifyDetail.delNotifyNo" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工厂编号" prop="site">
<el-select filterable disabled v-model="delNotifyDetail.site" readonly style="width: 100%">
<el-option label="全部" value=""></el-option>
<el-option label="1-沪声" value="1"></el-option>
<el-option label="2-赫艾" value="2"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="产品编码">
<el-input disabled v-model="delNotifyDetail.partNo" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="产品描述">
<el-input disabled v-model="delNotifyDetail.partDescription" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="通知单数量">
<div class="right">
<el-input disabled v-model="delNotifyDetail.notifyQty" type="number" readonly></el-input>
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发货数量">
<div class="right">
<el-input disabled v-model="delNotifyDetail.shipQty" type="number" readonly></el-input>
</div>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="销售订单">
<el-input disabled v-model="delNotifyDetail.delNotifyNo" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="客户采购订单">
<el-input disabled v-model="delNotifyDetail.customerPONo" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="内部销售">
<el-input disabled v-model="delNotifyDetail.intSales" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="外部销售">
<el-input disabled v-model="delNotifyDetail.extSales" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer" style="text-align: center">
<el-button type="primary" @click="updateDelNotifyDetailBtn('Y')"> </el-button>
<el-button @click="updateDelNotifyDetailBtn('N')"> </el-button>
</span>
</el-dialog>
<scan-form :scan-flag.sync="scanFlag" :detail="delNotifyDetail"></scan-form>
</div>
</template>
<style scoped>
.el-select-dropdown__item{
font-size: 18px;
}
.right /deep/ .el-input--medium .el-input__inner{
text-align: right;
}
</style>
Loading…
Cancel
Save