<template> <view class="replenishment-manualPrint-wrap"> <view class="replenishment-manualPrint-body"> <u-alert-tips :show="!show" @close="show = false" type="warning" description="正在打印中,请勿息屏或退出应用!"></u-alert-tips> <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 ref="kkprinter" defaultText="开始打印" @startPrint="startPrint"></kk-printer> </view> </view> </view> </template> <script> import kkPrinter from '@/components/kk-printer/index.vue'; import { shelfReplenishDetail, shelfReplenishDetailList, shelfReplenishPrintSign } from '@/api/shelfReplenish' import partList from '@/pages/common/partList.vue' import {printTempl} 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 =>{ item.confirmQty = item.confirmQty ? Number(item.confirmQty) : 0 item.printQty = item.confirmQty ? Number(item.confirmQty) : 0 }) this.partList = res.data || [] }else{ this.partList = [] } }) }, // 全选 allCheckeChange(e){ this.$refs.partList.allSelect(e.value) }, allCheckedCallback(val){ this.allChecked = val }, printOnce(opt,tsc,blesdk,data){ const _this = this const dealer = this.$store.state.vuex_userData // 60*40 打印模板 const command = printTempl(tsc,{ 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}` }) // 开始批量打印 blesdk.senBlData( opt.deviceId, opt.serviceId, opt.writeId, command.getData(), function(){ const result =_this.$refs.partList.getAllChecked() _this.printIndex = _this.printIndex + 1 if(_this.printIndex < result.length){ _this.printOnce(opt,tsc,blesdk,result[_this.printIndex]) }else{ _this.printIndex = 0 _this.$refs.kkprinter.onPrintSuccess() _this.isParinting = false _this.show = false } }); }, // 批量打印 startPrint(opt,tsc,blesdk){ const result =this.$refs.partList.getAllChecked() if(result.length){ if(this.isParinting){ return } this.isParinting = true this.show = true this.printOnce(opt,tsc,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>