From eeff5fca55deb0de745405871ff1ae52061bc98d Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期五, 18 七月 2025 11:26:12 +0800
Subject: [PATCH] 优化打印蓝牙连接弹出框,增加监听打印回调解决全部打印只能打印一张问题

---
 pages/wareHouse/nuclearScale/nuclearscalerecord.vue | 1229 ++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 898 insertions(+), 331 deletions(-)

diff --git a/pages/wareHouse/nuclearScale/nuclearscalerecord.vue b/pages/wareHouse/nuclearScale/nuclearscalerecord.vue
index ecc7ab9..2da0918 100644
--- a/pages/wareHouse/nuclearScale/nuclearscalerecord.vue
+++ b/pages/wareHouse/nuclearScale/nuclearscalerecord.vue
@@ -1,369 +1,936 @@
 <template>
-  <view class="page">
-    <view class="finishProductIn-locno-bg" />
-    <u-navbar title="鏍哥璁板綍" :background="background" :border-bottom="false" :title-bold="true" title-color="#000"
-      back-icon-color="#000">
-      <view class="navbar-right" slot="right" @click="goPrintAll">
+	<view class="page">
+		<view class="finishProductIn-locno-bg" />
+		<u-navbar title="鏍哥璁板綍" :background="background" :border-bottom="false" :title-bold="true" title-color="#000"
+			back-icon-color="#000">
+			<view class="navbar-right" slot="right" @click="goPrintAll">
 				鍏ㄩ儴鎵撳嵃
 			</view>
-      </u-navbar>
-    <view class="wrap">
-      <scroll-view class="finishProductIn-locno-scroll-list" scroll-y="true" @scrolltolower="loadMore">
-        <u-cell-group class="finishProductIn-locno-scroll-list-group" :border="false">
-        <view
-            class="content"
-            v-for="(item, index) in list"
-            :key="item.locNo"
-            :index="index"
-            @click="selectNo(item.index)"
-          >
-            <view class="content-header">
-              <view class="content-header-title">{{ index+1 }}</view>
-            </view>
-            <view class="content-body">
-              <view class="row-list">
-                <view class="_label">
-                  <view class="_label-icon-1"> </view>
-                  <view class="_label-name">鎵规鍙凤細</view>
-                </view>
-                <view class="_content">
-                  {{ item.value0 }}
-                </view>
-              </view>
-              <view class="row-list">
-                <view class="_label">
-                  <view class="_label-icon-2"> </view>
-                  <view class="_label-name">浜у搧鎻忚堪锛�</view>
-                </view>
-                <view class="_content">
-                  {{ item.value1 }}
-                </view>
-              </view>
-              <view class="row-list">
-                <view class="_label">
-                  <view class="_label-icon-3"> </view>
-                  <view class="_label-name">闆朵欢鍙凤細</view>
-                </view>
-                <view class="_content">
-                  {{ item.value2 }}
-                </view>
-              </view>
-              <view class="row-list">
-                <view class="_label">
-                  <view class="_label-icon-1"> </view>
-                  <view class="_label-name">姣涢噸锛�</view>
-                </view>
-                <view class="_content">
-                  {{ item.value3 }}
-                </view>
-              </view>
-              <view class="row-list">
-                <view class="_label">
-                  <view class="_label-icon-2"> </view>
-                  <view class="_label-name">鐩橀噸锛�</view>
-                </view>
-                <view class="_content">
-                  {{ item.value4 }}
-                </view>
-              </view>
-              <view class="row-list">
-                <view class="_label">
-                  <view class="_label-icon-3"> </view>
-                  <view class="_label-name">鍑�閲嶏細</view>
-                </view>
-                <view class="_content">
-                  {{ item.value5 }}
-                </view>
-              </view>
-              <view class="row-list">
-                <view class="_label">
-                  <view class="_label-icon-1"> </view>
-                  <view class="_label-name">鏍哥閲嶉噺锛�</view>
-                </view>
-                <view class="_content">
-                  {{ item.value6 }}
-                </view>
-              </view>
-              <view class="row-list">
-                <view class="_label">
-                  <view class="_label-icon-2"> </view>
-                  <view class="_label-name">鍙夎溅鐩橀噸锛�</view>
-                </view>
-                <view class="_content">
-                  {{ item.value7 }}
-                </view>
-              </view>
-            </view>
-          </view> 
-        </u-cell-group>
-        <view class="loadmore" @click="loadMore">
-          <u-loadmore :status="loadStatus"></u-loadmore>
-        </view>
-      </scroll-view>
-    </view>
-  </view>
+		</u-navbar>
+		<view class="wrap">
+			<scroll-view class="finishProductIn-locno-scroll-list" scroll-y="true" @scrolltolower="getmoreList()">
+				<u-cell-group class="finishProductIn-locno-scroll-list-group" :border="false">
+					<view class="content" v-for="(item, index) in list" :key="item.locNo" :index="index"
+						@click="selectNo(item)">
+						<view class="content-header">
+							<view class="content-header-title">{{ index + 1 }}</view>
+						</view>
+						<view class="content-body">
+							<view class="row-list">
+								<view class="_label">
+									<view class="_label-icon-1"> </view>
+									<view class="_label-name">鎵规鍙凤細</view>
+								</view>
+								<view class="_content">
+									{{ item.outBatchNo }}
+								</view>
+							</view>
+							<view class="row-list">
+								<view class="_label">
+									<view class="_label-icon-2"> </view>
+									<view class="_label-name">浜у搧鎻忚堪锛�</view>
+								</view>
+								<view class="_content">
+									{{ item.netWeight }}
+								</view>
+							</view>
+							<view class="row-list">
+								<view class="_label">
+									<view class="_label-icon-3"> </view>
+									<view class="_label-name">闆朵欢鍙凤細</view>
+								</view>
+								<view class="_content">
+									{{ item.partNo }}
+								</view>
+							</view>
+							<view class="row-list">
+								<view class="_label">
+									<view class="_label-icon-1"> </view>
+									<view class="_label-name">姣涢噸锛�</view>
+								</view>
+								<view class="_content">
+									{{ item.grossWeight }}
+								</view>
+							</view>
+							<view class="row-list">
+								<view class="_label">
+									<view class="_label-icon-2"> </view>
+									<view class="_label-name">鐩橀噸锛�</view>
+								</view>
+								<view class="_content">
+									{{ item.trayWeight }}
+								</view>
+							</view>
+							<view class="row-list">
+								<view class="_label">
+									<view class="_label-icon-3"> </view>
+									<view class="_label-name">鍑�閲嶏細</view>
+								</view>
+								<view class="_content">
+									{{ item.value5 }}
+								</view>
+							</view>
+							<view class="row-list">
+								<view class="_label">
+									<view class="_label-icon-1"> </view>
+									<view class="_label-name">鏍哥閲嶉噺锛�</view>
+								</view>
+								<view class="_content">
+									{{ item.netWeight }}
+								</view>
+							</view>
+							<view class="row-list">
+								<view class="_label">
+									<view class="_label-icon-2"> </view>
+									<view class="_label-name">鍙夎溅鐩橀噸锛�</view>
+								</view>
+								<view class="_content">
+									{{ item.value7 }}
+								</view>
+							</view>
+						</view>
+					</view>
+				</u-cell-group>
+				<view class="loadmore" @click="getmoreList()">
+					<u-loadmore :status="status" :load-text="loadText" @loadmore="getmoreList()" />
+				</view>
+			</scroll-view>
+		</view>
+		<u-toast ref="uToast" />
+		<u-modal v-model="maskShow" title=""
+			:show-confirm-button="false" >
+			<view  @touchmove.stop.prevent="moveHandle" @click="maskclose">
+				<scroll-view class="uni-scroll_box" scroll-y @touchmove.stop.prevent="moveHandle"
+					@click.stop="moveHandle">
+					<view class="modal-title">閫夋嫨钃濈墮璁惧</view>
+					<view v-if="listDevice.length === 0" class="empty-tip">鏆傛棤璁惧</view>
+					<view v-for="(item, index) in listDevice" :key="index" @click="tapQuery(item)" class="device-item">
+						<view class="device-name">
+							<text>鍚嶇О锛�</text>
+							<text>{{ item.name || '鏈煡璁惧' }}</text>
+						</view>
+						<view class="device-uuid">
+							<text>UUID:</text>
+							<text>{{ item.address || '鏃犲湴鍧�' }}</text>
+						</view>
+					</view>
+				</scroll-view>
+			</view>
+		</u-modal>
+				<!-- </scroll-view>
+			</view>
+		</u-modal> -->
+		<!-- 杩炴帴鍜屾墦鍗扮姸鎬佹寚绀哄櫒 -->
+		<view class="status-indicator" :class="{'connected': connectionStatus === 'connected', 'connecting': connectionStatus === 'connecting', 'disconnected': connectionStatus === 'disconnected'}">
+			<text class="status-text">{{ getConnectionStatusText() }}</text>
+			<text class="print-status" v-if="printStatus !== 'idle'">- {{ getPrintStatusText() }}</text>
+		</view>
+	</view>
 </template>
 <script>
-import content_bg from '@/static/custom/finishProductIn/locNoBg.png'
-export default {
-  data() {
-    return {
-      background: {
-        backgroundImage: `url(${content_bg})`,
-        backgroundAttachment: 'fixed',
-        backgroundSize: '100% auto',
-        backgroundRepeat: 'no-repeat',
-      },
-      keywords: '',
-      alllist: [],
-      originList: [],
-      query: {
-        current: 1,
-        size: 10
-      },
-      list: [
-        {
-          value0: '123456789',
-          value1: '123456789',
-          value2: '123456789',
-          value3: '123456789',
-          value4: '123456789',
-          value5: '123456789',
-          value6: '123456789',
-          value7: '123456789'
-        },
-        {
-          value0: '123456789',
-          value1: '123456789',
-          value2: '123456789',
-          value3: '123456789',
-          value4: '123456789',
-          value5: '123456789',
-          value6: '123456789',
-          value7: '123456789'
-        }
-      ],
-      count: 0,
-      loadStatus: 'loading'
-    };
-  },
-  onLoad() {
-    this.$u.api.finishProductIn.fetchList().then(res => {
-      this.alllist = res.data
-      this.originList = res.data
-      this.loadList()
-    })
-  },
-  methods: {
-    loadMore() {
-      if (this.loadStatus == "nomore" || this.loadStatus == "loading") {
-        return
-      }
-      this.loadStatus = "loading";
-      setTimeout(() => {
-        this.query.current += 1;
-        this.loadList();
-      }, 100);
-    },
-    loadList() {
-      const data = this.originList.slice((this.query.current - 1) * this.query.size, this.query.current * this.query.size)
-      this.list = this.list.concat(data);
-      this.loadStatus = "loadmore";
-      if (!data || data.length < this.query.size) {
-        this.loadStatus = "nomore";
-      }
-    },
-    search(value) {
-      this.list = [];
-      this.query.current = 1;
-      if (value) {
-        this.originList = this.alllist.filter(item => item.locNo.includes(value))
-      } else {
-        this.originList = this.alllist
-      }
-      this.loadList()
-    },
-    // 鎵撳嵃鍗曚釜淇℃伅
-    selectNo(no) {
-      uni.showModal({
+	import content_bg from '@/static/custom/finishProductIn/locNoBg.png'
+	const jcapi = uni.requireNativePlugin("JCSDK-JCApiModule");
+
+	// 浜岀淮鐮佺被鍨�
+	const QrCodeType = {
+		QrCode: 31,
+		PDF417: 32,
+		DataMatrix: 33,
+		AZTEC: 34
+	}
+	// 绾挎潯绫诲瀷
+	const LineType = {
+		Solid: 1, // 瀹炵嚎
+		Dotted: 2, // 铏氱嚎锛堥粯璁よ櫄瀹�1:1鐩搁棿锛�
+	}
+	// 鎹㈣鏂瑰紡
+	const LineModeType = {
+		Justified: 1, // 瀹介珮鍥哄畾锛屽唴瀹硅嚜閫傚簲锛堝瓧鍙�/瀛楅棿璺�/琛岄棿璺濇寜姣斾緥缂╂斁锛�
+		AutoHeight: 2, // 瀹藉害鍥哄畾锛岄珮搴﹁嚜閫傚簲
+		Fixed: 4, // 瀹介珮鍥哄畾锛岃秴鍑洪儴鍒嗚鍓�
+		Adapt: 6, // 瀹介珮鍥哄畾锛屽唴瀹硅秴杩囨椂棰勮瀹介珮鑷姩缂╁皬
+	}
+	export default {
+		data() {
+			return {
+				background: {
+					backgroundImage: `url(${content_bg})`,
+					backgroundAttachment: 'fixed',
+					backgroundSize: '100% auto',
+					backgroundRepeat: 'no-repeat',
+				},
+				keywords: '',
+				list: [],
+				total: 0,
+				pageNum: 1,
+				pageSize: 10,
+				status: 'loading',
+				loadText: {
+					loadmore: "鍔犺浇鏇村...",
+					loading: "鍔姏鍔犺浇涓�...",
+					nomore: "娌℃湁鏇村浜�",
+				},
+				maskShow: false,
+				listDevice: [], //钃濈墮璁惧鏁版嵁
+				printQueue: [], // 鎵撳嵃闃熷垪
+				printing: false, // 鏄惁姝e湪鎵撳嵃
+				printDensity: 3, // 榛樿鎵撳嵃娴撳害
+				labelType: 1, // 榛樿鏍囩绫诲瀷
+				// 1锛氶棿闅欑焊
+				// 2锛氶粦鏍囩焊
+				// 3锛氳繛缁焊
+				// 4锛氬畾瀛旂焊
+				// 5锛氶�忔槑绾�
+				printMode: 2, // 榛樿鎵撳嵃妯″紡
+				//	1锛氱儹鏁�
+				// 	2锛氱儹杞嵃
+				connectedDevice: null, // 宸茶繛鎺ョ殑鎵撳嵃鏈�
+				connectionStatus: 'disconnected', // 杩炴帴鐘舵��: disconnected, connecting, connected
+				printStatus: 'idle', // 鎵撳嵃鐘舵��: idle, printing, error
+				errorMessage: '' // 閿欒淇℃伅
+			};
+		},
+		onLoad() {
+			this.getlist()
+			// 鍒濆鍖朣DK
+			jcapi.initSDK()
+			// 鐩戝惉椤电爜鍥炶皟
+			jcapi.didReadPrintCountInfo(function(r) {
+				console.log(r)
+			})
+
+			// 鐩戝惉閿欒鍥炶皟
+			jcapi.didReadPrintErrorInfo((r) => {
+				console.log(r)
+				if (r.code == 23) {
+					// 鎵撳嵃鏈烘柇寮�杩炴帴
+					this.connectedDevice = null
+					uni.showToast({
+						icon: 'none',
+						title: '鎵撳嵃鏈鸿繛鎺ュ凡鏂紑锛岃閲嶆柊杩炴帴',
+						duration: 2 * 1000
+					})
+				} else {
+					uni.showToast({
+						icon: 'none',
+						title: JSON.stringify(r),
+						duration: 2 * 1000
+					})
+				}
+			})
+		},
+		methods: {
+			getmoreList() {
+				if (this.pageSize >= this.total) {
+					this.status = "nomore";
+					return;
+				}
+				this.status = "loading";
+				setTimeout(() => {
+					this.pageSize += this.pageSize;
+					this.getlist();
+				}, 1000);
+			},
+			getlist() {
+				this.$u.api.workReporting
+					.getWorkshopOrder({
+						current: this.pageNum,
+						size: this.pageSize
+					})
+					.then((res) => {
+						this.list = res.data.records;
+						this.total = res.data.total;
+						if (this.pageSize >= this.total) {
+							this.status = "nomore";
+						} else {
+							this.status = "loadmore";
+						}
+					});
+			},
+			search(value) {
+				if (value) {
+					this.list = [];
+					this.pageSize = 10;
+					this.$u.api.workReporting
+						.getWorkshopOrder({
+							current: this.pageNum,
+							size: this.pageSize,
+							moNo: value,
+						})
+						.then((res) => {
+							this.list = res.data.records;
+							this.total = res.data.total;
+							if (this.pageSize >= this.total) {
+								this.status = "nomore";
+							} else {
+								this.status = "loadmore";
+							}
+						});
+				} else {
+					this.getlist();
+				}
+			},
+			// 妫�鏌ヨ摑鐗欒繛鎺ョ姸鎬�
+			async checkBluetoothConnection() {
+				console.log('disconnected1111111111111')
+				if (!this.connectedDevice) {
+					this.connectionStatus = 'disconnected';
+					return false;
+				}
+				console.log('disconnected2222222222')
+
+				// 璁剧疆涓鸿繛鎺ヤ腑鐘舵��
+				this.connectionStatus = 'connecting';
+				console.log('disconnected33333333333')
+
+				// 澧炲己杩炴帴鐘舵�佹娴�
+				return new Promise(resolve => {
+					// 绠�鍖栬繛鎺ョ姸鎬佹娴嬶紝鐩存帴浣跨敤宸茶褰曠殑杩炴帴鐘舵��
+					if (this.connectedDevice) {
+						this.connectionStatus = 'connected';
+						resolve(true);
+					} else {
+						this.connectionStatus = 'disconnected';
+						uni.showToast({
+							icon: 'none',
+							title: '鎵撳嵃鏈烘湭杩炴帴锛岃鍏堣繛鎺�',
+							duration: 2000
+						});
+						resolve(false);
+					}
+				});
+			},
+
+			// 娣诲姞鍒版墦鍗伴槦鍒�
+			addToPrintQueue(items) {
+				if (!Array.isArray(items)) {
+					items = [items];
+				}
+
+				this.printQueue.push(...items);
+				// 濡傛灉涓嶅湪鎵撳嵃涓紝鍒欏紑濮嬪鐞嗛槦鍒�
+				if (!this.printing) {
+					this.processPrintQueue();
+				}
+			},
+
+			// 澶勭悊鎵撳嵃闃熷垪
+			async processPrintQueue() {
+				while (this.printQueue.length > 0) {
+					console.log('111111111111111', this.printQueue.length)
+					
+					// 妫�鏌ヨ繛鎺ョ姸鎬�
+					console.log('12222222222222222')
+					const isConnected = await this.checkBluetoothConnection();
+					console.log('isConnected',isConnected)
+					if (!isConnected) {
+						// 濡傛灉鏈繛鎺ワ紝鏄剧ず钃濈墮杩炴帴瀵硅瘽妗�
+						this.searchDevice();
+						// 涓嶆槸鐩存帴return锛岃�屾槸绛夊緟鐢ㄦ埛杩炴帴鍚庡啀缁х画澶勭悊
+						return;
+					}
+
+					this.printing = true;
+					this.printStatus = 'printing';
+
+					// 鍙栧嚭闃熷垪涓殑绗竴涓换鍔�
+					const item = this.printQueue.shift();
+					console.log('鎵撳嵃鐨勪换鍔�',item)
+
+					try {
+						// 鎵ц鎵撳嵃
+						await this.printQrCode(item);
+
+						// 鎵撳嵃鎴愬姛鍚庣户缁鐞嗕笅涓�涓�
+						uni.showToast({
+							title: '鎵撳嵃鎴愬姛',
+							icon: 'success',
+							duration: 1000
+						});
+
+						// 鐭殏寤惰繜锛岄伩鍏嶆墦鍗版満缂撳瓨婧㈠嚭
+						await new Promise(resolve => setTimeout(resolve, 1000));
+					} catch (error) {
+						console.error('鎵撳嵃鍑洪敊:', error);
+						this.printStatus = 'error';
+						this.errorMessage = error.message || '鎵撳嵃鏃跺彂鐢熸湭鐭ラ敊璇�';
+						this.printing = false;
+
+						// 璁板綍澶辫触鐨勪换鍔★紝涓嶉噸鏂版坊鍔犲埌闃熷垪
+						this.failedPrintJobs = this.failedPrintJobs || [];
+						this.failedPrintJobs.push(item);
+
+						uni.showToast({
+							title: `鎵撳嵃澶辫触: ${this.errorMessage}`,
+							icon: 'none',
+							duration: 2000
+						});
+						// 缁х画澶勭悊涓嬩竴涓换鍔�
+						continue;
+					}
+				}
+
+				this.printing = false;
+				this.printStatus = 'idle';
+			},
+			// 鎵撳嵃鍗曚釜淇℃伅
+			selectNo(item) {
+				let that = this
+				uni.showModal({
 					title: '鎻愮ず',
 					content: '鏄惁鎵撳嵃瑁呯鍗曪紵',
 					showCancel: true,
-        success: function (res) {
-          if (res.confirm) {
-              
+					success: async function(res) {
+						if (res.confirm) {
+							// 娣诲姞鍒版墦鍗伴槦鍒�
+							that.addToPrintQueue(item);
 						}
 					}
 				});
-    },
-    // 鎵撳嵃鍏ㄩ儴淇℃伅
-    goPrintAll() {
-      uni.showModal({
+			},
+
+			// 鎵撳嵃鍏ㄩ儴淇℃伅
+			goPrintAll() {
+				let that = this
+				uni.showModal({
 					title: '鎻愮ず',
-					content: '鏄惁鎵撳嵃瑁呯鍗曪紵',
+					content: `鏄惁鎵撳嵃鍏ㄩ儴${that.list.length}鏉¤绠卞崟锛焋,
 					showCancel: true,
-        success: function (res) {
-          if (res.confirm) {
-              
+					success: async function(res) {
+						if (res.confirm) {
+							// 娣诲姞鍒版墦鍗伴槦鍒�
+							that.addToPrintQueue([...that.list]);
 						}
 					}
 				});
-    },
+			},
+			moveHandle() {
 
-    //鍒锋柊涓婁竴涓〉闈�
-    refreshLastPage(no) {
-      // 鍛婄煡 A.vue 鏇存柊鏁版嵁
-      // 鑾峰彇椤甸潰鏍�
-      let pages = getCurrentPages()
+			},
+			maskclose() {
 
-      // 鑾峰彇涓婁竴椤垫爤
-      let prevPage = pages[pages.length - 2]
+			},
+			//鎵撳嵃浜岀淮鐮�
+			async printQrCode(item) {
+				return new Promise(async (resolve, reject) => {
+					console.log('item de shuju ', item)
+					// const params = {
+					// 	rwMatlBindId: item.id
+					// };
+					try {
+						let res = {
+							data: {
+							ht:'1',
+							lj:'1',
+							ljms:'1',
+							fh:'1',
+							scdt:'1',
+							scph:'1',
+							fhdw:'1',
+							shdw:'1',
+						}}
+						// let res = await this.$u.api.dailyPaper.zongjianLabelInfo(params)
+						if (!res.data) {
+							this.$refs.uToast.show({
+								title: '鏈煡璇㈠埌璇ユ爣绛句俊鎭紒',
+								type: 'warning '
+							})
+							reject(new Error('鏈煡璇㈠埌璇ユ爣绛句俊鎭�'));
+							return
+						}
 
-      // 瑙﹀彂涓婁竴椤� upData 鍑芥暟(骞舵惡甯﹀弬鏁�)
-      prevPage.$vm.setNo(no)
+						// 浠嶢PI鍝嶅簲涓彁鍙栨墍闇�鏁版嵁
+						const {
+							ht,
+							lj,
+							ljms,
+							fh,
+							scdt,
+							scph,
+							fhdw,
+							shdw
+						} = res.data
 
-      // 杩斿洖涓婁竴椤�
-      uni.navigateBack({
-        delta: 1
-      })
-    },
-  }
-};
+						// 鍒濆鍖栫敾鏉�
+						jcapi.initDrawingBoard({
+							width: 70,
+							height: 49,
+							rotate: 90
+						});
+
+						// 缁樺埗浜岀淮鐮�
+						const qrContent = 
+							`ht:${ht}\nlj:${lj}\nljms:${ljms}\nfh:${fh}\nscdt:${scdt}\nscph:${scph}\nfhdw:${fhdw}\nshdw:${shdw}`;
+						jcapi.drawLabelQrCode({
+							x: 43.5,
+							y: 2,
+							width: 24,
+							height: 24,
+							value: qrContent,
+							rotate: 0,
+							codeType: QrCodeType.QrCode,
+						});
+
+						// 缁樺埗妯嚎
+						this.getDrawLabelLine(1, 1, 67, 0.5, 0, LineType.Solid)
+						this.getDrawLabelLine(1, 6, 42, 0.3, 0, LineType.Solid)
+						this.getDrawLabelLine(1, 11, 42, 0.3, 0, LineType.Solid)
+						this.getDrawLabelLine(1, 16, 42, 0.3, 0, LineType.Solid)
+						this.getDrawLabelLine(1, 21, 42, 0.3, 0, LineType.Solid)
+						this.getDrawLabelLine(1, 27, 67, 0.3, 0, LineType.Solid)
+						this.getDrawLabelLine(1, 32, 67, 0.3, 0, LineType.Solid)
+						this.getDrawLabelLine(1, 37, 67, 0.3, 0, LineType.Solid)
+						this.getDrawLabelLine(1, 42, 67, 0.3, 0, LineType.Solid)
+						this.getDrawLabelLine(1, 47, 67, 0.5, 0, LineType.Solid)
+
+						//缁樺埗绔栫嚎
+						this.getDrawLabelLine(1, 1, 0.5, 46, 0, LineType.Solid) // 绔栫嚎1
+						this.getDrawLabelLine(43, 1, 0.3, 26, 0, LineType.Solid) // 绔栫嚎2
+						this.getDrawLabelLine(68, 1, 0.5, 46, 0, LineType.Solid) // 绔栫嚎3
+
+						// 缁樺埗鏂囨湰
+						this.getDrawLabelText(3, 2.5, 40, 8, '涓ぉ绉戞妧瑁呯娓呭崟', 2.5, 0, LineModeType.AutoHeight, 0, 0, 1, 1, 1)
+						this.getDrawLabelText(2, 7, 25, 8, '鍚堝悓鍙�:', 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 1, 1)
+						this.getDrawLabelText(2, 12, 25, 8, '闆朵欢鍙�:', 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 1, 1)
+						this.getDrawLabelText(2, 17, 25, 8, '闆朵欢鎻忚堪:', 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 1, 1)
+						this.getDrawLabelText(2, 22.5, 25, 8, '鍙戣揣/瑁呯鏁�:', 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 1, 1)
+						this.getDrawLabelText(2, 27.5, 25, 8, '鐢熶骇鏃ユ湡:', 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 1, 1)
+						this.getDrawLabelText(2, 32.5, 25, 8, '鐢熶骇鎵瑰彿:', 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 1, 1)
+						this.getDrawLabelText(2, 37.5, 25, 8, '鍙戣揣鍗曚綅:', 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 1, 1)
+						this.getDrawLabelText(2, 42.5, 25, 8, '鏀惰揣鍗曚綅:', 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 1, 1)
+
+						// 濉厖鍙傛暟鍊�
+						this.getDrawLabelText(11, 7, 30, 8, ht, 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 0, 1)
+						this.getDrawLabelText(11, 12, 32, 8, lj, 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 0, 1)
+						this.getDrawLabelText(14, 17, 30, 8, ljms, 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 0, 1)
+						this.getDrawLabelText(17, 22.5, 27, 8, fh, 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 0, 1)
+						this.getDrawLabelText(14, 27.5, 55, 8, scdt, 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 0, 1)
+						this.getDrawLabelText(14, 32.7, 55, 8, scph, 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 0, 1)
+						this.getDrawLabelText(14, 37.5, 55, 8, fhdw, 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 0, 1)
+						this.getDrawLabelText(14, 42.5, 55, 8, shdw, 2.5, 0, LineModeType.AutoHeight, 0, 0, 0, 0, 1)
+
+						// 鐢熸垚鎵撳嵃鏁版嵁
+						let imageJsonObj = jcapi.generateLabelJson()
+						console.log('鎵撳嵃鐨勬暟鎹�',imageJsonObj)
+
+						// 璁剧疆鎵撳嵃浠诲姟
+						jcapi.startJob({
+							totalCount: 1,
+							density: this.printDensity,
+							labelType: this.labelType,
+							printMode: this.printMode,
+						}, function(r) {
+							if (r.code == 0) {
+								// 鎵撳嵃鏁版嵁
+								// 瀛樺偍鍘熷鎵撳嵃璁℃暟鍥炶皟
+								const originalPrintCountCallback = jcapi.didReadPrintCountInfo._callback;
+								// 涓存椂鎵撳嵃璁℃暟鍥炶皟锛岀敤浜庣‘璁ゆ墦鍗板畬鎴�
+								const tempPrintCountCallback = (printResult) => {
+									console.log("鎵撳嵃璁℃暟鍥炶皟:", printResult);
+									// 鎭㈠鍘熷鍥炶皟
+									jcapi.didReadPrintCountInfo(originalPrintCountCallback);
+									// 缁撴潫褰撳墠鎵撳嵃浠诲姟
+									// 瑙f瀽Promise琛ㄧず鎵撳嵃瀹屾垚
+									resolve();
+								};
+								// 璁剧疆涓存椂鍥炶皟
+								jcapi.didReadPrintCountInfo(tempPrintCountCallback);
+
+								// 娣诲姞鎵撳嵃瓒呮椂澶勭悊
+								const printTimeout = setTimeout(() => {
+									jcapi.didReadPrintCountInfo(originalPrintCountCallback);
+									reject(new Error('鎵撳嵃瓒呮椂鏈搷搴�'));
+								}, 10000);
+
+								jcapi.printData(imageJsonObj, {
+									"printQuantity": 1,
+								}, function(r) {
+									if (r.code != 0) {
+										console.log("鎵撳嵃澶辫触", r);
+										// 鎭㈠鍘熷鍥炶皟
+										jcapi.didReadPrintCountInfo(originalPrintCountCallback);
+										// 缁撴潫褰撳墠鎵撳嵃浠诲姟
+										reject(new Error(r.msg || '鎵撳嵃澶辫触'));
+									}
+									// 锟斤拷鍗版暟鎹彂閫佹垚鍔熷悗绛夊緟鎵撳嵃璁℃暟鍥炶皟纭瀹為檯鎵撳嵃瀹屾垚
+								
+								})
+							} else {
+								console.log("璁剧疆鎵撳嵃浠诲姟澶辫触", r)
+								reject(new Error(r.msg || '璁剧疆鎵撳嵃浠诲姟澶辫触'));
+							}
+						})
+					} catch (error) {
+						console.log(error)
+						reject(error);
+					}
+				});
+			},
+			tapQuery(item) {
+				this.maskShow = false
+				// 杩炴帴鎵撳嵃鏈�
+				let _this = this;
+				console.log(item)
+
+				// 璁剧疆涓鸿繛鎺ヤ腑鐘舵��
+				this.connectionStatus = 'connecting';
+
+				jcapi.openPrinterByDevice({
+					address: item.address,
+					name: item.name,
+					deviceType: 0 // 璁惧绫诲瀷锛�0-钃濈墮锛�1-缃戠粶
+				}, function(r) {
+					if (r.code == 0) {
+						_this.connectedDevice = item
+						_this.connectionStatus = 'connected';
+						uni.showToast({
+							title: "杩炴帴鎴愬姛",
+							duration: 1500
+						})
+						// 寮�濮嬪鐞嗘墦鍗伴槦鍒�
+						console.log('鎵撳嵃闃熷垪',_this.printQueue)
+						if (_this.printQueue.length > 0) {
+							_this.processPrintQueue();
+						}
+					} else {
+						_this.connectionStatus = 'disconnected';
+						uni.showToast({
+							title: "杩炴帴澶辫触: " + (r.msg || '鏈煡閿欒'),
+							icon: 'none',
+							duration: 2000
+						})
+					}
+				})
+			},
+			//鎵撳嵃鐩稿叧
+			searchDevice() {
+				let _this = this
+				uni.openBluetoothAdapter({ // 纭钃濈墮鏄惁鎵撳紑
+					success(r) {
+						uni.showLoading({
+							title: "鎼滅储涓�..."
+						})
+						// 鏈巿浜堣摑鐗欑浉鍏虫潈闄愬拰鏈墦寮�鎵嬫満瀹氫綅浼氭悳绱笉鍒拌澶�
+						jcapi.getBluetoothDevices(function(r) {
+							console.log("device:" + JSON.stringify(r))
+							// 鎼滅储鍒拌澶囧洖璋�
+							uni.hideLoading()
+							// 濡傛灉涔嬪墠鏈夎繛鎺ョ殑璁惧浣嗕笉鍦ㄦ悳绱㈢粨鏋滀腑锛岃鏄庤澶囧凡鏇存崲
+							if (_this.connectedDevice && !r.some(dev => dev.address === _this
+									.connectedDevice.address)) {
+								_this.connectedDevice = null;
+								uni.showToast({
+									icon: 'none',
+									title: '宸茶繛鎺ョ殑钃濈墮璁惧宸叉洿鎹紝璇烽噸鏂伴�夋嫨',
+									duration: 2000
+								});
+							}
+							_this.listDevice = r;
+							_this.maskShow = true
+						})
+					},
+					fail(e) {
+						uni.showModal({
+							title: '鎻愮ず',
+							content: '鎵撳紑钃濈墮澶辫触锛岃妫�鏌ヨ摑鐗欐槸鍚﹀紑鍚�',
+							showCancel: false
+						})
+						console.log("寮�鍚摑鐗欒澶囧け璐�" + e)
+					}
+				})
+			},
+			// 缁樺埗妯嚎 锟斤拷锟界嚎
+			getDrawLabelLine(x, y, width, height, rotate, lineType) {
+				jcapi.drawLabelLine({
+					x: x,
+					y: y,
+					width: width,
+					height: height,
+					rotate: rotate,
+					lineType: lineType
+				});
+			},
+			// 濉啿鏂囧瓧鏍囬
+			getDrawLabelText(x, y, width, height, value, fontSize, rotate, lineMode, lineSpace, letterSpace,
+				textAlignHorizontal, textAlignVertical, bold) {
+
+				jcapi.drawLabelText({
+					x: x,
+					y: y,
+					width: width,
+					height: height,
+					value: value,
+					fontSize: fontSize,
+					rotate: rotate,
+					lineMode: lineMode,
+					lineSpace: lineSpace,
+					letterSpace: letterSpace,
+					textAlignHorizontal: textAlignHorizontal,
+					textAlignVertical: textAlignVertical,
+					bold: bold
+				})
+			},
+
+			//鍒锋柊涓婁竴涓〉闈�
+			getConnectionStatusText() {
+				switch(this.connectionStatus) {
+					case 'connected':
+						return '钃濈墮宸茶繛鎺�';
+					case 'connecting':
+						return '钃濈墮杩炴帴涓�...';
+					default:
+						return '钃濈墮鏈繛鎺�';
+				}
+			},
+			getPrintStatusText() {
+				switch(this.printStatus) {
+					case 'printing':
+						const total = this.printQueue.length + 1; // 闃熷垪涓墿浣� + 褰撳墠姝e湪鎵撳嵃
+						const current = total - this.printQueue.length;
+						return `鎵撳嵃涓�(${current}/${total})`;
+					case 'error':
+						return `鎵撳嵃閿欒: ${this.errorMessage}`;
+					default:
+						return '灏辩华';
+				}
+			},
+			refreshLastPage(no) {
+				// 鍛婄煡 A.vue 鏇存柊鏁版嵁
+				// 鑾峰彇椤甸潰鏍�
+				let pages = getCurrentPages()
+
+				// 鑾峰彇涓婁竴椤垫爤
+				let prevPage = pages[pages.length - 2]
+
+				// 瑙﹀彂涓婁竴椤� upData 鍑芥暟(骞舵惡甯﹀弬鏁�)
+				prevPage.$vm.setNo(no)
+
+				// 杩斿洖涓婁竴椤�
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+		}
+	};
 </script>
 <style lang="scss">
-.finishProductIn-locno-bg {
-  background-color: #F6F9FF;
-  background-image: url('~@/static/custom/finishProductIn/locNoBg.png');
-  // background: linear-gradient(180deg,rgba(206,227,254,1),rgba(206,227,254,1) 20%,rgba(206,227,254,0.5) 40%,rgba(206,227,254,0.25) 60%,rgba(206,227,254,0.08) 80%,rgba(206,227,254,0));
-  padding: 0 20rpx;
-  background-attachment: fixed;
-  background-size: 100% auto;
-  background-repeat: no-repeat;
-  position: fixed;
-  top: 0;
-  bottom: 0;
-  width: 100%;
-  z-index: -1;
-}
+	.finishProductIn-locno-bg {
+		background-color: #F6F9FF;
+		background-image: url('~@/static/custom/finishProductIn/locNoBg.png');
+		// background: linear-gradient(180deg,rgba(206,227,254,1),rgba(206,227,254,1) 20%,rgba(206,227,254,0.5) 40%,rgba(206,227,254,0.25) 60%,rgba(206,227,254,0.08) 80%,rgba(206,227,254,0));
+		padding: 0 20rpx;
+		background-attachment: fixed;
+		background-size: 100% auto;
+		background-repeat: no-repeat;
+		position: fixed;
+		top: 0;
+		bottom: 0;
+		width: 100%;
+		z-index: -1;
+	}
 
-.finishProductIn-locno-search {
-  padding: 40rpx 30rpx 20rpx 30rpx;
-}
+	.finishProductIn-locno-search {
+		padding: 40rpx 30rpx 20rpx 30rpx;
+	}
 
-.wrap .finishProductIn-locno-scroll-list {
-  height: calc(100vh - var(--window-top) - var(--window-bottom) - 242rpx);
-  width: 100%;
-}
+	.wrap .finishProductIn-locno-scroll-list {
+		height: calc(100vh - var(--window-top) - var(--window-bottom) - 242rpx);
+		width: 100%;
+	}
 
-.finishProductIn-locno-scroll-list-group {
-  ::v-deep .u-cell-item-box {
-    background-color: rgba(250, 252, 255, 0.36) !important;
-    padding: 0rpx 30rpx;
-  }
+	.finishProductIn-locno-scroll-list-group {
+		::v-deep .u-cell-item-box {
+			background-color: rgba(250, 252, 255, 0.36) !important;
+			padding: 0rpx 30rpx;
+		}
 
-  .content {
-    font-size: 12px;
-    background-color: #ffffff;
-    box-sizing: border-box;
-    border-radius: 10rpx;
-    margin: 0rpx 0rpx 16rpx;
-    padding: 20rpx 8rpx;
-    box-shadow: none;
-    display: flex;
-    align-items: center;
+		.content {
+			font-size: 12px;
+			background-color: #ffffff;
+			box-sizing: border-box;
+			border-radius: 10rpx;
+			margin: 0rpx 0rpx 16rpx;
+			padding: 20rpx 8rpx;
+			box-shadow: none;
+			display: flex;
+			align-items: center;
 
-    .content-header {
-      width: 40rpx;
-      height: 90rpx;
-      display: flex;
-      align-items: center;
+			.content-header {
+				width: 40rpx;
+				height: 90rpx;
+				display: flex;
+				align-items: center;
 
-      .content-header-icon {
-        background-image: url("~@/static/custom/moveWareHouse/header_icon.png");
-        background-size: 100% auto;
-        background-repeat: no-repeat;
-        height: 28rpx;
-        width: 28rpx;
-      }
+				.content-header-icon {
+					background-image: url("~@/static/custom/moveWareHouse/header_icon.png");
+					background-size: 100% auto;
+					background-repeat: no-repeat;
+					height: 28rpx;
+					width: 28rpx;
+				}
 
-      .content-header-title {
-        margin-left: 11rpx;
-        font-size: 26rpx;
-        font-weight: bold;
-        color: #3d52f5;
-      }
-    }
+				.content-header-title {
+					margin-left: 11rpx;
+					font-size: 26rpx;
+					font-weight: bold;
+					color: #3d52f5;
+				}
+			}
 
-    .content-body {
-      flex: 1;
-      background: #f5f9ff;
-      border-radius: 10rpx;
-      padding: 0rpx 23rpx;
+			.content-body {
+				flex: 1;
+				background: #f5f9ff;
+				border-radius: 10rpx;
+				padding: 0rpx 23rpx;
 
-      .row-list {
-        height: 60rpx;
-        display: flex;
-        flex-direction: row;
-        padding: 0px;
-        align-items: center;
-      }
+				.row-list {
+					height: 60rpx;
+					display: flex;
+					flex-direction: row;
+					padding: 0px;
+					align-items: center;
+				}
 
-      .row-list ._label {
-        display: flex;
-        flex: 0.8;
-        color: #909399;
-        align-items: center;
+				.row-list ._label {
+					display: flex;
+					flex: 0.8;
+					color: #909399;
+					align-items: center;
 
-        ._label-icon-1 {
-          background-image: url("~@/static/custom/moveWareHouse/label-icon-1.png");
-          background-size: 100% auto;
-          background-repeat: no-repeat;
-          height: 26rpx;
-          width: 26rpx;
-        }
+					._label-icon-1 {
+						background-image: url("~@/static/custom/moveWareHouse/label-icon-1.png");
+						background-size: 100% auto;
+						background-repeat: no-repeat;
+						height: 26rpx;
+						width: 26rpx;
+					}
 
-        ._label-icon-2 {
-          background-image: url("~@/static/custom/moveWareHouse/label-icon-2.png");
-          background-size: 100% auto;
-          background-repeat: no-repeat;
-          height: 26rpx;
-          width: 26rpx;
-        }
+					._label-icon-2 {
+						background-image: url("~@/static/custom/moveWareHouse/label-icon-2.png");
+						background-size: 100% auto;
+						background-repeat: no-repeat;
+						height: 26rpx;
+						width: 26rpx;
+					}
 
-        ._label-icon-3 {
-          background-image: url("~@/static/custom/moveWareHouse/label-icon-3.png");
-          background-size: 100% auto;
-          background-repeat: no-repeat;
-          height: 26rpx;
-          width: 26rpx;
-        }
+					._label-icon-3 {
+						background-image: url("~@/static/custom/moveWareHouse/label-icon-3.png");
+						background-size: 100% auto;
+						background-repeat: no-repeat;
+						height: 26rpx;
+						width: 26rpx;
+					}
 
-        ._label-name {
-          margin-left: 11rpx;
-          font-size: 26rpx;
-          font-weight: 500;
-          color: #666666;
-        }
-      }
+					._label-name {
+						margin-left: 11rpx;
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
 
-      .row-list ._content {
-        flex: 1.5;
-        text-align: right;
-        color: #909399;
-        font-size: 24rpx;
-      }
+				.row-list ._content {
+					flex: 1.5;
+					text-align: right;
+					color: #909399;
+					font-size: 24rpx;
+				}
 
-      .row-list .s1 {
-        color: #d35651;
-      }
-    }
-  }
-}
-.navbar-right {
-			font-weight: 500;
-			font-size: 13px;
-			color: #0b0b0b;
-			line-height: 36rpx;
-			margin-right: 32rpx;
-}
-</style>
+				.row-list .s1 {
+					color: #d35651;
+				}
+			}
+		}
+	}
+
+	.navbar-right {
+		font-weight: 500;
+		font-size: 13px;
+		color: #0b0b0b;
+		line-height: 36rpx;
+		margin-right: 32rpx;
+	}
+
+	/* 妯℃�佹鏍峰紡浼樺寲 */
+	.u-modal {
+		--modal-width: 85% !important;
+		--modal-radius: 16rpx !important;
+		--modal-bg-color: #ffffff !important;
+	}
+
+	/* 妯℃�佹鍐呭鍖哄煙 */
+	.uni-scroll_box {
+		height: 500rpx !important;
+		padding: 20rpx;
+	}
+
+	/* 璁惧鍒楄〃椤规牱寮� */
+	.device-item {
+		background-color: #f5f9ff;
+		border-radius: 12rpx;
+		padding: 20rpx;
+		margin-bottom: 16rpx;
+		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
+	}
+
+	/* 璁惧鍚嶇О鏍峰紡 */
+	.device-name {
+		font-size: 28rpx;
+		font-weight: 500;
+		color: #333333;
+		margin-bottom: 10rpx;
+		display: flex;
+		justify-content: space-between;
+	}
+
+	/* UUID鏂囨湰鏍峰紡 */
+	.device-uuid {
+		font-size: 24rpx;
+		color: #666666;
+		word-break: break-all;
+	}
+
+	/* 妯℃�佹鏍囬 */
+	.modal-title {
+		font-size: 32rpx;
+		font-weight: bold;
+		color: #333333;
+		text-align: center;
+		margin-bottom: 20rpx;
+		padding-bottom: 10rpx;
+		border-bottom: 1rpx solid #eeeeee;
+	}
+
+	/* 绌虹姸鎬佹彁绀� */
+	.empty-tip {
+		text-align: center;
+		padding: 100rpx 0;
+		color: #999999;
+		font-size: 28rpx;
+	}
+
+	.status-indicator {
+		padding: 8rpx 16rpx;
+		font-size: 24rpx;
+		text-align: center;
+		color: #fff;
+		background-color: #666;
+	
+		&.connected {
+			background-color: #07c160;
+		}
+	
+		&.connecting {
+			background-color: #ff976a;
+		}
+	
+		&.disconnected {
+			background-color: #f53f3f;
+		}
+	
+		.print-status {
+			margin-left: 10rpx;
+			font-size: 22rpx;
+		}
+	}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3