import { store } from '@/store'; import PrinterJobs from '@/utils/bluetoothPrinter/printerjobs' import printerUtil from '@/utils/bluetoothPrinter/printerutil.js' import util from '@/utils/bluetoothPrinter/util.js' import { getStorage } from '../storage'; import { timeFormatHMS } from '../tools'; /************************************************* * 打印机模板 * @param {string} size 模板大小 0:小号 1:中号 2:大号 * @return {} 蓝牙打印订单 */ const printerTemplate = async function (data: AnyObject) { let tmpOrder = data.orderInfo let tmpSkus = data.skus let storeName = store.state.storeInfo.allStoreInfo.name ? store.state.storeInfo.allStoreInfo.name : '京西到家' let storeTel = store.state.storeInfo.allStoreInfo.tel1 ? store.state.storeInfo.allStoreInfo.tel1 : '18048531223' let p = new PrinterJobs() let size = +getStorage('printerRetrySize') || 0 switch (size) { // 小号 case 0: // 平台名称 p .clear() .setSize(2, 2) .setAlign('ct') .print(`${vendorID2(tmpOrder.vendorID)}`) // 分割线 .setSize(1, 1) .print(printerUtil.fillLine()) // 下单时间 .setSize(1, 1) .setAlign('lt') .print(`下单时间:${timeFormatHMS(tmpOrder.orderCreatedAt)}`) // 预计送达时间 .setSize(1, 1) .setAlign('lt') .print(`预计送达:${expectTime(tmpOrder)}`) // 客户姓名 .setSize(1, 1) .setAlign('lt') .print(`客户姓名:${tmpOrder.consigneeName}`) // 客户电话 .setSize(1, 1) .setAlign('lt') .print(`客户电话:${tmpOrder.consigneeMobile}`) // 订单编号 .setSize(1, 2) .setAlign('lt') .printArrayP(30) .print(`订单编号:${tmpOrder.vendorOrderID}`) // 订单序号 .setSize(2, 2) .setBold(true) .setAlign('ct') .printArrayP(30) .print(`${vendorID2(tmpOrder.vendorID)}#${tmpOrder.orderSeq}`) // 条形码 if (tmpOrder.vendorOrderID.length < 18 && !getStorage('printerCompatible')) { p .printQrFormat(tmpOrder.vendorOrderID) .print(tmpOrder.vendorOrderID) } // 饿佰取货码 if (tmpOrder.vendorID === 3) { p .setSize(1, 2) .setAlign('ct') .printArrayP(30) .print(`淘宝闪购取货码: ${tmpOrder.vendorOrderID2.slice(tmpOrder.vendorOrderID2.length - 4)}`) } // 分割线 p .setSize(1, 1) .print(printerUtil.fillLine()) // 客户地址 .setSize(1, 2) .setAlign('lt') .print(`客户地址:${tmpOrder.consigneeAddress}`) // 分割线 .setSize(1, 1) .print(printerUtil.fillLine()) // 客户备注 .setSize(1, 2) .setAlign('lt') .print(`客户备注:${tmpOrder.buyerComment}`) // 分割线 .setSize(1, 1) .print(printerUtil.fillLine()) // 商品列表 .setSize(1, 1) .setAlign('lt') .print('商品列表') if (!getStorage('printerGoodsMoney')) { // 打印 p .print('品名 数量 单价') .print(printerUtil.fillLine()) tmpSkus.forEach((item: any, index: number) => { console.log('ZSW-item', item); let comparePrice = item.vendorPrice / 100 p.print(`${index + 1}.${item.skuName}`) p.print(util.goodsGandle('', `x${item.count}`, `¥${(comparePrice * 1).toFixed(2)}`)) // 蓝牙打印机地方设置打印 upc if (getStorage('isPrinterUpc') && item.upc) { p.print(`UPC: ${item.upc}`) } p.print(printerUtil.fillLine()) }) } else { // 不打印 p .print('品名 数量') .print(printerUtil.fillLine()) tmpSkus.forEach((item: any, index: number) => { p.print(`${index + 1}.${item.skuName}`) p.print(util.goodsGandle('', '', `x${item.count}`)) // 蓝牙打印机地方设置打印 upc if (getStorage('isPrinterUpc') && item.upc) { p.print(`UPC: ${item.upc}`) } p.print(printerUtil.fillLine()) }) } p .print(`共${tmpOrder.skuCount}种${tmpOrder.goodsCount}件商品`) if (!getStorage('printerGoodsMoney')) { p .print(`实付金额: ¥${(tmpOrder.actualPayPrice / 100).toFixed(2)}`) } // 分割线 p .setSize(1, 1) .print(printerUtil.fillLine()) // 商品质量问题 .setSize(1, 2) .setAlign('ct') .print('商品质量问题') .print(storeTel) .println(storeName) // 兼容模式条形码 if (tmpOrder.vendorOrderID.length < 18 && getStorage('printerCompatible')) { p .setSize(1, 1) .setAlign('ct') .print(`#${tmpOrder.orderSeq}号兼容模式条形码`) .printQrFormat(tmpOrder.vendorOrderID) .print(tmpOrder.vendorOrderID) .println() .println() } else { p // 结束 .setSize(1, 1) .print(printerUtil.fillAround(`#${tmpOrder.orderSeq}完`)) .println() .println() } break // 中号 case 1: // 平台名称 p .clear() .setSize(2, 2) .setAlign('ct') .print(`${vendorID2(tmpOrder.vendorID)}`) // 分割线 .setSize(1, 1) .print(printerUtil.fillLine()) // 下单时间 .setSize(1, 1) .setAlign('lt') .print(`下单时间:${timeFormatHMS(tmpOrder.orderCreatedAt)}`) // 预计送达时间 .setSize(1, 1) .setAlign('lt') .print(`预计送达:${expectTime(tmpOrder)}`) // 客户姓名 .setSize(1, 1) .setAlign('lt') .print(`客户姓名:${tmpOrder.consigneeName}`) // 客户电话 .setSize(1, 1) .setAlign('lt') .print(`客户电话:${tmpOrder.consigneeMobile}`) // 订单编号 .setSize(1, 2) .setAlign('lt') .printArrayP(30) .print(`订单编号:${tmpOrder.vendorOrderID}`) // 订单序号 .setSize(2, 2) .setBold(true) .setAlign('ct') .printArrayP(30) .print(`${vendorID2(tmpOrder.vendorID)}#${tmpOrder.orderSeq}`) // 条形码 if (tmpOrder.vendorOrderID.length < 18 && !getStorage('printerCompatible')) { p .printQrFormat(tmpOrder.vendorOrderID) .print(tmpOrder.vendorOrderID) } // 饿佰取货码 if (tmpOrder.vendorID === 3) { p .setSize(1, 2) .setAlign('ct') .printArrayP(30) .print(`淘宝闪购取货码: ${tmpOrder.vendorOrderID2.slice(tmpOrder.vendorOrderID2.length - 4)}`) } // 分割线 p .setSize(1, 1) .print(printerUtil.fillLine()) // 客户地址 .setSize(1, 2) .setAlign('lt') .setBold(true) .print(`客户地址:${tmpOrder.consigneeAddress}`) // 分割线 .setSize(1, 1) .print(printerUtil.fillLine()) // 客户备注 .setSize(1, 2) .setAlign('lt') .setBold(true) .print(`客户备注:${tmpOrder.buyerComment}`) // 分割线 .setSize(1, 1) .print(printerUtil.fillLine()) // 商品列表 .setSize(1, 1) .setAlign('lt') .setBold(true) .print('商品列表') if (!getStorage('printerGoodsMoney')) { p .print('品名 数量 单价') .setSize(1, 1) .print(printerUtil.fillLine()) .setSize(1, 1) .setBold(true) tmpSkus.forEach((item: any, index: number) => { let comparePrice = item.vendorPrice / 100 p.print(`${index + 1}.${item.skuName}`) p.print(util.goodsGandle('', `x${item.count}`, `¥${(comparePrice * 1).toFixed(2)}`)) // 蓝牙打印机地方设置打印 upc if (getStorage('isPrinterUpc') && item.upc) { p.print(`UPC: ${item.upc}`) } p.print(printerUtil.fillLine()) }) } else { p .print('品名 数量') .setSize(1, 1) .print(printerUtil.fillLine()) .setSize(1, 1) .setBold(true) tmpSkus.forEach((item: any, index: number) => { p.print(`${index + 1}.${item.skuName}`) p.print(util.goodsGandle('', '', `x${item.count}`)) // 蓝牙打印机地方设置打印 upc if (getStorage('isPrinterUpc') && item.upc) { p.print(`UPC: ${item.upc}`) } p.print(printerUtil.fillLine()) }) } p .setSize(1, 1) .setBold(true) .print(`共${tmpOrder.skuCount}种${tmpOrder.goodsCount}件商品`) if (!getStorage('printerGoodsMoney')) { p .print(`实付金额: ¥${(tmpOrder.actualPayPrice / 100).toFixed(2)}`) } // 分割线 p .setSize(1, 1) .print(printerUtil.fillLine()) // 商品质量问题 .setSize(1, 2) .setAlign('ct') .setBold(true) .print('商品质量问题') .print(storeTel) .println(storeName) // 兼容模式条形码 if (tmpOrder.vendorOrderID.length < 18 && getStorage('printerCompatible')) { p .setSize(1, 1) .setAlign('ct') .print(`#${tmpOrder.orderSeq}号兼容模式条形码`) .printQrFormat(tmpOrder.vendorOrderID) .print(tmpOrder.vendorOrderID) .println() .println() } else { p // 结束 .setSize(1, 1) .print(printerUtil.fillAround(`#${tmpOrder.orderSeq}完`)) .println() .println() } break // 大号 case 2: // 平台名称 p .clear() .setSize(2, 2) .setAlign('ct') .print(`${vendorID2(tmpOrder.vendorID)}`) // 分割线 .setSize(1, 1) .print(printerUtil.fillLine()) // 下单时间 .setSize(1, 1) .setAlign('lt') .setBold(true) .print(`下单时间:${timeFormatHMS(tmpOrder.orderCreatedAt)}`) // 预计送达时间 .setSize(1, 1) .setAlign('lt') .setBold(true) .print(`预计送达:${expectTime(tmpOrder)}`) // 预计送达时间 .setSize(1, 1) .setAlign('lt') .setBold(true) .print(`客户姓名:${tmpOrder.consigneeName}`) // 预计送达时间 .setSize(1, 1) .setAlign('lt') .setBold(true) .print(`客户电话:${tmpOrder.consigneeMobile}`) // 订单编号 .setSize(1, 2) .setAlign('lt') .setBold(true) .printArrayP(30) .print(`订单编号:${tmpOrder.vendorOrderID}`) // 订单序号 .setSize(2, 2) .setBold(true) .setAlign('ct') .printArrayP(30) .print(`${vendorID2(tmpOrder.vendorID)}#${tmpOrder.orderSeq}`) // 条形码 if (tmpOrder.vendorOrderID.length < 18 && !getStorage('printerCompatible')) { p .printQrFormat(tmpOrder.vendorOrderID) .print(tmpOrder.vendorOrderID) } // 饿佰取货码 if (tmpOrder.vendorID === 3) { p .setSize(1, 2) .setAlign('ct') .setBold(true) .printArrayP(30) .print(`淘宝闪购取货码: ${tmpOrder.vendorOrderID2.slice(tmpOrder.vendorOrderID2.length - 4)}`) } // 分割线 p .setSize(1, 1) .print(printerUtil.fillLine()) // 客户地址 .setSize(2, 2) .setAlign('lt') .setBold(true) .print(`客户地址:${tmpOrder.consigneeAddress}`) // 分割线 .setSize(1, 1) .print(printerUtil.fillLine()) // 客户备注 .setSize(2, 2) .setAlign('lt') .setBold(true) .print(`客户备注:${tmpOrder.buyerComment}`) // 分割线 .setSize(1, 1) .print(printerUtil.fillLine()) // 商品列表 .setSize(1, 2) .setAlign('lt') .setBold(true) .print('商品列表') if (!getStorage('printerGoodsMoney')) { p .print('品名 数量 单价') .setSize(1, 2) .print(printerUtil.fillLine()) .setSize(1, 2) .setBold(true) tmpSkus.forEach((item: any, index: number) => { let comparePrice = item.vendorPrice / 100 p.print(`${index + 1}.${item.skuName}`) p.print(util.goodsGandle('', `x${item.count}`, `¥${(comparePrice * 1).toFixed(2)}`)) // 蓝牙打印机地方设置打印 upc if (getStorage('isPrinterUpc') && item.upc) { p.print(`UPC: ${item.upc}`) } p.print(printerUtil.fillLine()) }) } else { p .print('品名 数量') .setSize(1, 2) .print(printerUtil.fillLine()) .setSize(1, 2) .setBold(true) tmpSkus.forEach((item: any, index: number) => { p.print(`${index + 1}.${item.skuName}`) p.print(util.goodsGandle('', '', `x${item.count}`)) // 蓝牙打印机地方设置打印 upc if (getStorage('isPrinterUpc') && item.upc) { p.print(`UPC: ${item.upc}`) } p.print(printerUtil.fillLine()) }) } p .setSize(2, 2) .setBold(true) .print(`共${tmpOrder.skuCount}种${tmpOrder.goodsCount}件商品`) if (!getStorage('printerGoodsMoney')) { p .print(`实付:¥${(tmpOrder.actualPayPrice / 100).toFixed(2)}`) } // 分割线 p .setSize(1, 1) .print(printerUtil.fillLine()) // 商品质量问题 .setSize(2, 2) .setAlign('ct') .setBold(true) .print('商品质量问题') .print(storeTel) .println(storeName) // 兼容模式条形码 if (tmpOrder.vendorOrderID.length < 18 && getStorage('printerCompatible')) { p .setSize(1, 1) .setAlign('ct') .print(`#${tmpOrder.orderSeq}号兼容模式条形码`) .printQrFormat(tmpOrder.vendorOrderID) .print(tmpOrder.vendorOrderID) .println() .println() } else { p // 结束 .setSize(1, 1) .print(printerUtil.fillAround(`#${tmpOrder.orderSeq}完`)) .println() .println() } break // 开发者模板 case 3: p .clear() // 开始 .setSize(2, 2) .setAlign('ct') .print(`${vendorID2(tmpOrder.vendorID)}`) // 分割线 .setSize(1, 1) .print(printerUtil.fillAround(`#${tmpOrder.orderSeq}`)) .println() // 订单序号 .setSize(2, 2) .setBold(true) .setAlign('ct') .print(`${vendorID2(tmpOrder.vendorID)}#${tmpOrder.orderSeq}`) // 条形码 if (tmpOrder.vendorOrderID.length < 18 && !getStorage('printerCompatible')) { p .printQrFormat(tmpOrder.vendorOrderID) .print(tmpOrder.vendorOrderID) } // 兼容模式条形码 if (tmpOrder.vendorOrderID.length < 18 && getStorage('printerCompatible')) { p .setSize(1, 1) .setAlign('ct') .print(`#${tmpOrder.orderSeq}号兼容模式条形码`) .printQrFormat(tmpOrder.vendorOrderID) .print(tmpOrder.vendorOrderID) .println() .println() } else { p // 结束 .setSize(1, 1) .print(printerUtil.fillAround(`#${tmpOrder.orderSeq}完`)) .println() .println() } break } let buffer = await p.buffer() return buffer } // 处理平台名字 function vendorID2(vendorID: number) { switch (vendorID) { case 0: return '京东到家' case 1: return '美团外卖' // case 2: // return '淘宝闪购' case 3: return '淘宝闪购新零售' case 5: return '京东商城' case 9: return '京西到家' case 11: return '微盟' case 14: return '抖音小时购' case 16: return '淘鲜达' default: return '未知平台' } } // 无预计送达时间的情况 function expectTime(tmpOrder: AnyObject) { let timer try { if (!tmpOrder.expectedDeliveredTime || tmpOrder.expectedDeliveredTime.indexOf('1970') !== -1) { timer = new Date(new Date(tmpOrder.orderCreatedAt).getTime() + 60 * 60 * 1000) } else { timer = new Date(tmpOrder.expectedDeliveredTime) } return timeFormatHMS(+timer) } catch (e) { return 'YYYY-MM-DD hh:mm:ss' } } export default printerTemplate