Selaa lähdekoodia

蓝牙打印优化

lilei 3 vuotta sitten
vanhempi
commit
2dde50fa10
3 muutettua tiedostoa jossa 64 lisäystä ja 83 poistoa
  1. 47 4
      libs/printTools.js
  2. 2 38
      pages/common/printTag/printTag.vue
  3. 15 41
      pages/replenishmentManage/manualPrint.vue

+ 47 - 4
libs/printTools.js

@@ -43,18 +43,61 @@ export const getTextRows = function(str,iPageSize){
 // 格式化打印文本
 export const textFormat = function(command,text,maxFontNums,left,top,lightHeight,align,fontSize){
 	let rowTop = top
-	const textArr = getTextRows(text.replace(/\s+/g, ' '),maxFontNums*2)
+	const maxNums = maxFontNums
+	const rowHeight = lightHeight
+	const textArr = getTextRows(text.replace(/\s+/g, ' '),maxNums*2)
 	const rows = textArr.length
 	for(let i=0;i<rows;i++){
 		if(align=="center"){
 			const ltxt = textArr[i]
-			const ltlen = ltxt.replace(/[^x00-xFF]/g,'**').length/2
-			command.setText(left+((maxFontNums-ltlen)/2)*lightHeight, rowTop, "TSS24.BF2", fontSize, fontSize, ltxt)
+			const ltlen = getBytesCount(ltxt)/2*fontSize
+			command.setText(left+((maxNums-ltlen)/2)*rowHeight, rowTop, "TSS24.BF2", fontSize, fontSize, ltxt)
 		}
 		else{
 			command.setText(left, rowTop, "TSS24.BF2", fontSize, fontSize, textArr[i])
 		}
-		rowTop = rowTop+lightHeight
+		rowTop = rowTop+rowHeight*fontSize+10
 	}
 	return rowTop
+}
+
+// 60 * 40 尺寸模板
+export const printTempl = function(tsc,data){
+	let top = 16 // 距离顶部10点像素
+	const left = 8 // 距离左边
+	const lightHeight = 24 // 行高3mm,1mm = 8点
+	const pageW = 60 // 页签宽度mm
+	const pageH = 40 // 页签高度mm
+	const maxFontNums = Math.floor((pageW*8-left*2)/lightHeight) // 每行最多字体数
+	const leftMaxFnums = Math.floor(maxFontNums*0.6)
+	let rightTop = 0
+	let rightLeft = (leftMaxFnums+2)*lightHeight
+	// 初始化打印机
+	const command = tsc.jpPrinter.createNew()
+	command.init()
+	command.setSize(pageW, pageH) // 标签纸张宽高,单位mm
+	command.setGap(3) // 标签上下间距,单位mm
+	command.setCls() // 清除缓冲区数据
+	// 经销商文字高度,是否换行
+	top = textFormat(command,data.dealerName,maxFontNums,left,top,lightHeight,"center",1)
+	// 数字货架名称文字
+	top = top+10
+	rightTop = top
+	top = textFormat(command,data.shelfName,leftMaxFnums,left,top,lightHeight,"left",1)
+	// 产品编码
+	top = top+10
+	top = textFormat(command,data.productCode,leftMaxFnums,left,top,lightHeight,"left",1)
+	// 产品名称
+	top = top+6
+	top = textFormat(command,data.productName,leftMaxFnums,left,top,lightHeight,"left",1)
+	// 打印人打印时间
+	top = top+10
+	top = textFormat(command,data.printDate+' '+data.printUser,leftMaxFnums,left,top,lightHeight,"left",1)
+	// 货位号
+	const qrtop = textFormat(command,data.shelfPlaceCode,maxFontNums-leftMaxFnums-2,rightLeft,rightTop,lightHeight,"center",2)
+	// 二维码
+	command.setQR(rightLeft, qrtop, "L", 3, "A", data.barCode)
+	command.setPagePrint(1,data.currentInven) // 打印分数1,每个标签重发打印2次
+	console.log("开始打印了",command.getData())
+	return command
 }

+ 2 - 38
pages/common/printTag/printTag.vue

@@ -28,7 +28,7 @@
 <script>
 	import { shelfDetail } from '@/api/shelf'
 	import kkPrinter from '@/components/kk-printer/index.vue';
-	import {textFormat} from '@/libs/printTools.js'
+	import {printTempl} from '@/libs/printTools.js'
 	import moment from 'moment'
 	export default {
 		components:{
@@ -110,43 +110,7 @@
 					return
 				}
 				this.isParinting = true
-				let top = 10 // 距离顶部10点像素
-				const left = 8 // 距离左边
-				const lightHeight = 24 // 行高3mm,1mm = 8点
-				const pageW = 40 // 页签宽度mm
-				const pageH = 30 // 页签高度mm
-				const maxFontNums = Math.floor((pageW*8-left*2)/lightHeight) // 每行最多字体数
-				let rightTop = 0
-				let rightLeft = (Math.floor(maxFontNums*0.6)+1)*lightHeight
-				// 初始化打印机
-				const command = tsc.jpPrinter.createNew()
-				command.init()
-				command.setSize(pageW, pageH) // 标签纸张宽高,单位mm
-				command.setGap(2) // 标签上下间距,单位mm
-				command.setCls() // 清除缓冲区数据
-				// 经销商文字高度,是否换行
-				top = textFormat(command,this.printInfo.dealerName,maxFontNums,left,top,lightHeight,"center",1)
-				// 数字货架名称文字
-				top = top+10
-				rightTop = top
-				const lwidth = Math.floor(maxFontNums*0.6)
-				top = textFormat(command,this.printInfo.shelfName,lwidth,left,top,lightHeight,"left",1)
-				// 产品编码
-				top = top+10
-				top = textFormat(command,this.printInfo.productCode,lwidth,left,top,lightHeight,"left",1)
-				// 产品名称
-				top = top+10
-				top = textFormat(command,this.printInfo.productName,lwidth,left,top,lightHeight,"left",1)
-				// 打印人打印时间
-				top = top+10
-				top = textFormat(command,this.printInfo.printDate+' '+this.printInfo.printUser,lwidth,left,top,lightHeight,"left",1)
-				// 货位号
-				textFormat(command,this.printInfo.shelfPlaceCode,maxFontNums-lwidth,rightLeft,rightTop,lightHeight,"center",1)
-				// 二维码
-				const qrtop = rightTop +lightHeight+10
-				command.setQR(rightLeft, qrtop, "L", 3, "A", this.printInfo.barCode)
-				command.setPagePrint(1,this.printInfo.currentInven) // 打印分数1,每个标签重发打印2次
-				console.log("开始打印了",command.getData())
+				const command = printTempl(tsc,this.printInfo)
 				blesdk.senBlData(opt.deviceId, opt.serviceId, opt.writeId, command.getData(), this.onPrintSuccess);
 			},
 			// 打印成功

+ 15 - 41
pages/replenishmentManage/manualPrint.vue

@@ -21,7 +21,7 @@
 	import kkPrinter from '@/components/kk-printer/index.vue';
 	import { shelfReplenishDetail, shelfReplenishDetailList, shelfReplenishPrintSign } from '@/api/shelfReplenish'
 	import partList from '@/pages/common/partList.vue'
-	import {textFormat} from '@/libs/printTools.js'
+	import {printTempl} from '@/libs/printTools.js'
 	export default {
 		components: { partList, kkPrinter },
 		data() {
@@ -83,45 +83,19 @@
 			printOnce(opt,tsc,blesdk,data){
 				const _this = this
 				const dealer = this.$store.state.vuex_userData
-				let top = 10 // 距离顶部10点像素
-				const left = 8 // 距离左边
-				const lightHeight = 24 // 行高3mm,1mm = 8点
-				const pageW = 40 // 页签宽度mm
-				const pageH = 30 // 页签高度mm
-				const maxFontNums = Math.floor((pageW*8-left*2)/lightHeight) // 每行最多字体数
-				let rightTop = 0
-				let rightLeft = (Math.floor(maxFontNums*0.6)+1)*lightHeight
-				// 初始化打印机
-				const command = tsc.jpPrinter.createNew()
-				command.init()
-				command.setSize(pageW, pageH) // 标签纸张宽高,单位mm
-				command.setGap(2) // 标签上下间距,单位mm
-				command.setCls() // 清除缓冲区数据
-				// 经销商文字高度,是否换行
-				top = textFormat(command,dealer.orgName,maxFontNums,left,top,lightHeight,"center",1)
-				// 数字货架名称文字
-				top = top+10
-				rightTop = top
-				const lwidth = Math.floor(maxFontNums*0.6)
-				top = textFormat(command,this.basicInfoData.shelfInfo.shelfName,lwidth,left,top,lightHeight,"left",1)
-				// 产品编码
-				top = top+10
-				top = textFormat(command,data.productCode,lwidth,left,top,lightHeight,"left",1)
-				// 产品名称
-				top = top+10
-				top = textFormat(command,data.product.name,lwidth,left,top,lightHeight,"left",1)
-				// 时间,打印人
-				top = top+10
-				top = textFormat(command,this.$u.timeFormat(this.timestamp, 'yyyy-mm-dd hh:MM')+" "+this.$store.state.vuex_userData.userNameCN,lwidth,left,top,lightHeight,"left",1)
-				// 货位号
-				textFormat(command,data.shelfPlaceCode,maxFontNums-lwidth,rightLeft,rightTop,lightHeight,"center",1)
-				// 二维码
-				const qrtop = rightTop +lightHeight+10
-				const qrcont = `dealerSn=${dealer.orgSn}&shelfSn=${data.shelfSn}&productCode=${data.productCode}&shelfPlaceCode=${data.shelfPlaceCode}&shelfPlaceSn=${data.shelfPlaceSn}`
-				command.setQR(rightLeft, qrtop, "L", 3, "A", qrcont)
-				command.setPagePrint(1,data.printQty) // 打印分数1,每个标签重发打印2次
-				
-				console.log("开始打印了",command.getData())
+				// 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: `dealerSn=${dealer.orgSn}&shelfSn=${data.shelfSn}&productSn=${data.productSn}&productCode=${data.productCode}&shelfPlaceCode=${data.shelfPlaceCode}&shelfPlaceSn=${data.shelfPlaceSn}`
+				})
+				// 开始批量打印 
 				blesdk.senBlData(
 				opt.deviceId, 
 				opt.serviceId, 
@@ -139,7 +113,7 @@
 					}
 				});
 			},
-			// 打印
+			// 批量打印 
 			startPrint(opt,tsc,blesdk){
 				const result =this.$refs.partList.getAllChecked()
 				if(result.length){