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.
1774 lines
68 KiB
1774 lines
68 KiB
<script>
|
|
import PictureModule from '../part/picture/picture.vue'
|
|
import {getExternalPartCustomerList, getExternalPartCustomerPage} from '../../../api/part/externalPartCustomer'
|
|
import {getExternalPartPictureList} from '../../../api/part/externalPartPicture'
|
|
import ExternalPart from '../part/external.vue'
|
|
import CustomerInfo from '../customer/info.vue'
|
|
import {getExternalPartManufacturerList} from '../../../api/part/externalPartManufacturer'
|
|
import {
|
|
getLabelFormatUserDefaultList,
|
|
selectLabelFormatUserDefaultListByUserId
|
|
} from '../../../api/label/labelFormatUserDefault'
|
|
import LinkedFormat from './format/linkedFormat.vue'
|
|
import {Decimal} from 'decimal.js'
|
|
import {savePrintLabelRecord} from '../../../api/label/printLabelRecord'
|
|
import dayjs from 'dayjs'
|
|
import {printAlphaHardTagLabel} from '../../../printFormat/alphaHardTagPrintFormat'
|
|
import {printAntennaLabel} from '../../../printFormat/antenna'
|
|
import {printRF_RFIDLabel} from '../../../printFormat/RF_RFID'
|
|
|
|
import getLodop from '@/utils/LodopFuncs.js'
|
|
import {getTableDefaultListLanguage, getTableUserListLanguage} from '../../../api/table'
|
|
import {getCategory, getCategoryList} from '../../../api/category/category'
|
|
import QrCode from './QrCode.vue'
|
|
import {savePrintRollLabelRecord} from '../../../api/label/printRollLabelRecord'
|
|
import {print_roll_label} from '../../../printFormat/roll_label'
|
|
import {saveLogisticLabelRecord} from '../../../api/label/LogisticLabelRecord'
|
|
import {printLogisticLabel} from '../../../printFormat/logisticLabel'
|
|
import {queryExternalLabelTemplate} from '../../../api/part/externalLabelTemplate'
|
|
import {download} from '../../../api/oss/oss'
|
|
import {savePartInfoByExcel} from '../../../api/part/external'
|
|
import {importSerialNumber} from '../../../api/print/print'
|
|
|
|
const printer = {
|
|
customerNo: '',
|
|
customerName: '',
|
|
partNo: '',
|
|
partDesc: '',
|
|
active: 'Y',
|
|
category: '',
|
|
qtyPerCarton: 0,
|
|
totalShipQty: 0,
|
|
cartonCount: 1,
|
|
manufacturerTime: '',
|
|
manufacturerNo: '',
|
|
moldCode: '',
|
|
serialNumber: '',
|
|
manufacturerRequired: '',
|
|
moldCodeRequired: '',
|
|
serialNumberRequired: '',
|
|
qtyPerRoll: 0,
|
|
rollsPerCarton: 0,
|
|
orderNo: '',
|
|
templateNo:'',
|
|
printLabelType:0,
|
|
}
|
|
export default {
|
|
name: 'printer',
|
|
components: {QrCode, LinkedFormat, CustomerInfo, ExternalPart, PictureModule},
|
|
props:{
|
|
height:{
|
|
type:Number,
|
|
default:300
|
|
},
|
|
},
|
|
data(){
|
|
return{
|
|
no:1,
|
|
size:50,
|
|
total:0,
|
|
rowSpan: 8,
|
|
printerSetupList:[],
|
|
currentPrinter: '',
|
|
printType: 'alphaHardTag',
|
|
printLoading:false,
|
|
searchPrinter: {
|
|
...printer
|
|
},
|
|
partCategoryList:[
|
|
|
|
],
|
|
partVisible:false,
|
|
customerVisible:false,
|
|
printerList:[],
|
|
activeName:"picture",
|
|
currentPart:{
|
|
|
|
},
|
|
printCurrentPart:{
|
|
...printer
|
|
},
|
|
printVisible:false,
|
|
pictureList:[],
|
|
printRules:{
|
|
moldCode: [{required: true, message: 'Please input Mold Code', trigger: ['blur','change']}],
|
|
manufacturerNo: [{required: true, message: 'Please input Manufacturer', trigger: ['blur','change']}],
|
|
serialNumber: [{required: true, message: 'Please input Serial Number', trigger: ['blur','change']}],
|
|
qtyPerCarton: [{required: true, message: 'Please input Qty Per Carton', trigger: ['blur','change']}],
|
|
rollsPerCarton: [{required: true, message: 'Please input Rolls Per Carton', trigger: ['blur','change']}],
|
|
qtyPerRoll: [{required: true, message: 'Please input Qty Per Roll', trigger: ['blur','change']}],
|
|
totalShipQty: [{required: true, message: 'Please input Total Ship Qty', trigger: ['blur','change']}],
|
|
cartonCount: [{required: true, message: 'Please input Carton Count', trigger: ['blur','change']}],
|
|
manufacturerTime: [{required: true, message: 'Please input Manufacturer Date', trigger: ['blur','change']}],
|
|
orderNo: [{required: true, message: 'Please input PO', trigger: ['blur','change']}],
|
|
poNo: [{required: true, message: 'Please input PO No', trigger: ['blur','change']}],
|
|
invoiceNo: [{required: true, message: 'Please input Invoice No', trigger: ['blur','change']}],
|
|
unitQtyPerPallet: [{required: true, message: 'Please input Unit Qty Per Pallet', trigger: ['blur','change']}],
|
|
countOfPallets: [{required: true, message: 'Please input Count Of Pallets', trigger: ['blur','change']}],
|
|
},
|
|
columnList:[
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TableCustomerNo',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "customerNo",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Customer No",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 80
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TableCustomerName',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "customerName",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Customer Name",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TablePartNo',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "partNo",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Part No",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TablePartDesc',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "partDesc",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Part Description",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TableRev',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "rev",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Part REV",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 80
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TableCategory',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "category",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Part Category",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TableUmName',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "umName",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "UM",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TableFreeInfo',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "freeInfo",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Free Info",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TableFreeInfo2',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "freeInfo2",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "OOC",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TableTradingMark',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "tradingMark",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Trading Mark",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TablePackingWeight',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "packingWeight",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Packing Weight",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TableWeightUM',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "weightUmName",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Weight UM",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004TableActive',
|
|
tableId: "30004Table",
|
|
tableName: "Part Customer Table",
|
|
columnProp: "active",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Active",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
}
|
|
],
|
|
pictureColumnList:[
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table2PictureNo',
|
|
tableId: "30004Table2",
|
|
tableName: "外部料号图片信息表",
|
|
columnProp: "certificationNo",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Certification Code",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 80
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table2PictureDesc',
|
|
tableId: "30004Table2",
|
|
tableName: "外部料号图片信息表",
|
|
columnProp: "pictureDesc",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Certification Desc",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 180
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table2CreateBy',
|
|
tableId: "30004Table2",
|
|
tableName: "外部料号图片信息表",
|
|
columnProp: "createBy",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Created By",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 80
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table2CreateTime',
|
|
tableId: "30004Table2",
|
|
tableName: "外部料号图片信息表",
|
|
columnProp: "createTime",
|
|
headerAlign: "center",
|
|
align: "center",
|
|
columnLabel: "Created Time",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 180
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table2UpdateBy',
|
|
tableId: "30004Table2",
|
|
tableName: "外部料号图片信息表",
|
|
columnProp: "updateBy",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Updated By",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 80
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table2UpdateTime',
|
|
tableId: "30004Table2",
|
|
tableName: "外部料号图片信息表",
|
|
columnProp: "updateTime",
|
|
headerAlign: "center",
|
|
align: "center",
|
|
columnLabel: "Updated Time",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 180
|
|
},
|
|
],
|
|
formatColumnList:[
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table3LabelType',
|
|
tableId: "30004Table3",
|
|
tableName: "标签模板信息表",
|
|
columnProp: "labelType",
|
|
headerAlign: "center",
|
|
align: "center",
|
|
columnLabel: "Label Type",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 80
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table3FormatId',
|
|
tableId: "30004Table3",
|
|
tableName: "标签模板信息表",
|
|
columnProp: "formatId",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Format ID",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 180
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table3FormatDesc',
|
|
tableId: "30004Table3",
|
|
tableName: "标签模板信息表",
|
|
columnProp: "formatDesc",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Format Desc",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 180
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table3DefaultFormat',
|
|
tableId: "30004Table3",
|
|
tableName: "标签模板信息表",
|
|
columnProp: "defaultFlag",
|
|
headerAlign: "center",
|
|
align: "center",
|
|
columnLabel: "Default Format",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 80
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table3Remark',
|
|
tableId: "30004Table3",
|
|
tableName: "标签模板信息表",
|
|
columnProp: "remark",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Remark",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 180
|
|
},{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30004,
|
|
serialNumber: '30004Table3DefaultPrinterName',
|
|
tableId: "30004Table3",
|
|
tableName: "标签模板信息表",
|
|
columnProp: "defaultPrinterName",
|
|
headerAlign: "center",
|
|
align: "left",
|
|
columnLabel: "Default Printer Name",
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 180
|
|
},
|
|
],
|
|
manufacturerList:[],
|
|
labelFormatList:[],
|
|
base64List:[],
|
|
status:0,
|
|
|
|
currentPartLogistic:{
|
|
site:this.$store.state.user.site,
|
|
partNo:'',
|
|
partDesc:'',
|
|
poNo:'',
|
|
unitQtyPerPallet:1,
|
|
countOfPallets:1,
|
|
umName:'',
|
|
customerNo:'',
|
|
invoiceNo:'',
|
|
},
|
|
logisticVisible:false,
|
|
templateList:[],
|
|
|
|
printTest:false,
|
|
|
|
serialNumberList:[],
|
|
scanSerialNumberList:[],
|
|
serialNumberVisible:false,
|
|
scanObj:{
|
|
serialNumber:'',
|
|
},
|
|
importExcelVisible:false,
|
|
fileList:[],
|
|
|
|
importExcelLoading:false,
|
|
}
|
|
},
|
|
watch:{
|
|
currentPart(newVal,oldVal){
|
|
this.getExternalPartPictureList();
|
|
this.selectLabelFormatUserDefaultListByUserId();
|
|
},
|
|
"searchPrinter.customerNo"(newVal,oldVal){
|
|
this.searchPrinter.customerNo = newVal.toUpperCase();
|
|
},
|
|
"searchPrinter.partNo"(newVal,oldVal){
|
|
this.searchPrinter.partNo = newVal.toUpperCase();
|
|
},
|
|
"printCurrentPart.cartonCount"(newVal,oldVal){
|
|
if (newVal && newVal > 0){
|
|
this.printCurrentPart.cartonCount = Math.ceil(newVal)
|
|
}
|
|
this.printCurrentPart.totalShipQty = this.totalShipQty();
|
|
},
|
|
"printCurrentPart.qtyPerRoll"(newVal,oldVal){
|
|
this.printCurrentPart.qtyPerCarton = this.qtyPerCarton();
|
|
},
|
|
"printCurrentPart.rollsPerCarton"(newVal,oldVal){
|
|
this.printCurrentPart.qtyPerCarton = this.qtyPerCarton();
|
|
},
|
|
"printCurrentPart.qtyPerCarton"(newVal,oldVal){
|
|
this.printCurrentPart.totalShipQty = this.totalShipQty();
|
|
},
|
|
printVisible(newVal,oldVal){
|
|
if (newVal === false){
|
|
this.printTest = false;
|
|
this.serialNumberList = [];
|
|
}
|
|
},
|
|
logisticVisible(newVal,oldVal){
|
|
if (newVal === false){
|
|
this.printTest = false;
|
|
}
|
|
},
|
|
serialNumberVisible(newVal,oldVal){
|
|
if (newVal === false){
|
|
this.scanObj.serialNumber = '';
|
|
this.scanSerialNumberList = [];
|
|
}
|
|
},
|
|
importExcelVisible(newVal,oldVal){
|
|
if (newVal === false){
|
|
this.$refs.uploadFile.clearFiles();
|
|
this.importExcelLoading = false;
|
|
}
|
|
},
|
|
printLoading(newVal,oldVal){
|
|
if (newVal === true){
|
|
setTimeout(()=>{
|
|
this.printLoading = false
|
|
},5000)
|
|
}
|
|
}
|
|
},
|
|
methods:{
|
|
rowStyle({row}){
|
|
if (row.site === this.currentPart.site && row.partNo === this.currentPart.partNo && row.customerNo === this.currentPart.customerNo){
|
|
return {background: 'rgb(232,246,246)',}
|
|
}
|
|
},
|
|
handleClick(row){
|
|
this.currentPart = {...row};
|
|
},
|
|
getExternalPartCustomerList(){
|
|
let params = {
|
|
...this.searchPrinter,
|
|
site:this.$store.state.user.site
|
|
}
|
|
getExternalPartCustomerList(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.printerList = data.rows;
|
|
if (this.printerList.length > 0){
|
|
this.currentPart = {...this.printerList[0]}
|
|
}
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
getExternalPartPictureList(){
|
|
let params = {
|
|
partNo: this.currentPart.partNo,
|
|
site: this.currentPart.site,
|
|
pictureClassify:'BoxPicture'
|
|
}
|
|
getExternalPartPictureList(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.pictureList = data.rows;
|
|
this.convertToBase64(this.pictureList.map((item)=>item.pictureUrl))
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
handlePrintLogisticLabel(){
|
|
let labelList = this.labelFormatList.filter((item)=> item.labelType === 'Logistic Label')
|
|
if (labelList.length === 0){
|
|
this.$message.warning("There is no maintenance of print label format")
|
|
return
|
|
}
|
|
this.getExternalPartPictureList();
|
|
this.selectLabelFormatUserDefaultListByUserId();
|
|
this.currentPartLogistic = {
|
|
site:this.currentPart.site,
|
|
partNo:this.currentPart.partNo,
|
|
partDesc:this.currentPart.partDesc,
|
|
poNo:'',
|
|
category:this.currentPart.category,
|
|
unitQtyPerPallet:1,
|
|
countOfPallets:1,
|
|
umName: this.currentPart.umName,
|
|
customerNo:this.currentPart.customerNo,
|
|
invoiceNo:'',
|
|
}
|
|
this.logisticVisible = true;
|
|
},
|
|
handlePrint(status){
|
|
this.printCurrentPart = JSON.parse(JSON.stringify(this.currentPart))
|
|
let labelList = [];
|
|
if (status === 1){
|
|
labelList = this.labelFormatList.filter((item)=> item.labelType === 'Roll Label')
|
|
this.printCurrentPart.rollsPerCarton = 1;
|
|
this.$set(this.printCurrentPart,'orderNo','')
|
|
}else if (status === 0){
|
|
labelList = this.labelFormatList.filter((item)=> item.labelType === 'Shipment Carton')
|
|
}
|
|
if (labelList.length === 0){
|
|
this.$message.warning("There is no maintenance of print label format")
|
|
return
|
|
}
|
|
for (let label of labelList) {
|
|
if (!label.defaultPrinterName){
|
|
this.$message.warning("The default printer name is not set")
|
|
return
|
|
}
|
|
}
|
|
this.status = status;
|
|
this.$set(this.printCurrentPart,'cartonCount',1)
|
|
this.$set(this.printCurrentPart,'manufacturerNo','')
|
|
this.$set(this.printCurrentPart,'totalShipQty',undefined)
|
|
this.$set(this.printCurrentPart,'moldCode','')
|
|
this.$set(this.printCurrentPart,'serialNumber',undefined)
|
|
this.$set(this.printCurrentPart,'manufacturerTime',dayjs().format('YYYY-MM-DD HH:mm:ss'))
|
|
if (this.currentPart.serialNumberRequired === 'Y'){
|
|
this.printCurrentPart.qtyPerRoll = 1;
|
|
this.printCurrentPart.rollsPerCarton = 1;
|
|
this.printCurrentPart.qtyPerCarton = 1;
|
|
this.printCurrentPart.totalShipQty = 1;
|
|
}else {
|
|
this.printCurrentPart.qtyPerCarton = this.currentPart.qtyPerCarton;
|
|
this.printCurrentPart.qtyPerRoll = this.currentPart.qtyPerRoll;
|
|
this.printCurrentPart.rollsPerCarton = this.currentPart.rollsPerCarton;
|
|
this.printCurrentPart.totalShipQty = this.totalShipQty();
|
|
}
|
|
if (this.currentPart.manufacturerRequired === 'Y'){
|
|
// 查询所有的 manufacturer
|
|
this.getExternalPartManufacturerList();
|
|
}
|
|
if (this.currentPart.moldCodeRequired === 'Y'){
|
|
this.printCurrentPart.moldCode = this.currentPart.moldCode;
|
|
}
|
|
if (this.printCurrentPart.category === 'Hardware(Antenna)-Serials'){
|
|
this.$set(this.printCurrentPart,'printLabelType',0)
|
|
this.handleQueryTemplate();
|
|
}
|
|
this.handleQueryCategory();
|
|
},
|
|
handleQueryTemplate(){
|
|
let params = {
|
|
partNo: this.currentPart.partNo,
|
|
site: this.currentPart.site,
|
|
}
|
|
this.templateList = [];
|
|
queryExternalLabelTemplate(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.templateList = data.rows;
|
|
if (this.templateList.length > 0){
|
|
this.$set(this.printCurrentPart,'templateNo',this.templateList[0].templateNo)
|
|
}
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
handleQueryCategory(){
|
|
// 获取 category
|
|
let params = {
|
|
categoryValue: this.currentPart.category,
|
|
}
|
|
getCategory(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.$set(this.printCurrentPart,'qtyPerRollLabel',data.data.qtyPerRollLabel)
|
|
this.$set(this.printCurrentPart,'cartonCountLabel',data.data.cartonCountLabel)
|
|
this.$set(this.printCurrentPart,'rollCountLabel',data.data.rollCountLabel)
|
|
this.$set(this.printCurrentPart,'showCartonQtyPerRoll',data.data.showCartonQtyPerRoll)
|
|
this.$set(this.printCurrentPart,'showCartonRollsPerCarton',data.data.showCartonRollsPerCarton)
|
|
this.$set(this.printCurrentPart,'showRollQtyPerRoll',data.data.showRollQtyPerRoll)
|
|
this.$set(this.printCurrentPart,'editQtyPerCarton',data.data.editQtyPerCarton)
|
|
this.printRules.qtyPerRoll[0].message = `Please input ${data.data.qtyPerRollLabel}`
|
|
if (this.status === 0){
|
|
if (data.data.showCartonRollsPerCarton === 'N' && data.data.showCartonQtyPerRoll === 'N'){
|
|
this.rowSpan = 8
|
|
}else if (data.data.showCartonRollsPerCarton === 'N' || data.data.showCartonQtyPerRoll === 'N'){
|
|
this.rowSpan = 6
|
|
}else {
|
|
this.rowSpan = 5
|
|
}
|
|
this.printRules.cartonCount[0].message = `Please input ${data.data.cartonCountLabel}`
|
|
}else {
|
|
if (data.data.showRollQtyPerRoll === 'N'){
|
|
this.rowSpan = 12
|
|
}else {
|
|
this.rowSpan = 8
|
|
}
|
|
this.printRules.cartonCount[0].message = `Please input ${data.data.rollCountLabel}`
|
|
}
|
|
this.getExternalPartPictureList();
|
|
this.selectLabelFormatUserDefaultListByUserId();
|
|
this.printVisible = true;
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
getExternalPartManufacturerList(){
|
|
let params = {
|
|
site: this.currentPart.site,
|
|
partNo: this.currentPart.partNo,
|
|
}
|
|
getExternalPartManufacturerList(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.manufacturerList = data.rows;
|
|
if (this.manufacturerList.length > 0){
|
|
this.printCurrentPart.manufacturerNo = this.manufacturerList[0].manufacturerNo;
|
|
}
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
|
|
},
|
|
handlePrintOrSave(){
|
|
if ((this.printCurrentPart.category !== 'Hardware(Antenna)-Serials' || this.$store.state.user.autoSerialNumber !== 'Y') &&this.printCurrentPart.serialNumberRequired === 'Y' && this.serialNumberList.length <= 0){
|
|
this.$message.warning("Please input Serial Number")
|
|
return
|
|
}
|
|
this.$refs.printForm.validate((valid,obj) => {
|
|
if (valid){
|
|
if(this.status === 0){
|
|
this.savePrintLabelRecord();
|
|
}else if (this.status === 1){
|
|
this.savePrintRollLabelRecord();
|
|
}
|
|
}else {
|
|
for (let i = 0; i < Object.keys(obj).length; i++) {
|
|
this.$message.warning(obj[Object.keys(obj)[i]][0].message)
|
|
return
|
|
}
|
|
}
|
|
})
|
|
},
|
|
savePrintLabelRecord(){
|
|
let params = {
|
|
...this.printCurrentPart,
|
|
serialNumberList:this.serialNumberList.map((item)=>{return item.serialNumber}),
|
|
createBy: this.$store.state.user.name
|
|
}
|
|
this.printLoading = true;
|
|
savePrintLabelRecord(params).then(({data})=>{
|
|
if (data && data.code === 0) {
|
|
let labelList = data.rows
|
|
let icons = this.base64List.map((item)=>{return{icon: item,}})
|
|
for (let i = 0; i < labelList.length; i++) {
|
|
let item = labelList[i];
|
|
let params = {
|
|
qrCode: `(00)${item.partNo}(01)${item.qtyPerCarton}(02)${item.umName}(03)${item.manufacturerDate}(04)${item.serialNumber? item.serialNumber : ''}(05)${item.manufacturerNo? item.manufacturerNo : ''}(06)${item.moldCode? item.moldCode : ''}(07)${item.boxNo? item.boxNo : ''}(08)(09)(10)`,
|
|
ref: item.partNo,
|
|
productRev: item.rev,
|
|
qty: item.qtyPerCarton,
|
|
uom: item.umName,
|
|
desc: item.partDesc,
|
|
rollCount: item.qtyPerRoll,
|
|
date: item.manufacturerDate,
|
|
manufacturer: item.manufacturerNo,
|
|
moldCode: item.moldCode,
|
|
sn: item.serialNumber,
|
|
freeInfo2: item.freeInfo2,
|
|
tradingMark: item.tradingMark,
|
|
weightUmName: item.weightUmName,
|
|
pictureMap:item.pictureMap,
|
|
printLabelType:item.printLabelType,
|
|
templateNo:item.templateNo,
|
|
dateStr:item.dateStr,
|
|
printStr1:item.printStr1,
|
|
printStr2:item.printStr2,
|
|
printStr3:item.printStr3,
|
|
offsetX:item.offsetX,
|
|
offsetY:item.offsetY,
|
|
direction:item.direction,
|
|
showPound:this.$store.state.user.showPound === 'Y'?item.showPound:'N',
|
|
}
|
|
if (item.packingWeight){
|
|
params.weight = new Decimal(item.packingWeight).mul(item.qtyPerCarton).toNumber();
|
|
}
|
|
let qrCodeList = this.$refs.qrCode.init([params.qrCode])
|
|
params.qrCode = qrCodeList[0]
|
|
|
|
if (item.printType === 'Alpha/Hard Tag'){
|
|
printAlphaHardTagLabel([params],icons,item.printerName,this.printTest)
|
|
}else if (item.printType === 'Hardware(Antenna)'){
|
|
if (this.printCurrentPart.category === 'Hardware(Antenna)-Serials'){
|
|
printAntennaLabel([params],icons,item.printerName,this.$store.state.user.autoSerialNumber,this.printTest)
|
|
}else {
|
|
printAntennaLabel([params],icons,item.printerName,'N',this.printTest)
|
|
}
|
|
}else if (item.printType === 'RF' || this.currentPart.category === 'RFID'){
|
|
printRF_RFIDLabel([params],icons,item.printerName,this.printTest)
|
|
}
|
|
this.printTest = false
|
|
}
|
|
// let notFound = [];
|
|
// // 打印机集合
|
|
// let labelList = this.labelFormatList.filter((item)=> item.labelType === 'Shipment Carton')
|
|
// for (let label of labelList) {
|
|
// let prints = data.rows.map((item) => {
|
|
// let params = {
|
|
// qrCode: `(00)${item.partNo}(01)${item.qtyPerCarton}(02)${item.umName}(03)${item.manufacturerDate}(04)${item.serialNumber? item.serialNumber : ''}(05)${item.manufacturerNo? item.manufacturerNo : ''}(06)${item.moldCode? item.moldCode : ''}(07)${item.boxNo? item.boxNo : ''}(08)(09)(10)`,
|
|
// ref: item.partNo,
|
|
// productRev: item.rev,
|
|
// qty: item.qtyPerCarton,
|
|
// uom: item.umName,
|
|
// desc: item.partDesc,
|
|
// rollCount: item.qtyPerRoll,
|
|
// date: item.manufacturerDate,
|
|
// manufacturer: item.manufacturerNo,
|
|
// moldCode: item.moldCode,
|
|
// sn: item.serialNumber,
|
|
// freeInfo2: item.freeInfo2,
|
|
// tradingMark: item.tradingMark,
|
|
// weightUmName: item.weightUmName,
|
|
// pictureMap:item.pictureMap,
|
|
// printLabelType:item.printLabelType,
|
|
// templateNo:item.templateNo,
|
|
// dateStr:item.dateStr,
|
|
// printStr1:item.printStr1,
|
|
// printStr2:item.printStr2,
|
|
// printStr3:item.printStr3,
|
|
// }
|
|
// if (item.packingWeight){
|
|
// params.weight = new Decimal(item.packingWeight).mul(item.qtyPerCarton).toNumber();
|
|
// }
|
|
// return params
|
|
// });
|
|
// let qrCodeList = this.$refs.qrCode.init(prints.map((item)=>{
|
|
// return item.qrCode
|
|
// }))
|
|
// for (let i = 0; i < qrCodeList.length; i++) {
|
|
// prints[i].qrCode = qrCodeList[i]
|
|
// }
|
|
// let icons = this.base64List.map((item)=>{return{icon: item,}})
|
|
// if (!this.printerSetupList.includes(label.defaultPrinterName)) {
|
|
// notFound.push(label.defaultPrinterName)
|
|
// continue
|
|
// }
|
|
// if (label.printType === 'Alpha/Hard Tag'){
|
|
// printAlphaHardTagLabel(prints,icons,label.defaultPrinterName)
|
|
// }else if (label.printType === 'Hardware(Antenna)'){
|
|
// if (this.printCurrentPart.category === 'Hardware(Antenna)-Serials'){
|
|
// printAntennaLabel(prints,icons,label.defaultPrinterName,this.$store.state.user.autoSerialNumber)
|
|
// }else {
|
|
// printAntennaLabel(prints,icons,label.defaultPrinterName)
|
|
// }
|
|
// }else if (label.printType === 'RF' || this.currentPart.category === 'RFID'){
|
|
// printRF_RFIDLabel(prints,icons,label.defaultPrinterName)
|
|
// }
|
|
// }
|
|
// if (notFound.length > 0){
|
|
// this.$message.warning(`The printer ${notFound.join(',')} is not found`)
|
|
// }else {
|
|
// this.$message.success("Print label success")
|
|
// }
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
this.printLoading = false;
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
this.printLoading = false;
|
|
})
|
|
},
|
|
handlePartRowClick(row){
|
|
this.searchPrinter.partNo = row.partNo;
|
|
this.partVisible = false;
|
|
},
|
|
handleCustomerRowClick(row){
|
|
this.searchPrinter.customerNo = row.customerNo;
|
|
this.customerVisible = false;
|
|
},
|
|
closePrintDialog(){
|
|
this.manufacturerList = [];
|
|
|
|
this.printCurrentPart = {
|
|
...printer
|
|
}
|
|
this.$refs.printForm.resetFields();
|
|
},
|
|
selectLabelFormatUserDefaultListByUserId(){
|
|
let params = {
|
|
site:this.currentPart.site,
|
|
partNo:this.currentPart.partNo,
|
|
username:this.$store.state.user.name,
|
|
category:this.currentPart.category,
|
|
}
|
|
getLabelFormatUserDefaultList(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.labelFormatList = data.rows;
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
handleCartonCount(){
|
|
if (this.printCurrentPart.totalShipQty && this.printCurrentPart.qtyPerCarton && this.printCurrentPart.totalShipQty !== 0 && this.printCurrentPart.qtyPerCarton !== 0){
|
|
this.printCurrentPart.cartonCount = new Decimal(new Decimal(this.printCurrentPart.totalShipQty).div(this.printCurrentPart.qtyPerCarton).toFixed(2)).toSignificantDigits().toNumber();
|
|
}else {
|
|
this.printCurrentPart.cartonCount = 0
|
|
}
|
|
},
|
|
async convertToBase64(fileUrls) {
|
|
this.base64List = []
|
|
for (const fileUrl of fileUrls) {
|
|
const base64Url = await this.getFileAsBase64(fileUrl);
|
|
this.base64List.push(base64Url);
|
|
}
|
|
},
|
|
getFileAsBase64(fileUrl) {
|
|
return new Promise((resolve, reject) => {
|
|
const img = new Image();
|
|
img.crossOrigin = 'Anonymous';
|
|
img.src = fileUrl;
|
|
img.onload = () => {
|
|
const canvas = document.createElement('canvas');
|
|
const ctx = canvas.getContext('2d');
|
|
canvas.width = img.width;
|
|
canvas.height = img.height;
|
|
ctx.drawImage(img, 0, 0);
|
|
const base64data = canvas.toDataURL('image/jpeg');
|
|
resolve(base64data);
|
|
};
|
|
img.onerror = (error) => {
|
|
reject(error);
|
|
};
|
|
});
|
|
},
|
|
async getTableUserColumn (tableId, columnId) {
|
|
let queryTableUser = {
|
|
userId: this.$store.state.user.name,
|
|
functionId: this.$route.meta.menuId,
|
|
tableId: tableId,
|
|
status: true,
|
|
languageCode: this.$i18n.locale
|
|
}
|
|
await getTableUserListLanguage(queryTableUser).then(({data}) => {
|
|
if (data.rows.length > 0) {
|
|
this.caseTable(data.rows,columnId)
|
|
} else {
|
|
this.getColumnList(tableId, columnId)
|
|
}
|
|
})
|
|
},
|
|
|
|
// 获取 tableDefault 列
|
|
async getColumnList (tableId, columnId) {
|
|
let queryTable = {
|
|
functionId: this.$route.meta.menuId,
|
|
tableId: tableId,
|
|
languageCode: this.$i18n.locale
|
|
}
|
|
await getTableDefaultListLanguage(queryTable).then(({data}) => {
|
|
if (data.rows.length > 0) {
|
|
this.caseTable(data.rows,columnId)
|
|
} else {
|
|
|
|
}
|
|
})
|
|
},
|
|
caseTable(list,columnId){
|
|
if (list.length > 0){
|
|
switch (columnId) {
|
|
case 1:
|
|
this.columnList = list
|
|
break;
|
|
case 2:
|
|
this.pictureColumnList = list
|
|
break;
|
|
case 3:
|
|
this.formatColumnList = list
|
|
break;
|
|
}
|
|
}
|
|
},
|
|
qtyPerCarton(){
|
|
return new Decimal(this.printCurrentPart.qtyPerRoll).mul(this.printCurrentPart.rollsPerCarton).toNumber()
|
|
},
|
|
totalShipQty(){
|
|
return new Decimal(this.printCurrentPart.qtyPerCarton).mul(this.printCurrentPart.cartonCount).toNumber()
|
|
},
|
|
getCategoryList(){
|
|
let params = {};
|
|
getCategoryList(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.partCategoryList = data.rows;
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
savePrintRollLabelRecord(){
|
|
// 新增 打印记录
|
|
let params = {
|
|
...this.printCurrentPart,
|
|
serialNumberList: this.serialNumberList.map((item)=>{
|
|
return item.serialNumber
|
|
}),
|
|
}
|
|
this.printLoading = true;
|
|
// 请求接口
|
|
savePrintRollLabelRecord(params).then(({data})=>{
|
|
if (data && data.code === 0) {
|
|
let labelList = this.labelFormatList.filter((item)=> item.labelType === 'Roll Label')
|
|
let prints = data.rows.map((item) => {
|
|
return {
|
|
qrCode: `(00)${item.partNo}(01)${item.qtyPerRoll}(02)${item.umName}(03)${item.manufacturerDate}(04)${item.serialNumber? item.serialNumber : ''}(05)${item.manufacturerNo? item.manufacturerNo : ''}(06)${item.moldCode? item.moldCode : ''}(07)(08)${item.rollNo}(09)(10)`,
|
|
ref: item.partNo,
|
|
rev: item.rev,
|
|
qty: item.qtyPerRoll,
|
|
uom: item.umName,
|
|
desc: item.partDesc,
|
|
date: item.manufacturerDate,
|
|
manufacturer: item.manufacturerNo,
|
|
moldCode: item.moldCode,
|
|
rollNo: item.rollNo,
|
|
sn: item.serialNumber,
|
|
rollLabelRequired: item.rollLabelRequired,
|
|
serialNumberRequired: item.serialNumberRequired,
|
|
serialNumber: item.serialNumber,
|
|
rollLabelFlag: item.rollLabelFlag,// 判断标签类型
|
|
offsetX:item.offsetX,
|
|
offsetY:item.offsetY,
|
|
direction:item.direction,
|
|
}
|
|
});
|
|
let qrCodeList = this.$refs.qrCode.init(prints.map((item)=>{
|
|
return item.qrCode
|
|
}))
|
|
for (let i = 0; i < qrCodeList.length; i++) {
|
|
prints[i].qrCode = qrCodeList[i]
|
|
}
|
|
let notFound = [];
|
|
for (let label of labelList) {
|
|
if (!this.printerSetupList.includes(label.defaultPrinterName)) {
|
|
notFound.push(label.defaultPrinterName)
|
|
continue
|
|
}
|
|
print_roll_label(prints,label.defaultPrinterName,this.printTest)
|
|
}
|
|
this.printTest = false
|
|
if (notFound.length > 0){
|
|
this.$message.warning(`The printer ${notFound.join(',')} is not found`)
|
|
return
|
|
}
|
|
this.$message.success(data.msg)
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
this.printLoading = false;
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
this.printLoading = false;
|
|
})
|
|
},
|
|
loadQrCode(){
|
|
let arr = ['2','4','6','8']
|
|
console.log(this.$refs.qrCode.init(arr))
|
|
},
|
|
getLodopPrinterName(){
|
|
const lodop = getLodop()
|
|
for (let i = 0; i < lodop.GET_PRINTER_COUNT(); i++) {
|
|
this.printerSetupList.push(lodop.GET_PRINTER_NAME(i))
|
|
}
|
|
},
|
|
handleGetExternalPartCustomerPage(){
|
|
let params = {
|
|
...this.searchPrinter,
|
|
site:this.$store.state.user.site,
|
|
no:this.no,
|
|
size:this.size,
|
|
}
|
|
getExternalPartCustomerPage(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.printerList = data.rows;
|
|
if (this.printerList.length > 0){
|
|
this.currentPart = {...this.printerList[0]}
|
|
}
|
|
this.total = data.total;
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
handleSizeChange(val){
|
|
this.size = val;
|
|
this.handleGetExternalPartCustomerPage();
|
|
},
|
|
handleCurrentChange(val){
|
|
this.no = val;
|
|
this.handleGetExternalPartCustomerPage();
|
|
},
|
|
handlePrintLogistic(){
|
|
this.$refs.logisticForm.validate((valid,obj) => {
|
|
if (valid){
|
|
this.savePrintLogisticLabel()
|
|
}else {
|
|
let i = 0
|
|
Object.keys(obj).forEach(key=>{
|
|
if (i++ === 0){
|
|
this.$message.warning(obj[key][0].message)
|
|
}
|
|
})
|
|
}
|
|
})
|
|
this.printLoading = false;
|
|
},
|
|
savePrintLogisticLabel() {
|
|
let params = {
|
|
...this.currentPartLogistic,
|
|
createBy: this.$store.state.user.name,
|
|
}
|
|
this.printLoading = true;
|
|
saveLogisticLabelRecord(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
let labelList = this.labelFormatList.filter((item)=> item.labelType === 'Logistic Label')
|
|
for (let i = 0; i < this.currentPartLogistic.countOfPallets; i++) {
|
|
let row = {
|
|
qrCode: `(00)${this.currentPartLogistic.partNo? this.currentPartLogistic.partNo : ''}(01)${this.currentPartLogistic.unitQtyPerPallet? this.currentPartLogistic.unitQtyPerPallet : ''}(02)${this.currentPartLogistic.umName? this.currentPartLogistic.umName : ''}(03)(04)(05)(06)(07)(08)(09)(10)${this.currentPartLogistic.poNo? this.currentPartLogistic.poNo : ''}`,
|
|
partNo:this.currentPartLogistic.partNo,
|
|
partDesc:this.currentPartLogistic.partDesc,
|
|
poNo:this.currentPartLogistic.poNo,
|
|
qty:this.currentPartLogistic.unitQtyPerPallet,
|
|
umName:this.currentPartLogistic.umName,
|
|
invoiceNo:this.currentPartLogistic.invoiceNo,
|
|
offsetX:data.row.offsetX,
|
|
offsetY:data.row.offsetY,
|
|
direction:data.row.direction,
|
|
}
|
|
let qrCodeList = this.$refs.qrCode.init([row.qrCode])
|
|
row.qrCode = qrCodeList[0]
|
|
let notFound = [];
|
|
for (let label of labelList) {
|
|
if (!this.printerSetupList.includes(label.defaultPrinterName)) {
|
|
notFound.push(label.defaultPrinterName)
|
|
continue
|
|
}
|
|
printLogisticLabel([row],label.defaultPrinterName,this.printTest)
|
|
}
|
|
this.printTest = false
|
|
if (notFound.length > 0){
|
|
this.$message.warning(`The printer ${notFound.join(',')} is not found`)
|
|
return
|
|
}
|
|
}
|
|
this.$message.success(data.msg)
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
this.printLoading = false;
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
this.printLoading = false;
|
|
})
|
|
},
|
|
handlePrintTest(val){
|
|
this.printTest = true
|
|
if (val === 0){
|
|
this.handlePrintOrSave();
|
|
}else {
|
|
this.handlePrintLogistic();
|
|
}
|
|
},
|
|
handleScan(){
|
|
// 判断是否为空
|
|
if (!this.scanObj.serialNumber){
|
|
this.$message.warning("Please input Serial Number")
|
|
return
|
|
}
|
|
// 判断是否重复
|
|
let map = this.scanSerialNumberList.map((item)=>item.serialNumber)
|
|
if(map.includes(this.scanObj.serialNumber)){
|
|
this.$message.warning("Serial Number already exists")
|
|
return
|
|
}
|
|
this.scanSerialNumberList.push(this.scanObj)
|
|
this.scanObj = {
|
|
serialNumber:''
|
|
}
|
|
},
|
|
deleteSerialNumber(index,type){
|
|
this.$confirm('Are you sure you want to delete Serial Number?', 'Warning', {
|
|
confirmButtonText: 'OK',
|
|
cancelButtonText: 'Cancel',
|
|
type: 'warning',
|
|
zIndex:3000
|
|
}).then(() => {
|
|
if (type === 'scan'){
|
|
this.scanSerialNumberList.splice(index,1)
|
|
}else if (type === 'end'){
|
|
this.serialNumberList.splice(index,1)
|
|
}
|
|
this.$message.success('success')
|
|
})
|
|
},
|
|
onChange(file, fileList){
|
|
const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
|
|
const whiteList = ["xls", "xlsx"];
|
|
if (whiteList.indexOf(fileSuffix) === -1) {
|
|
this.$message.error("Only Excel files (.xls, .xlsx) are allowed!");
|
|
this.fileList.splice(this.fileList.length - 1, 1);
|
|
return
|
|
}
|
|
this.fileList = fileList;
|
|
},
|
|
downloadTemplate(){
|
|
let params = {
|
|
orderRef1:'println',
|
|
orderRef2:'printlnExcel',
|
|
}
|
|
download(params).then(({data})=>{
|
|
// 不限制文件下载类型
|
|
const blob = new Blob([data], {type: "application/octet-stream"})
|
|
// 下载文件名称
|
|
const fileName = 'SN Template.xlsx'
|
|
// a标签下载
|
|
const linkNode = document.createElement('a')
|
|
// a标签的download属性规定下载文件的名称
|
|
linkNode.download = fileName
|
|
linkNode.style.display = 'none'
|
|
// 生成一个Blob URL
|
|
linkNode.href = URL.createObjectURL(blob)
|
|
document.body.appendChild(linkNode)
|
|
// 模拟在按钮上的一次鼠标单击
|
|
linkNode.click()
|
|
// 释放URL 对象
|
|
URL.revokeObjectURL(linkNode.href)
|
|
document.body.removeChild(linkNode)
|
|
})
|
|
},
|
|
handleImportExcel(){
|
|
if (null == this.fileList || 0 === this.fileList.length) {
|
|
this.$message.error("Please upload the file first!")
|
|
return false
|
|
}
|
|
// 提示将删除之前的数据
|
|
this.$confirm('Do you confirm the upload? If the Serial Number already exists, we will delete it!', 'Warning', {
|
|
confirmButtonText: 'OK',
|
|
cancelButtonText: 'Cancel',
|
|
type: 'warning',
|
|
zIndex:3000
|
|
}).then(() => {
|
|
// 判断文件是否上传
|
|
if (null == this.fileList || 0 === this.fileList.length) {
|
|
this.$message.error("please select the file you want to upload!")
|
|
return
|
|
}
|
|
const formData = new FormData()
|
|
formData.append("file", this.fileList[0].raw)
|
|
this.importExcelLoading = true;
|
|
importSerialNumber(formData).then(({data}) => {
|
|
if (data && data.code === 0){
|
|
this.serialNumberList = data.rows.map((item)=>{
|
|
return {
|
|
serialNumber:item,
|
|
}
|
|
})
|
|
this.importExcelVisible = false;
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
this.importExcelLoading = false;
|
|
})
|
|
}).catch(() => {
|
|
this.importExcelLoading = false;
|
|
});
|
|
},
|
|
handleSaveSerialNumber(){
|
|
if (this.scanSerialNumberList.length === 0){
|
|
this.$message.warning("Please input Serial Number")
|
|
return
|
|
}
|
|
this.serialNumberList = [...this.scanSerialNumberList]
|
|
this.$message.success("success")
|
|
this.serialNumberVisible = false
|
|
},
|
|
handleScanSerialNumber(){
|
|
this.scanSerialNumberList = [...this.serialNumberList]
|
|
this.serialNumberVisible = true
|
|
}
|
|
},
|
|
mounted () {
|
|
this.getLodopPrinterName();
|
|
},
|
|
created () {
|
|
// this.getExternalPartCustomerList();
|
|
this.handleGetExternalPartCustomerPage();
|
|
this.getCategoryList();
|
|
this.getTableUserColumn("30004Table",1)
|
|
this.getTableUserColumn("30004Table2",2)
|
|
this.getTableUserColumn("30004Table3",3)
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<div style="min-width: 800px;max-width: 1300px">
|
|
<el-form :model="searchPrinter" label-position="top">
|
|
<el-row :gutter="10">
|
|
<el-col :span="3">
|
|
<el-form-item label="Customer No">
|
|
<span slot="label" style="cursor:pointer;" @click="customerVisible=true"><a herf="#">Customer No</a></span>
|
|
<el-input v-model="searchPrinter.customerNo" clearable></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<el-form-item label="Customer Name">
|
|
<el-input v-model="searchPrinter.customerName" clearable></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="3">
|
|
<el-form-item label="Part Active">
|
|
<el-select v-model="searchPrinter.active" style="width: 100%;" placeholder="">
|
|
<el-option label="All" value=""></el-option>
|
|
<el-option label="Active" value="Y"></el-option>
|
|
<el-option label="Not Active" value="N"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="3">
|
|
<el-form-item label=" ">
|
|
<el-button type="primary" style="width: 60px" @click="handleGetExternalPartCustomerPage">Query</el-button>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row :gutter="10">
|
|
<el-col :span="3">
|
|
<el-form-item label="Part No">
|
|
<span slot="label" style="cursor:pointer;" @click="partVisible=true"><a herf="#">Part No</a></span>
|
|
<el-input v-model="searchPrinter.partNo" clearable></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<el-form-item label="Part Description">
|
|
<el-input v-model="searchPrinter.partDesc" clearable></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="3">
|
|
<el-form-item label="Part Category">
|
|
<el-select v-model="searchPrinter.category" style="width: 100%;" placeholder="">
|
|
<el-option label="All" value=""></el-option>
|
|
<el-option :label="item.categoryName" :value="item.categoryValue" :key="item.id" v-for="item in partCategoryList"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="12" >
|
|
<el-form-item label=" ">
|
|
<el-button type="primary" @click="handlePrint(0)">Print-Carton Label</el-button>
|
|
<el-button type="primary" v-if="$store.state.user.autoSerialNumber !== 'Y'" @click="handlePrint(1)" >Print-Roll Label</el-button>
|
|
<el-button type="primary" @click="handlePrintLogisticLabel">Print Logistic Label</el-button>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
</div>
|
|
<qr-code ref="qrCode"></qr-code>
|
|
<el-table :data="printerList" @row-click="handleClick" style="width: 100%;margin-top: 10px" border :height="height" :row-style="rowStyle">
|
|
<el-table-column
|
|
v-for="(item,index) in columnList" :key="index"
|
|
:sortable="item.columnSortable"
|
|
:prop="item.columnProp"
|
|
:header-align="item.headerAlign"
|
|
:show-overflow-tooltip="item.showOverflowTooltip"
|
|
:align="item.align"
|
|
:fixed="item.fixed===''?false:item.fixed"
|
|
:min-width="item.columnWidth"
|
|
:label="item.columnLabel">
|
|
<template slot-scope="scope">
|
|
<span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
|
|
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
|
|
style="width: 100px; height: 80px"/></span>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<el-pagination
|
|
@size-change="handleSizeChange"
|
|
@current-change="handleCurrentChange"
|
|
:current-page.sync="no"
|
|
:page-sizes="[50,100, 200, 300, 400]"
|
|
:page-size="size"
|
|
layout="sizes, prev, pager, next,total"
|
|
:total="total">
|
|
</el-pagination>
|
|
<el-tabs v-model="activeName">
|
|
<el-tab-pane label="Part Certification" name="picture">
|
|
<picture-module :column-list="pictureColumnList" :height="330" :part="currentPart" @refresh="getExternalPartPictureList" :of-components="true" :data-list="pictureList"></picture-module>
|
|
</el-tab-pane>
|
|
<el-tab-pane label="Linked Format" name="format">
|
|
<linked-format :column-list="formatColumnList" :height="330" :data-list="labelFormatList"></linked-format>
|
|
</el-tab-pane>
|
|
</el-tabs>
|
|
|
|
<el-dialog v-drag title="Print Label" :close-on-click-modal="false" @close="closePrintDialog" :visible.sync="printVisible" width="600px" modal-append-to-body>
|
|
<el-form :model="printCurrentPart" ref="printForm" :rules="printRules" label-position="top" >
|
|
<el-row :gutter="10">
|
|
<el-col :span="status === 0? 24:8">
|
|
<el-form-item label="Part No">
|
|
<el-input v-model="printCurrentPart.partNo" disabled></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="16" v-if="status !== 0">
|
|
<el-form-item label="PO" prop="orderNo" v-if="false" :show-message="false">
|
|
<el-input v-model="printCurrentPart.orderNo"></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="24">
|
|
<el-form-item label="Part Description">
|
|
<el-input v-model="printCurrentPart.partDesc" disabled></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="rowSpan" v-if="(status === 0 && printCurrentPart.showCartonQtyPerRoll === 'Y') || (status === 1 && printCurrentPart.showRollQtyPerRoll === 'Y')">
|
|
<el-form-item v-if="printCurrentPart.serialNumberRequired === 'Y'" :label="printCurrentPart.qtyPerRollLabel" :show-message="false">
|
|
<el-input-number :step="0" :min="1" :controls="false" v-model="printCurrentPart.qtyPerRoll" disabled></el-input-number>
|
|
</el-form-item>
|
|
<el-form-item v-else key="qtyPerRoll" :label="printCurrentPart.qtyPerRollLabel" prop="qtyPerRoll" :show-message="false">
|
|
<el-input-number :step="0" :min="1" :controls="false" v-model="printCurrentPart.qtyPerRoll"></el-input-number>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="rowSpan" v-if="status === 0 && printCurrentPart.showCartonRollsPerCarton === 'Y'">
|
|
<el-form-item v-if="printCurrentPart.serialNumberRequired === 'Y'" label="Rolls Per Carton" :show-message="false">
|
|
<el-input-number :step="0" :min="1" :controls="false" v-model="printCurrentPart.rollsPerCarton" disabled></el-input-number>
|
|
</el-form-item>
|
|
<el-form-item v-else key="rollsPerCarton" label="Rolls Per Carton" prop="rollsPerCarton" :show-message="false">
|
|
<el-input-number :step="0" :min="1" :controls="false" v-model="printCurrentPart.rollsPerCarton"></el-input-number>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="rowSpan" v-if="status === 0">
|
|
<el-form-item v-if="printCurrentPart.serialNumberRequired === 'Y'" label="Qty Per Carton" :show-message="false">
|
|
<el-input-number :step="0" :controls="false" v-model="printCurrentPart.qtyPerCarton" :disabled="printCurrentPart.editQtyPerCarton === 'N'"></el-input-number>
|
|
</el-form-item>
|
|
<el-form-item v-else label="Qty Per Carton" prop="qtyPerCarton" key="qtyPerCarton" :show-message="false">
|
|
<el-input-number :step="0" :controls="false" v-model="printCurrentPart.qtyPerCarton" :disabled="printCurrentPart.editQtyPerCarton === 'N'"></el-input-number>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="(status === 0 && rowSpan === 5)? rowSpan-1:rowSpan">
|
|
<el-form-item v-if="printCurrentPart.serialNumberRequired === 'Y' && $store.state.user.autoSerialNumber !== 'Y'" :label="status === 0 ? printCurrentPart.cartonCountLabel:printCurrentPart.rollCountLabel" :show-message="false">
|
|
<el-input-number :step="0" :min="1" :controls="false" v-model="printCurrentPart.cartonCount" disabled></el-input-number>
|
|
</el-form-item>
|
|
<el-form-item v-else key="cartonCount" :label="status === 0 ? printCurrentPart.cartonCountLabel:printCurrentPart.rollCountLabel" prop="cartonCount" :show-message="false">
|
|
<el-input-number :step="0" :min="1" :precision="0" :controls="false" v-model="printCurrentPart.cartonCount"></el-input-number>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="rowSpan">
|
|
<el-form-item v-if="printCurrentPart.serialNumberRequired === 'Y'" label="Total Ship Qty" :show-message="false">
|
|
<el-input-number :step="0" :min="0" :controls="false" v-model="printCurrentPart.totalShipQty" disabled></el-input-number>
|
|
</el-form-item>
|
|
<el-form-item v-else label="Total Ship Qty" prop="totalShipQty" key="totalShipQty" :show-message="false">
|
|
<el-input-number :step="0" :min="0" :controls="false" v-model="printCurrentPart.totalShipQty" disabled></el-input-number>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="24" v-if="printCurrentPart.category !== 'Hardware(Antenna)-Serials' || $store.state.user.autoSerialNumber !== 'Y'">
|
|
<!-- <el-form-item v-if="printCurrentPart.serialNumberRequired === 'Y'" key="serialNumber" label="Serial Number" prop="serialNumber" :show-message="false">-->
|
|
<!-- <el-input v-model="printCurrentPart.serialNumber"></el-input>-->
|
|
<!-- </el-form-item>-->
|
|
<el-form-item v-if="printCurrentPart.serialNumberRequired !== 'Y'" label="Serial Number" :show-message="false">
|
|
<el-input v-model="printCurrentPart.serialNumber" disabled></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-form-item label="Manufacturer Date" prop="manufacturerTime" :show-message="false">
|
|
<el-date-picker type="date"
|
|
placeholder=" " value-format="yyyy-MM-dd HH:mm:ss" v-model="printCurrentPart.manufacturerTime" style="width: 100%">
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-form-item v-if="printCurrentPart.manufacturerRequired === 'Y'" key="manufacturerNo" label="Manufacturer" prop="manufacturerNo" :show-message="false">
|
|
<el-select v-model="printCurrentPart.manufacturerNo" style="width: 100%" placeholder="">
|
|
<el-option v-for="item in manufacturerList" :key="item.manufacturerNo" :label="item.manufacturerNo" :value="item.manufacturerNo">
|
|
<span style="float: left">{{ item.manufacturerNo }}</span>
|
|
</el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item v-else label="Manufacturer" :show-message="false">
|
|
<el-select v-model="printCurrentPart.manufacturerNo" style="width: 100%" disabled placeholder="">
|
|
<el-option v-for="item in manufacturerList" :key="item.manufacturerNo" :label="item.manufacturerNo" :value="item.manufacturerNo">
|
|
<span style="float: left">{{ item.manufacturerNo }}</span>
|
|
</el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-form-item v-if="printCurrentPart.moldCodeRequired === 'Y'" key="moldCode" label="Mold Code" prop="moldCode" :show-message="false">
|
|
<el-input v-model="printCurrentPart.moldCode" ></el-input>
|
|
</el-form-item>
|
|
<el-form-item v-else label="Mold Code" :show-message="false">
|
|
<el-input v-model="printCurrentPart.moldCode" disabled></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row :gutter="10" v-if="$store.state.user.autoSerialNumber === 'Y' && printCurrentPart.category === 'Hardware(Antenna)-Serials'">
|
|
<el-col :span="8">
|
|
<el-form-item label="Template">
|
|
<el-select v-model="printCurrentPart.templateNo" style="width: 100%">
|
|
<el-option v-for="item in templateList" :key="item.templateNo" :label="item.templateName" :value="item.templateNo"/>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-form-item label="Label Type">
|
|
<el-select v-model="printCurrentPart.printLabelType" style="width: 100%">
|
|
<el-option label="Carton Label & Product Label" :value="0"></el-option>
|
|
<el-option label="Carton Label" :value="1"></el-option>
|
|
<el-option label="Product Label" :value="2"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row :gutter="10" v-if="printCurrentPart.serialNumberRequired === 'Y' && (printCurrentPart.category !== 'Hardware(Antenna)-Serials' || $store.state.user.autoSerialNumber !== 'Y')">
|
|
<el-col :span="6">
|
|
Serial Number List
|
|
</el-col>
|
|
<el-col :span="14">
|
|
<el-button type="primary" @click="importExcelVisible = true">Import from Excel</el-button>
|
|
<el-button type="primary" @click="handleScanSerialNumber">Individual Serial Number</el-button>
|
|
</el-col>
|
|
<el-col :span="2">
|
|
<div style="text-align: right;color: #00a0e9">Total:</div>
|
|
</el-col>
|
|
<el-col :span="2">
|
|
<div style="color: #00a0e9">{{serialNumberList.length}}</div>
|
|
</el-col>
|
|
<el-col :span="24">
|
|
<el-table :data="serialNumberList" height="200px" border>
|
|
<el-table-column label="Serial Number" prop="serialNumber" min-width="300"></el-table-column>
|
|
<el-table-column min-width="100" label="Action">
|
|
<template slot-scope="{row,$index}">
|
|
<a @click="deleteSerialNumber($index,'end')">Delete</a>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
<div slot="footer" style="text-align: center; margin-top: 10px">
|
|
<el-row :gutter="10">
|
|
<el-col :span="8">
|
|
<el-button type="primary" icon="el-icon-printer" :loading="printLoading" style="width: 40px;float:left;" @click="handlePrintTest(0)"></el-button>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-button type="primary" :loading="printLoading" style="width: 60px" @click="handlePrintOrSave">Print</el-button>
|
|
<el-button style="width: 60px" @click="printVisible = false">Cancel</el-button>
|
|
</el-col>
|
|
</el-row>
|
|
</div>
|
|
</el-dialog>
|
|
|
|
<el-dialog v-drag title="Print Label" :close-on-click-modal="false" :visible.sync="logisticVisible" width="400px">
|
|
<el-form :model="currentPartLogistic" label-position="top" :rules="printRules" ref="logisticForm">
|
|
<el-row :gutter="10">
|
|
<el-col :span="12">
|
|
<el-form-item label="Part No" :show-message="false">
|
|
<el-input v-model="currentPartLogistic.partNo" disabled></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="24">
|
|
<el-form-item label="Part Description" :show-message="false">
|
|
<el-input v-model="currentPartLogistic.partDesc" disabled></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<el-form-item label="PO No" prop="poNo" :show-message="false">
|
|
<el-input v-model="currentPartLogistic.poNo"></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<el-form-item label="Invoice No" :show-message="false">
|
|
<el-input v-model="currentPartLogistic.invoiceNo"></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<el-form-item label="Unit Qty per Pallet" prop="unitQtyPerPallet" :show-message="false">
|
|
<el-input-number :controls="false" :step="0" :min="0" v-model="currentPartLogistic.unitQtyPerPallet"></el-input-number>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<el-form-item label="Count of Pallets" prop="countOfPallets" :show-message="false">
|
|
<el-input-number :controls="false" :step="0" :min="1" v-model="currentPartLogistic.countOfPallets"></el-input-number>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
<div slot="footer" style="text-align: center; margin-top: 10px">
|
|
<el-row :gutter="10">
|
|
<el-col :span="7">
|
|
<el-button type="primary" icon="el-icon-printer" :loading="printLoading" style="width: 40px;float:left;" @click="handlePrintTest(1)"></el-button>
|
|
</el-col>
|
|
<el-col :span="10">
|
|
<el-button type="primary" :loading="printLoading" style="width: 60px" @click="handlePrintLogistic">Print</el-button>
|
|
<el-button style="width: 60px" @click="logisticVisible = false">Cancel</el-button>
|
|
</el-col>
|
|
</el-row>
|
|
</div>
|
|
</el-dialog>
|
|
|
|
<el-dialog v-drag title="Individual Serial Number" top="20vh" :visible.sync="serialNumberVisible" append-to-body :close-on-click-modal="false" width="600px">
|
|
<el-form :model="scanObj" label-position="top" @submit.native.prevent>
|
|
<el-form-item label="Serial Number(Press Enter after scanning/input)" :show-message="false">
|
|
<el-input v-model="scanObj.serialNumber" @keyup.enter.native="handleScan"></el-input>
|
|
</el-form-item>
|
|
</el-form>
|
|
<el-table :data="scanSerialNumberList" height="200px" border>
|
|
<el-table-column label="Serial Number" prop="serialNumber" min-width="300"></el-table-column>
|
|
<el-table-column min-width="100" label="Action">
|
|
<template slot-scope="{row,$index}">
|
|
<a @click="deleteSerialNumber($index,'scan')">Delete</a>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
|
|
<div style="color: #00a0e9">Total: {{scanSerialNumberList.length}}</div>
|
|
<div slot="footer" style="text-align: center; margin-top: 10px">
|
|
<el-button type="primary" style="width: 60px" @click="handleSaveSerialNumber">Save</el-button>
|
|
<el-button style="width: 60px" @click="serialNumberVisible = false">Cancel</el-button>
|
|
</div>
|
|
</el-dialog>
|
|
|
|
|
|
<el-dialog v-drag title="Import from Excel" top="20vh" :visible.sync="importExcelVisible" modal-append-to-body :close-on-click-modal="false" width="390px">
|
|
<div style="margin-top: 5px; margin-bottom: 10px">
|
|
<el-button type="primary" @click="downloadTemplate">Download file template</el-button>
|
|
</div>
|
|
<el-upload class="customer-upload" :file-list="fileList" drag action="javascript:void(0);" ref="uploadFile" :limit="1" accept=".xlsx,.xls"
|
|
:on-remove="onChange" :on-change="onChange" :auto-upload="false">
|
|
<i class="el-icon-upload"></i>
|
|
<div class="el-upload__text">Drag the file here,or<em> click to upload</em></div>
|
|
</el-upload>
|
|
<div slot="footer" style="text-align: center; margin-top: 10px">
|
|
<el-button type="primary" :loading="importExcelLoading" @click="handleImportExcel">{{importExcelLoading?'Saving...':'Save'}}</el-button>
|
|
<el-button style="width: 60px" @click="importExcelVisible = false">Cancel</el-button>
|
|
</div>
|
|
</el-dialog>
|
|
|
|
<el-dialog v-drag title="Select Part" :close-on-click-modal="false" :visible.sync="partVisible">
|
|
<external-part :height="450" :of-components="true" @rowClick="handlePartRowClick"></external-part>
|
|
<div slot="footer" style="text-align: center; margin-top: 10px"></div>
|
|
</el-dialog>
|
|
<el-dialog v-drag title="Select Customer" :close-on-click-modal="false" :visible.sync="customerVisible">
|
|
<customer-info :height="450" :of-components="true" @rowClick="handleCustomerRowClick"></customer-info>
|
|
<div slot="footer" style="text-align: center; margin-top: 10px"></div>
|
|
</el-dialog>
|
|
|
|
<div v-show="false">
|
|
<img :src="item" v-for="(item,index) in base64List" :key="index" style="display: none">
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
|
|
</style>
|