628 lines
21 KiB
TypeScript
628 lines
21 KiB
TypeScript
|
|
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 |