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

<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>