logwire-wms-ui-test
Version:
运匠科技wms-PDA基础组件库
233 lines (199 loc) • 6.46 kB
JavaScript
/*
* 打印服务
* @author 张文
* @date 2022-02-15
* */
import {AppPower} from "./AppPower";
import {lwToast} from "./Toast";
import {print} from "../api/common/Print";
import {lwLoading} from "../components/ui/Loading";
import {lwErrMsg} from "../components/ui/ErrorMsg";
import {lwNoticeBar} from "../components/ui/NoticeBar";
import {Language} from "./Language";
export const Print = {
/**
* 设置当前已经配置了的打印机列表
* @author 张文
* @param {Array} list 当前配置的打印机列表
* */
set(list) {
window.lwWindowGlobalData.set('printList', list)
},
/**
* 获取当前已经配置了的打印机列表
* @author 张文
* @return {Array} 返回当前储存的全部打印机列表
* */
get() {
return window.lwWindowGlobalData.get('printList')
},
/**
* 调用服务端接口获取当前已经配置了的打印机列表,并更新当前储存的数据
* @author 张文
* @return {Promise} 返回获取到的打印机数据
* */
asyncGet(loading) {
return new Promise((PR, PE) => {
print.getList(loading).then(res => {
let printList = res ? res.map(item => {
const devices = item.devices[0]
return {
// 模板code
templateCode: item.code,
// 模板id
templateId: item.id,
// 模板名称
templateName: item.name,
// 打印机id
printId: devices.id,
// 打印机类型 PRINT_SERVICE-服务打印机,BLUETOOTH-蓝牙打印机
printType: devices.type,
// 打印机类型
printCode: devices.code,
// 打印机名字
printName: devices.name,
}
}) : []
this.set(printList)
PR(this.get())
}).catch(err => PE(err))
})
},
/**
* 校验打印配置是否正确
* @author 张文
* @param {String} templateCode 需要判断的模板数据Code
* @param {String} msg 描述文字,默认“当前”
* @param {Boolean} needWarn 是否显示强警告
* @return {Object} 返回判断后的结果{success:'成功-true,失败-false',printData:{'包含打印模板和打印机类型的数据'}}
* */
test(templateCode, msg = '当前', needWarn = true) {
for (let i of this.get()) {
// 判断当前模板是否配置,没配置就弹出对话框提示去配置
if (i.templateCode.trim() === templateCode.trim()) {
return {success: true, printData: i}
}
}
const message = msg + Language.get('','打印模板未配置!请前往【打印设置栏】配置模板。模板编码:') + templateCode
needWarn ? lwErrMsg.show(message) : lwNoticeBar.show({message, showTime: 8, type:'warning'})
return {success: false, printData: {}}
},
/**
* 调用蓝牙打印服务,完成后更新打印状态
* @author 张文
* @date 2022-02-15
* @return {Promise} {success:'成功-true,失败-false',message:失败原因}}
* @param obj
* */
async bluetoothPrint({
taskId,
taskNo,
pageNum = 1,
pageSize = 10,
deviceType = 'BLUETOOTH',
billStatusList = ['100'],
}) {
let msg = ''
if (!taskId && !taskNo) {
msg = Language.get('wms_project.pda.utils.print.error', '打印数据有误')
lwErrMsg.show(msg)
throw new Error(msg)
}
lwLoading.show(Language.get('wms_project.pda.utils.print.printing', '正在打印') + '...')
try {
await this.asyncGeyPrintData({
taskId,
taskNo,
pageNum,
pageSize,
deviceType,
billStatusList,
})
lwLoading.close()
lwToast.success({
message: Language.get('wms_project.pda.utils.print.success', '打印成功'),
duration: 1000
})
}catch (e){
console.log(e,'方法错误')
if (e.msg){
lwErrMsg.show(e.msg)
}
lwLoading.close()
throw new Error(e)
}
},
/**
* 更新打印状态
* @author 张文
* @date 2022-02-15
* @param {Array} taskDataIds 任务id的集合
* @param {Boolean} showToast 是否显示成功的提示框
* @return {Promise}
* */
asyncPrintTypeUpdate(taskDataIds, showToast = false) {
return new Promise((res,err)=>{
print.update({
taskDataIds,
printed: true
}).then(()=>{
showToast && lwToast.success({
message: Language.get('wms_project.pda.utils.print.success', '打印成功'),
duration: 1000
})
res(true)
}).catch(()=>err(false))
})
},
/**
* 获取打印数据
* @author 张文
* @date 2022-12-09
* @param {Object} param 请求接口的参数
* @return {Object} 获取的打印数据
* */
async asyncGeyPrintData(param){
const res = await print.getPrintData(param)
// 获取总页数
const pageTotal = Math.ceil(Number(res.printData?.total || 0) / param.pageSize)
const bluetooth = []
const ids = []
if (res.printData.datas && res.printData.datas.length) {
res.printData.datas.forEach(item=>{
ids.push(item.id)
// 判断是否在app环境
window.androidApp && bluetooth.push(AppPower.newBluePrint([{
language: res.task.device.languageType,
formatType: item.printFormat,
width: res.task.device.width || '100',
height: res.task.device.height || '100',
skipPage:res.task.device.skipPage,
data:[
{
data: item.data,
count: res.task.copies || 1
}
]
}]))
})
}
try{
await Promise.all(bluetooth)
}catch {
throw new Error({msg:Language.get('', '调用打印服务失败')})
}
// 更新打印状态
try{
await this.asyncPrintTypeUpdate(ids)
// 检查当前打印id的所有数据是否全部打印完成
if (pageTotal > param.pageNum){
return await this.asyncGeyPrintData({
...param,
pageNum:param.pageNum++
})
}
}catch{
throw new Error({msg:Language.get('', '调用打印数据更新接口调用失败')})
}
}
}