UNPKG

logwire-wms-ui-test

Version:

运匠科技wms-PDA基础组件库

233 lines (199 loc) 6.46 kB
/* * 打印服务 * @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('', '调用打印数据更新接口调用失败')}) } } }