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.
630 lines
21 KiB
630 lines
21 KiB
<script>
|
|
import ExternalPart from '../part/external.vue'
|
|
import CustomerInfo from '../customer/info.vue'
|
|
import {getPrintLabelRecordList, getPrintLabelRecordPage} from '../../../api/label/printLabelRecord'
|
|
import { printAlphaHardTagLabel} from '../../../printFormat/alphaHardTagPrintFormat'
|
|
import SelectionTable from '../../common/selectionTable.vue'
|
|
import {getExternalPartPicturePartList} from '../../../api/part/externalPartPicture'
|
|
import {printAntennaLabel} from '../../../printFormat/antenna'
|
|
import {printRF_RFIDLabel} from '../../../printFormat/RF_RFID'
|
|
import {
|
|
getRollPrinterNameList,
|
|
selectLabelFormatUserDefaultPrintListByUserId
|
|
} from '../../../api/label/labelFormatUserDefault'
|
|
import getLodop from '@/utils/LodopFuncs.js'
|
|
import {getTableDefaultListLanguage, getTableUserListLanguage} from '../../../api/table'
|
|
import {getPrintRollLabelRecord, getPrintRollLabelRecordPage} from '../../../api/label/printRollLabelRecord'
|
|
import QrCode from './QrCode.vue'
|
|
import {print_roll_label} from '../../../printFormat/roll_label'
|
|
|
|
const printRecord = {
|
|
customerNo: '',
|
|
customerName: '',
|
|
partNo: '',
|
|
partDesc: '',
|
|
startDate: '',
|
|
endDate: ''
|
|
}
|
|
export default {
|
|
name: 'roll',
|
|
components: {QrCode, SelectionTable, CustomerInfo, ExternalPart},
|
|
props: {
|
|
height: {
|
|
type: Number,
|
|
default: 700
|
|
}
|
|
},
|
|
data () {
|
|
return {
|
|
printerSetupList:[],
|
|
customerVisible: false,
|
|
partVisible: false,
|
|
printRecord: {
|
|
...printRecord
|
|
},
|
|
no:1,
|
|
size: 50,
|
|
total: 0,
|
|
printLabelRecordList: [],
|
|
selectionPrintLabelRecordList: [],
|
|
columnList: [
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30005,
|
|
serialNumber: '30005TableRollNo',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
columnProp: 'rollNo',
|
|
headerAlign: 'center',
|
|
align: 'left',
|
|
columnLabel: 'Roll No',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
}, {
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30005,
|
|
serialNumber: '30005TableCustomerNo',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
columnProp: 'customerNo',
|
|
headerAlign: 'center',
|
|
align: 'left',
|
|
columnLabel: 'Customer No',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100
|
|
}, {
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30005,
|
|
serialNumber: '30005TableCustomerName',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
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: 30005,
|
|
serialNumber: '30005TablePartNo',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
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: 30005,
|
|
serialNumber: '30005TablePartDesc',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
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: 30005,
|
|
serialNumber: '30005TableQtyPerRoll',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
columnProp: 'qtyPerRoll',
|
|
headerAlign: 'center',
|
|
align: 'right',
|
|
columnLabel: 'Qty Per Roll',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
}, {
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30005,
|
|
serialNumber: '30005TableTotalShipQty',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
columnProp: 'totalShipQty',
|
|
headerAlign: 'center',
|
|
align: 'right',
|
|
columnLabel: 'Total Ship Qty',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
}, {
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30005,
|
|
serialNumber: '30005TableCartonCount',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
columnProp: 'cartonCount',
|
|
headerAlign: 'center',
|
|
align: 'right',
|
|
columnLabel: 'Roll Count',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
}, {
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30005,
|
|
serialNumber: '30005TableSerialNumber',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
columnProp: 'serialNumber',
|
|
headerAlign: 'center',
|
|
align: 'left',
|
|
columnLabel: 'Serial Number',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
}, {
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30005,
|
|
serialNumber: '30005TableManufacturerNo',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
columnProp: 'manufacturerNo',
|
|
headerAlign: 'center',
|
|
align: 'left',
|
|
columnLabel: 'Manufacturer',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
}, {
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30005,
|
|
serialNumber: '30005TableMoldCode',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
columnProp: 'moldCode',
|
|
headerAlign: 'center',
|
|
align: 'left',
|
|
columnLabel: 'Mold Code',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
}, {
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30005,
|
|
serialNumber: '30005TableManufacturerDate',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
columnProp: 'manufacturerDate',
|
|
headerAlign: 'center',
|
|
align: 'left',
|
|
columnLabel: 'Manufacturer Date',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
}, {
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30005,
|
|
serialNumber: '30005TableCreateBy',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
columnProp: 'createBy',
|
|
headerAlign: 'center',
|
|
align: 'left',
|
|
columnLabel: 'Created By',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120
|
|
}, {
|
|
userId: this.$store.state.user.name,
|
|
functionId: 30005,
|
|
serialNumber: '30005TableCreateTime',
|
|
tableId: '30005Table',
|
|
tableName: '发货标签记录表',
|
|
columnProp: 'createTime',
|
|
headerAlign: 'center',
|
|
align: 'left',
|
|
columnLabel: 'CreateTime',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 10,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 140
|
|
}
|
|
],
|
|
}
|
|
},
|
|
watch:{
|
|
"printRecord.customerNo"(newVal, oldVal){
|
|
this.printRecord.customerNo = newVal.toUpperCase();
|
|
},
|
|
"printRecord.partNo"(newVal, oldVal){
|
|
this.printRecord.partNo = newVal.toUpperCase();
|
|
}
|
|
},
|
|
methods: {
|
|
handlePartRowClick (row) {
|
|
this.printRecord.partNo = row.partNo
|
|
this.partVisible = false
|
|
},
|
|
handleCustomerRowClick (row) {
|
|
this.printRecord.customerNo = row.customerNo
|
|
this.customerVisible = false
|
|
},
|
|
getPrintLabelRecordList () {
|
|
let params = {
|
|
...this.printRecord,
|
|
site: this.$store.state.user.site,
|
|
}
|
|
getPrintRollLabelRecordPage(params,this.no,this.size).then(({data}) => {
|
|
if (data && data.code === 0) {
|
|
this.printLabelRecordList = data.rows
|
|
this.total = data.total
|
|
} else {
|
|
this.$message.warning(data.message)
|
|
}
|
|
}).catch((error) => {
|
|
this.$message.error(error.message)
|
|
})
|
|
},
|
|
handleSelectionChange (val) {
|
|
this.selectionPrintLabelRecordList = val
|
|
},
|
|
async handlePrintLabel () {
|
|
if (this.selectionPrintLabelRecordList.length === 0) {
|
|
this.$message.warning('please select record')
|
|
return
|
|
}
|
|
let ids = this.selectionPrintLabelRecordList.map((item) => {
|
|
return item.id
|
|
})
|
|
getPrintRollLabelRecord(ids).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.handlePrint(data.rows)
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error.message)
|
|
})
|
|
},
|
|
handlePrint(list){
|
|
let params = list.map((item) => {
|
|
return {
|
|
site:item.site,
|
|
partNo:item.partNo,
|
|
customerNo:item.customerNo,
|
|
username:this.$store.state.user.name,
|
|
rollNo:item.rollNo,
|
|
category:item.category,
|
|
}
|
|
})
|
|
getRollPrinterNameList(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
for (let i = 0; i < this.selectionPrintLabelRecordList.length; i++) {
|
|
let record = this.selectionPrintLabelRecordList[i]
|
|
let printerNameList = data.rows[i].filter((item)=> item.labelType === 'Roll Label')
|
|
let arr = []
|
|
arr.push(record)
|
|
for (let j = 0; j < printerNameList.length; j++) {
|
|
arr = arr.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}`,
|
|
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,
|
|
}
|
|
})
|
|
let qrCodeList = this.$refs.qrCode.init(arr.map((item)=>{
|
|
return item.qrCode
|
|
}))
|
|
for (let i = 0; i < qrCodeList.length; i++) {
|
|
arr[i].qrCode = qrCodeList[i]
|
|
}
|
|
print_roll_label(arr,printerNameList[j].defaultPrinterName)
|
|
}
|
|
this.$message.success(data.msg)
|
|
}
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error.message)
|
|
})
|
|
|
|
},
|
|
printLabel(pictureList,formatList){
|
|
let prints = this.selectionPrintLabelRecordList.map((item) => {
|
|
return {
|
|
qrCode: `(00)${item.partNo}(01)${item.qtyPerCarton}(02)${item.umName}(03)${item.manufacturerDate}(04)${item.serialNumber}(05)${item.manufacturerNo}(06)${item.moldCode}(07)${item.boxNo}(08)`,
|
|
ref: item.partNo,
|
|
qty: item.qtyPerCarton,
|
|
productRev: item.rev,
|
|
uom: item.umName,
|
|
desc: item.partDesc,
|
|
rollCount: item.qtyPerRoll,
|
|
date: item.manufacturerDate,
|
|
manufacturer: item.manufacturerNo,
|
|
moldCode: item.moldCode,
|
|
sn: item.serialNumber,
|
|
}
|
|
})
|
|
let notFound = [];
|
|
for (let i = 0; i < prints.length; i++) {
|
|
let print = prints[i]
|
|
let dataList = []
|
|
dataList.push(print);
|
|
// 获取模板数量
|
|
let format = formatList[i]
|
|
let base64List = pictureList[i].map((item)=>{return {icon:item}})
|
|
|
|
for (let formatElement of format) {
|
|
let str = formatElement.split('(type)')
|
|
if (!this.printerSetupList.includes(str[0])) {
|
|
if (notFound.includes(str[0])){
|
|
continue
|
|
}
|
|
notFound.push(str[0])
|
|
continue
|
|
}
|
|
if (str[1] === 'Alpha/Hard Tag'){
|
|
printAlphaHardTagLabel(dataList,base64List,str[0])
|
|
}else if (str[1] === 'Hardware(Antenna)'){
|
|
printAntennaLabel(dataList,base64List,str[0])
|
|
}else if (str[1] === 'RF' || str[1] === 'RFID'){
|
|
printRF_RFIDLabel(dataList,base64List,str[0])
|
|
}
|
|
}
|
|
}
|
|
this.$refs.table.clearSelection()
|
|
if (notFound.length > 0){
|
|
this.$message.warning(`The printer ${notFound.join(',')} is not found`)
|
|
}else {
|
|
this.$message.success("Print label success")
|
|
}
|
|
},
|
|
handleSizeChange(val){
|
|
this.size = val
|
|
this.getPrintLabelRecordList()
|
|
},
|
|
handleCurrentChange(val){
|
|
this.no = val
|
|
this.getPrintLabelRecordList()
|
|
},
|
|
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;
|
|
}
|
|
}
|
|
},
|
|
},
|
|
mounted () {
|
|
const lodop = getLodop()
|
|
for (let i = 0; i < lodop.GET_PRINTER_COUNT(); i++) {
|
|
this.printerSetupList.push(lodop.GET_PRINTER_NAME(i))
|
|
}
|
|
},
|
|
created () {
|
|
// this.getPrintLabelRecordList()
|
|
this.getTableUserColumn('30006Table',1)
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<div style="min-width: 600px;max-width: 1000px">
|
|
<el-form :model="printRecord" label-position="top">
|
|
<el-row :gutter="20">
|
|
<el-col :span="4">
|
|
<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="printRecord.customerNo" clearable></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="7">
|
|
<el-form-item label="Customer Name">
|
|
<el-input v-model="printRecord.customerName" clearable></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-row>
|
|
<el-col :span="11">
|
|
<el-form-item label="Created Time">
|
|
<el-date-picker
|
|
v-model="printRecord.startDate"
|
|
style="width: 100%;"
|
|
type="date"
|
|
placeholder=" ">
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="2">
|
|
<el-form-item label=" ">
|
|
<div style="text-align: center"><i class="el-icon-right"></i></div>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="11">
|
|
<el-form-item label=" ">
|
|
<el-date-picker
|
|
v-model="printRecord.endDate"
|
|
style="width: 100%;"
|
|
type="date"
|
|
placeholder=" ">
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row :gutter="20">
|
|
<el-col :span="4">
|
|
<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="printRecord.partNo" clearable></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="7">
|
|
<el-form-item label="Part Description">
|
|
<el-input v-model="printRecord.partDesc" clearable></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<el-form-item label=" ">
|
|
<el-button type="primary" style="width: 60px" @click="getPrintLabelRecordList">Query</el-button>
|
|
<el-button type="primary" style="width: 60px" @click="handlePrintLabel">Print</el-button>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
</div>
|
|
|
|
<el-table :data="printLabelRecordList" ref="table" @selection-change="handleSelectionChange"
|
|
style="width: 100%;margin-top: 10px" border :height="height">
|
|
<el-table-column type="selection" width="55" fixed="left" align="center"></el-table-column>
|
|
<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>
|
|
<div>
|
|
<selection-table :size="selectionPrintLabelRecordList.length" :total="total"></selection-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">
|
|
</el-pagination>
|
|
</div>
|
|
<qr-code ref="qrCode"></qr-code>
|
|
<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>
|
|
</template>
|
|
|
|
<style scoped>
|
|
|
|
</style>
|