import { disAutoConnect, hiprint, defaultElementTypeProvider } from 'vue-plugin-hiprint' disAutoConnect(); import { Loading } from 'element-ui'; import panel from '@/utils/panel' import { addPrint, getDtailPrintDis } from "@/api/supply/pickup"; import { getDeliverDetail } from "@/api/supply/deliver"; import { addPrints } from "@/api/supply/pickup"; import { getCompanyList } from "@/api/user"; export default { data() { return { company: '', // 公司名称 clonelData: [], // 克隆数据 outputData: [], // 打印数据 curPaper: { type: 'A5', width: 500, height: 147.6 }, paperTypes: { 'A3': { width: 420, height: 296.6 }, 'A4': { width: 210, height: 296.6 }, 'A5': { width: 210, height: 147.6 }, 'B3': { width: 500, height: 352.6 }, 'B4': { width: 250, height: 352.6 }, 'B5': { width: 250, height: 175.6 } }, scaleValue: 1, scaleMax: 5, scaleMin: 0.5, loading: false, hiprintTemplate: '', addIds: [] }; }, computed: { curPaperType() { let type = 'other' let types = this.paperTypes for (const key in types) { let item = types[key] let { width, height } = this.curPaper if (item.width === width && item.height === height) { type = key } } return type } }, created() { this.getCompanyLists() }, methods: { // 初始化打印模板 initPrint() { hiprint.init({ providers: [new defaultElementTypeProvider()] }); // 替换配置 hiprint.setConfig({ movingDistance: 2.5, text: { supportOptions: [ { name: 'styler', hidden: true }, { name: 'formatter', hidden: true }, ] } }) // eslint-disable-next-line no-undef hiprint.PrintElementTypeManager.buildByHtml($('.ep-draggable-item')); this.hiprintTemplate = new hiprint.PrintTemplate({ template: panel, settingContainer: '#PrintElementOptionSetting', paginationContainer: '.hiprint-printPagination' }); this.hiprintTemplate.design('#hiprint-printTemplate'); // 获取当前放大比例, 当zoom时传true 才会有 // this.scaleValue = hiprintTemplate.editingPanel.scale || 1; }, /** * 获取需要打印数据详情 * @param {Array} ids */ async getDateil(ids, funcType = 'getDeliverDetail') { // 兼容多个打印数据 ids = ids instanceof Array ? ids : [ids] console.log(ids); // 清空之前打印的数据 this.outputData = []; // 筛选id let formatting = []; // 仓库认证请求接口参数 let params = [] // 获取数据id for (let i = ids.length; i > 0; i--) { formatting.push(ids[i - 1].id || ids[i - 1]); if (funcType === 'getDtailPrintDis') { params.push( { id: ids[i - 1].id, invoiceId: ids[i - 1].invoiceId }) this.addIds.push(ids[i - 1].id) } } if (funcType === 'getDtailPrintDis') { const requestParams = params try { const { data } = await getDtailPrintDis(requestParams); for (let i = data.length; i > 0; i--) { setTimeout(async () => { const newData = data[i - 1]; await this.mySetData(newData) }, 0); } } catch (error) { console.error('获取打印数据失败') } } else { // id 去重 formatting = [...new Set(formatting)]; for (let i = formatting.length; i > 0; i--) { // 延迟请求 setTimeout(async () => { const requestParams = { id: formatting[i - 1] } try { const { data } = await getDeliverDetail(requestParams); this.mySetData(data) } catch (error) { console.error('获取打印数据失败') } }, 0); } } }, mySetData(data) { // 初始化打印次数 let printNum = 0 //避免数据发生改变 this.clonelData.push(JSON.parse(JSON.stringify(data))) // 需要计算长度和数据裁切 let invoicePickBeans = data.invoicePickBeans; // 获取length向上取整 let len = Math.ceil(invoicePickBeans.length / 5); for (let index = 0; index < len; index++) { const table = []; // length <= 0 则不执行打印 if (invoicePickBeans.length) { // 取第一个条数据printNum printNum = invoicePickBeans[0].printNum const newInvoicePickBeans = invoicePickBeans.splice(0, 5); for (let e = newInvoicePickBeans.length; e > 0; e--) { const tempData = newInvoicePickBeans[e - 1]; //添加表格数据 table.push({ salesId: tempData.salesOrderId, invoiceId: tempData.invoiceId, id: tempData.id, createTime: tempData.id ? this.dateToDayFilter(tempData.createTime) : '', enginOrderType: tempData.orderType == "HOME" || tempData.orderType == "TRADE" ? tempData.enginOrderNo : tempData.mainOrderId, materialName: tempData.materialName, specification: tempData.specification, refundableQty: tempData.refundableQty, pjxh1Text: tempData.pjxh1Text, }); } } // 添加print输出数据 this.outputData.push({ pageNumber: `${len}-${index + 1}`, printNum, type: data.type, tiTui: data.type === 2 ? `退货人` : `提货人`, takerPhone: data.takerPhone || '', headerRemark: data.remark, total_num: data.total_num, company: data.type === 2 ? `${this.company}销售退货单` : `${this.company}销售发货单`, pickOrderWater: data.pickOrderWater, customerNumber: data.customerNumber, takerDa: '', nowDate: this.nowDate(), takerName: data.type === 2 ? `退货人:${data.takerName || ''}` : `提货人:${data.takerName || ''}`, customerName: data.customerName || '', correspondName: data.correspondName, correspondNames: '', pickCar: data.pickCar || '', createBy: JSON.parse(localStorage.getItem("supply_user")).nickName, table, }); } }, // 获取公司名称 async getCompanyLists() { try { const { data } = await getCompanyList(); this.company = data ? data[0].companyName : ''; } catch (error) { console.error('获取公司名称失败') } }, // 获取当前时间 nowDate() { var date = new Date(); var seperator1 = "-"; var year = date.getFullYear(); var month = date.getMonth() + 1; var strDate = date.getDate(); if (month >= 1 && month <= 9) { month = "0" + month; } if (strDate >= 0 && strDate <= 9) { strDate = "0" + strDate; } var currentdate = year + seperator1 + month + seperator1 + strDate; console.log(currentdate); return currentdate; }, // 格式化时间 dateToDayFilter(date) { if (!date) { return ''; } return date.slice(0, 10); }, // 添加次数 async addPrint(funcType = 'getDeliverDetail') { let ids = [] for (let i = this.clonelData.length; i > 0; i--) { const tempData = this.clonelData[i - 1].invoicePickBeans; if (tempData.length) { for (let e = tempData.length; e > 0; e--) { const newTempData = tempData[e - 1]; ids.push(newTempData.id) } } else { return this.clonelData[i - 1].invoiceOrderId || this.clonelData[i - 1].id } } try { let requestParams = {} if (funcType === 'getDtailPrintDis') { ids = [...new Set(this.addIds)] requestParams = { ids: ids.join(',') } funcType = addPrint } else { requestParams = { ids: ids.join(',') } funcType = addPrints } await funcType(requestParams) } catch (error) { console.error('添加打印次数失败'); } }, /** * 设置纸张大小 * @param type [A3, A4, A5, B3, B4, B5, other] * @param value {width,height} mm */ setPaper(type, value) { try { if (Object.keys(this.paperTypes).includes(type)) { this.curPaper = { type: type, width: value.width, height: value.height } this.hiprintTemplate.setPaper(value.width, value.height) } else { this.curPaper = { type: 'other', width: value.width, height: value.height } this.hiprintTemplate.setPaper(value.width, value.height) } } catch (error) { this.$message.error(`操作失败: ${error}`) } }, }, };