'创建鸿蒙应用'

This commit is contained in:
wtq
2025-12-08 17:49:35 +08:00
commit 09b59aa8c2
625 changed files with 78727 additions and 0 deletions

View File

@@ -0,0 +1,628 @@
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