<template> <view class="replenishment-manualPrint-wrap"> <view class="replenishment-manualPrint-body"> <view class="part-list"> <!-- 补货产品 --> <partList :list="partList" title="补货产品" model="checkbox" fromPage="manualPrint" ref="partList" noDataText="暂无产品" @allChecked="allCheckedCallback"></partList> </view> </view> <view class="replenishment-manualPrint-footer"> <view> <u-checkbox size="40" @change="allCheckeChange" v-model="allChecked" shape="circle">{{allChecked?'取消全选':'全选'}}</u-checkbox> </view> <view> <kk-printer @closeConnect="closeConnect" ref="kkprinter" defaultText="开始打印" @startPrint="startPrint"></kk-printer> </view> </view> </view> </template> <script> import { clzConfirm, numberToFixed } from '@/libs/tools'; import kkPrinter from '@/components/kk-printer/index.vue'; import { shelfReplenishDetail, shelfReplenishDetailList, shelfReplenishPrintSign } from '@/api/shelfReplenish' import partList from '@/pages/common/partList.vue' import {printTempl,printCpclTempl} from '@/libs/printTools.js' export default { components: { partList, kkPrinter }, data() { return { show: false, replenishBillSn: '', basicInfoData:null, partList: [], allChecked: false, printIndex: 0, isParinting: false } }, onReady() { uni.setNavigationBarColor({ frontColor: '#ffffff', backgroundColor: this.$config('primaryColor') }) }, onLoad(option) { this.replenishBillSn = option.sn this.getDetail() this.getPartList() // 保持屏幕常亮 uni.setKeepScreenOn({ keepScreenOn: true }); }, onUnload() { // this.$refs.kkprinter.closeConnect() // 保持屏幕常亮 uni.setKeepScreenOn({ keepScreenOn: false }); }, onBackPress(event){ if(event.from == 'backbutton'){ if(this.isParinting){ uni.showToast({ icon:'none', title: '正在打印中...' }) }else{ uni.navigateBack({delta: 1}) } return true // 阻止默认返回行为(会导致无限循环) } }, methods: { // 查询详情 getDetail(){ shelfReplenishDetail({ sn: this.replenishBillSn }).then(res => { if(res.status == 200){ this.basicInfoData = res.data || null }else{ this.basicInfoData = null } }) }, // 查询列表 getPartList(){ const _this = this shelfReplenishDetailList({ replenishBillSn: this.replenishBillSn }).then(res => { if(res.status == 200 && res.data){ res.data.map(item =>{ if(item.billState == 'FINISH'){ item.confirmQty = item.putQty ? Number(item.putQty) : 0 item.printQty = item.confirmQty ? Number(item.confirmQty) : 0 }else{ item.confirmQty = item.confirmQty ? Number(item.confirmQty) : 0 item.printQty = item.confirmQty ? Number(item.confirmQty) : 0 } }) this.partList = res.data || [] this.$nextTick(()=>{ this.allCheckeChange({value:true}) this.allChecked = true }) }else{ this.partList = [] } }) }, // 全选 allCheckeChange(e){ this.$refs.partList.allSelect(e.value) }, allCheckedCallback(val){ this.allChecked = val }, printOnce(opt,cmd,blesdk,data){ const _this = this // 60*40 打印模板 const dealer = this.$store.state.vuex_userData const paramsData = { dealerName: dealer.orgName, shelfName: this.basicInfoData.shelfInfo.shelfName || '', productCode: data.productCode || '', productName: data.product.name || '', shelfPlaceCode: data.shelfPlaceCode || '', currentInven: data.printQty, printDate: this.$u.timeFormat(this.timestamp, 'yyyy-mm-dd hh:MM'), printUser: dealer.userNameCN, barCode: `${data.shelfSn}&${data.productCode}&${data.productSn}&${data.shelfPlaceSn}` // barCode: `dealerSn=${dealer.orgSn}&shelfSn=${data.shelfSn}&productSn=${data.productSn}&productCode=${data.productCode}&shelfPlaceCode=${data.shelfPlaceCode}&shelfPlaceSn=${data.shelfPlaceSn}` } // 打印成功后函数 const onPrintSuccess = function(){ const result =_this.$refs.partList.getAllChecked() _this.printIndex = _this.printIndex + 1 if(_this.printIndex < result.length){ _this.printOnce(opt,cmd,blesdk,result[_this.printIndex]) }else{ _this.printIndex = 0 _this.$refs.kkprinter.onPrintSuccess() _this.isParinting = false uni.hideLoading() clzConfirm({ title: '提示', content: '打印已经结束,是否返回上页!', success (ret) { if (ret.confirm || ret.index == 0) { uni.navigateBack() } } }) } } // tsc 指令 console.log(cmd,cmd.type) if(cmd.type&&cmd.type=='tsc'){ const command = printTempl(cmd,paramsData) // 开始批量打印 blesdk.senBlData(opt.deviceId, opt.serviceId, opt.writeId, command.getData(), onPrintSuccess, this.onPrintError); }else{ const resultData = printCpclTempl(cmd,paramsData) blesdk.sendDataToDevice({ deviceId: opt.deviceId, serviceId: opt.serviceId, characteristicId: opt.writeId, value: resultData, lasterSuccess: onPrintSuccess, lasterError: this.onPrintError }); } }, closeConnect(){ this.isParinting = false uni.hideLoading() }, onPrintError(){ this.$refs.kkprinter.onPrintFail() this.isParinting = false this.show = false uni.showToast({ title: '打印失败,请重试!' }) }, // 批量打印 startPrint(opt,cmd,blesdk){ const result =this.$refs.partList.getAllChecked() if(result.length){ if(this.isParinting){ return } this.isParinting = true uni.showLoading({ mask: true, title: '正在打印中,请勿息屏或退出应用!' }) this.printOnce(opt,cmd,blesdk,result[this.printIndex]) }else{ this.toashMsg("请选择产品!") this.$refs.kkprinter.onPrintFail() } }, } } </script> <style lang="less"> .replenishment-manualPrint-wrap{ position: relative; width: 100%; height: 100%; overflow: hidden; padding-bottom: 102upx; .replenishment-manualPrint-body{ .part-list{ padding: 10rpx 25rpx; background-color: #fff; margin-bottom: 20rpx; border-radius: 25rpx; box-shadow: 2rpx 3rpx 5rpx #eee; } } .replenishment-manualPrint-footer{ padding: 10upx 32upx 12upx; background-color: #fff; position: fixed; left: 0; bottom: 0; width: 100%; box-shadow: 3px 1px 7px #eee; display: flex; align-items: center; justify-content: space-between; } } </style>