From 3a75daf63f5b64af3388424c3de82662c20aa383 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期五, 18 七月 2025 13:49:01 +0800
Subject: [PATCH] 添加了打印超时定时器清除逻辑,确保打印成功后清除超时回调

---
 pages/wareHouse/nuclearScale/nuclearscalerecord.vue |  856 ++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 608 insertions(+), 248 deletions(-)

diff --git a/pages/wareHouse/nuclearScale/nuclearscalerecord.vue b/pages/wareHouse/nuclearScale/nuclearscalerecord.vue
index 260c131..d80cbfe 100644
--- a/pages/wareHouse/nuclearScale/nuclearscalerecord.vue
+++ b/pages/wareHouse/nuclearScale/nuclearscalerecord.vue
@@ -1,16 +1,49 @@
 <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">
+    <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)">
+      <!-- 杩炴帴鍜屾墦鍗扮姸鎬佹寚绀哄櫒 -->
+      <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>
+      <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>
@@ -21,7 +54,7 @@
                   <view class="_label-name">鎵规鍙凤細</view>
                 </view>
                 <view class="_content">
-                  {{ item.value0 }}
+                  {{ item.outBatchNo }}
                 </view>
               </view>
               <view class="row-list">
@@ -30,7 +63,7 @@
                   <view class="_label-name">浜у搧鎻忚堪锛�</view>
                 </view>
                 <view class="_content">
-                  {{ item.value1 }}
+                  {{ item.netWeight }}
                 </view>
               </view>
               <view class="row-list">
@@ -39,7 +72,7 @@
                   <view class="_label-name">闆朵欢鍙凤細</view>
                 </view>
                 <view class="_content">
-                  {{ item.value2 }}
+                  {{ item.partNo }}
                 </view>
               </view>
               <view class="row-list">
@@ -48,7 +81,7 @@
                   <view class="_label-name">姣涢噸锛�</view>
                 </view>
                 <view class="_content">
-                  {{ item.value3 }}
+                  {{ item.grossWeight }}
                 </view>
               </view>
               <view class="row-list">
@@ -57,7 +90,7 @@
                   <view class="_label-name">鐩橀噸锛�</view>
                 </view>
                 <view class="_content">
-                  {{ item.value4 }}
+                  {{ item.trayWeight }}
                 </view>
               </view>
               <view class="row-list">
@@ -75,7 +108,7 @@
                   <view class="_label-name">鏍哥閲嶉噺锛�</view>
                 </view>
                 <view class="_content">
-                  {{ item.value6 }}
+                  {{ item.netWeight }}
                 </view>
               </view>
               <view class="row-list">
@@ -90,26 +123,48 @@
             </view>
           </view>
         </u-cell-group>
-        <view class="loadmore" @click="loadMore">
-          <u-loadmore :status="loadStatus"></u-loadmore>
+        <view class="loadmore" @click="getmoreList()">
+          <u-loadmore
+            :status="status"
+            :load-text="loadText"
+            @loadmore="getmoreList()"
+          />
         </view>
       </scroll-view>
     </view>
     <u-toast ref="uToast" />
-    <view v-if="maskShow" class="uni-mask" @touchmove.stop.prevent="moveHandle" @click="maskclose">
-      <scroll-view class="uni-scroll_box" scroll-y @touchmove.stop.prevent="moveHandle" @click.stop="moveHandle">
-        <view class="uni-list-box" v-for="(item, index) in listDevice" :key="index" @click="tapQuery(item)">
-          <view>
-            <view class="uni-list_name">鍚嶇О锛歿{ item.name }}</view>
-            <view class="uni-list_item">UUID:{{ item.address }}</view>
+    <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>
-        </view>
-      </scroll-view>
-    </view>
+        </scroll-view>
+      </view>
+    </u-modal>
   </view>
 </template>
 <script>
-import content_bg from '@/static/custom/finishProductIn/locNoBg.png'
+import content_bg from "@/static/custom/finishProductIn/locNoBg.png";
 const jcapi = uni.requireNativePlugin("JCSDK-JCApiModule");
 
 // 浜岀淮鐮佺被鍨�
@@ -117,301 +172,484 @@
   QrCode: 31,
   PDF417: 32,
   DataMatrix: 33,
-  AZTEC: 34
-}
+  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',
+        backgroundAttachment: "fixed",
+        backgroundSize: "100% auto",
+        backgroundRepeat: "no-repeat",
       },
-      keywords: '',
-      alllist: [],
-      originList: [],
-      query: {
-        current: 1,
-        size: 10
+      keywords: "",
+      list: [],
+      total: 0,
+      pageNum: 1,
+      pageSize: 10,
+      status: "loading",
+      loadText: {
+        loadmore: "鍔犺浇鏇村...",
+        loading: "鍔姏鍔犺浇涓�...",
+        nomore: "娌℃湁鏇村浜�",
       },
-      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',
       maskShow: false,
       listDevice: [], //钃濈墮璁惧鏁版嵁
-      pritList: []
+      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.$u.api.finishProductIn.fetchList().then(res => {
-      this.alllist = res.data
-      this.originList = res.data
-      this.loadList()
-    })
+    this.getlist();
     // 鍒濆鍖朣DK
-    jcapi.initSDK()
+    jcapi.initSDK();
     // 鐩戝惉椤电爜鍥炶皟
     jcapi.didReadPrintCountInfo(function (r) {
-      console.log(r)
-    })
+      console.log(r);
+    });
 
     // 鐩戝惉閿欒鍥炶皟
-    jcapi.didReadPrintErrorInfo(function (r) {
-      console.log(r)
+    jcapi.didReadPrintErrorInfo((r) => {
+      console.log(r);
       if (r.code == 23) {
         // 鎵撳嵃鏈烘柇寮�杩炴帴
-        _this.connectedDevice = null
+        this.connectedDevice = null;
+        uni.showToast({
+          icon: "none",
+          title: "鎵撳嵃鏈鸿繛鎺ュ凡鏂紑锛岃閲嶆柊杩炴帴",
+          duration: 2 * 1000,
+        });
+      } else {
+        uni.showToast({
+          icon: "none",
+          title: JSON.stringify(r),
+          duration: 2 * 1000,
+        });
       }
-      uni.showToast({
-        icon: 'none',
-        title: JSON.stringify(r),
-        duration: 2 * 1000
-      })
-    })
+    });
   },
   methods: {
-    loadMore() {
-      if (this.loadStatus == "nomore" || this.loadStatus == "loading") {
-        return
+    getmoreList() {
+      if (this.pageSize >= this.total) {
+        this.status = "nomore";
+        return;
       }
-      this.loadStatus = "loading";
+      this.status = "loading";
       setTimeout(() => {
-        this.query.current += 1;
-        this.loadList();
-      }, 100);
+        this.pageSize += this.pageSize;
+        this.getlist();
+      }, 1000);
     },
-    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";
-      }
+    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) {
-      this.list = [];
-      this.query.current = 1;
       if (value) {
-        this.originList = this.alllist.filter(item => item.locNo.includes(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.originList = this.alllist
+        this.getlist();
       }
-      this.loadList()
+    },
+    // 妫�鏌ヨ摑鐗欒繛鎺ョ姸鎬�
+    async checkBluetoothConnection() {
+      if (!this.connectedDevice) {
+        this.connectionStatus = "disconnected";
+        return false;
+      }
+
+      // 璁剧疆涓鸿繛鎺ヤ腑鐘舵��
+      this.connectionStatus = "connecting";
+
+      // 澧炲己杩炴帴鐘舵�佹娴�
+      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) {
+        // 妫�鏌ヨ繛鎺ョ姸鎬�
+        const isConnected = await this.checkBluetoothConnection();
+        if (!isConnected) {
+          // 濡傛灉鏈繛鎺ワ紝鏄剧ず钃濈墮杩炴帴瀵硅瘽妗�
+          this.searchDevice();
+          // 涓嶆槸鐩存帴return锛岃�屾槸绛夊緟鐢ㄦ埛杩炴帴鍚庡啀缁х画澶勭悊
+          return;
+        }
+
+        this.printing = true;
+        this.printStatus = "printing";
+
+        // 鍙栧嚭闃熷垪涓殑绗竴涓换鍔�
+        const item = this.printQueue.shift();
+
+        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
+      let that = this;
       uni.showModal({
-        title: '鎻愮ず',
-        content: '鏄惁鎵撳嵃瑁呯鍗曪紵',
+        title: "鎻愮ず",
+        content: "鏄惁鎵撳嵃瑁呯鍗曪紵",
         showCancel: true,
-        success: function (res) {
+        success: async function (res) {
           if (res.confirm) {
-            that.searchDevice()
-            that.pritList = [item]
+            // 娣诲姞鍒版墦鍗伴槦鍒�
+            that.addToPrintQueue(item);
           }
-        }
+        },
       });
     },
+
     // 鎵撳嵃鍏ㄩ儴淇℃伅
     goPrintAll() {
-      let that = this
+      let that = this;
       uni.showModal({
-        title: '鎻愮ず',
-        content: '鏄惁鎵撳嵃瑁呯鍗曪紵',
+        title: "鎻愮ず",
+        content: `鏄惁鎵撳嵃鍏ㄩ儴${that.list.length}鏉¤绠卞崟锛焋,
         showCancel: true,
-        success: function (res) {
+        success: async function (res) {
           if (res.confirm) {
-            that.searchDevice()
-            that.pritList = this.list
+            // 娣诲姞鍒版墦鍗伴槦鍒�
+            that.addToPrintQueue([...that.list]);
           }
-        }
+        },
       });
     },
-    moveHandle() {
-
-    },
-    maskclose() {
-
-    },
+    moveHandle() {},
+    maskclose() {},
     //鎵撳嵃浜岀淮鐮�
     async printQrCode(item) {
-      const params = {
-        rwMatlBindId: item.id
-      }
-      let res = await this.$u.api.dailyPaper.zongjianLabelInfo(params)
-      if (!res.data) {
-        this.$refs.uToast.show({
-          title: '鏈煡璇㈠埌璇ユ爣绛句俊鎭紒',
-          type: 'warning '
-        })
-        return
-      }
-      // 鍒濆鍖栫敾鏉�
-      jcapi.initDrawingBoard({
-        width: 50,
-        height: 100,
-        rotate: 0
-      });
+      return new Promise(async (resolve, reject) => {
+        const params = {
+        	rwMatlBindId: item.id
+        };
+        try {
+          let res = await this.$u.api.dailyPaper.zongjianLabelInfo(params)
+          if (!res.data) {
+            this.$refs.uToast.show({
+              title: "鏈煡璇㈠埌璇ユ爣绛句俊鎭紒",
+              type: "warning ",
+            });
+            reject(new Error("鏈煡璇㈠埌璇ユ爣绛句俊鎭�"));
+            return;
+          }
 
-      // // 缁樺埗浜岀淮鐮�
-      jcapi.drawLabelQrCode({
-        x: 14.5,
-        y: 74,
-        width: 20,
-        height: 20,
-        value: jsonString,
-        rotate: 0,
-        codeType: QrCodeType.QrCode,
-      });
-      // 缁樺埗妯嚎 瀹炵嚎8鏉�
-      let sum = 4;
-      for (let i = 1; i < 13; i++) {
-        this.getDrawLabelLine(4, sum, 46, 0.5, 0, LineType.Solid) // 瀹炵嚎
-        sum = (i * 6) + 4
-      }
-      // 浜岀淮鐮佸ぇ妗�
-      this.getDrawLabelLine(4, 97, 46, 0.5, 0, LineType.Solid) // 瀹炵嚎9
+          // 浠嶢PI鍝嶅簲涓彁鍙栨墍闇�鏁版嵁
+          const { ht, lj, ljms, fh, scdt, scph, fhdw, shdw } = res.data;
 
-      //缁樺埗绔栫嚎
-      this.getDrawLabelLine(4, 4, 0.5, 97, 0, LineType.Solid) // 绔栫嚎1
-      this.getDrawLabelLine(20, 4, 0.5, 66, 0, LineType.Solid) // 绔栫嚎2
-      this.getDrawLabelLine(44.5, 4, 0.5, 97, 0, LineType.Solid) // 绔栫嚎2
+          // 鍒濆鍖栫敾鏉�
+          jcapi.initDrawingBoard({
+            width: 70,
+            height: 49,
+            rotate: 90,
+          });
 
-      // 濉啿鏂囧瓧鏍囬
-      this.getDrawLabelText(5, 5, 20, 20, '缂� 鍙�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1)
-      this.getDrawLabelText(5, 11, 20, 20, '宸ュ崟鍙�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1)
-      this.getDrawLabelText(5, 17, 20, 20, '鐗� 鍙�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1)
-      this.getDrawLabelText(5, 23, 20, 20, '鐗囧锛坢m锛�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1)
-      this.getDrawLabelText(5, 29, 20, 20, '鍘氬害锛坢m锛�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1)
-      this.getDrawLabelText(5, 35, 20, 20, '閲嶉噺锛圞G锛�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1)
-      this.getDrawLabelText(5, 41, 20, 20, '闀垮害锛坢锛�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1)
-      this.getDrawLabelText(5, 47, 20, 20, '鐢熶骇浜�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1)
-      this.getDrawLabelText(5, 53, 20, 20, '鐢熶骇鏃堕棿:', 3.4, 0, LineModeType.AutoHeight, 0, 0, 0, 1)
-      this.getDrawLabelText(5, 59, 20, 20, '鍘傚:', 3.4, 0, LineModeType.AutoHeight, 0, 0, 0, 1)
-      this.getDrawLabelText(5, 65, 20, 20, '閾佹崯:', 3.4, 0, LineModeType.AutoHeight, 0, 0, 0, 1)
+          // 缁樺埗浜岀淮鐮�
+          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.getDrawLabelText(22, 5, 35, 12, labelNo, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0)
-      this.getDrawLabelText(22, 11, 35, 12, optaskNo, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0)
-      this.getDrawLabelText(22, 17, 35, 12, grade, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0)
-      this.getDrawLabelText(22, 23, 35, 12, sliceWidth, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0)
-      this.getDrawLabelText(22, 29, 35, 12, thickness, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0)
-      this.getDrawLabelText(22, 35, 35, 12, wweight, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0)
-      this.getDrawLabelText(22, 41, 35, 12, llength, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0)
-      this.getDrawLabelText(22, 47, 35, 12, reportName, 2, 0, LineModeType.AutoHeight, 0, 0, 0, 0)
-      this.getDrawLabelText(22, 53, 35, 12, reportTime, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0)
-      this.getDrawLabelText(22, 59, 35, 12, supplierVenderName, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0)
-      this.getDrawLabelText(22, 65, 35, 12, ironLoss, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0)
+          // 缁樺埗妯嚎
+          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);
 
-      // 鐢熸垚鎵撳嵃鏁版嵁
-      let imageJsonObj = jcapi.generateLabelJson()
-      // 璁剧疆鎵撳嵃浠诲姟
-      jcapi.startJob({
-        totalCount: 1,
-        density: this.printDensity,
-        labelType: this.labelType,
-        printMode: this.printMode,
-      }, function (r) {
-        if (r.code == 0) {
-          // 鎵撳嵃鏁版嵁
-          jcapi.printData(imageJsonObj, {
-            "printQuantity": 1,
-          }, function (r) {
-            if (r.code == 0) {
-              console.log("鎵撳嵃鎴愬姛")
-            } else {
-              console.log("鎵撳嵃澶辫触")
+          //缁樺埗绔栫嚎
+          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();
+
+          // 璁剧疆鎵撳嵃浠诲姟
+          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) => {
+                  // 鎭㈠鍘熷鍥炶皟
+                  jcapi.didReadPrintCountInfo(originalPrintCountCallback);
+                  // 娓呴櫎鎵撳嵃瓒呮椂
+                  clearTimeout(printTimeout);
+                  // 缁撴潫褰撳墠鎵撳嵃浠诲姟
+                  // 瑙f瀽Promise琛ㄧず鎵撳嵃瀹屾垚
+                  resolve();
+                };
+                // 璁剧疆涓存椂鍥炶皟
+                jcapi.didReadPrintCountInfo(tempPrintCountCallback);
+
+                // 娣诲姞鎵撳嵃瓒呮椂澶勭悊
+                const printTimeout = setTimeout(() => {
+                  jcapi.didReadPrintCountInfo(originalPrintCountCallback);
+                  reject(new Error("鎵撳嵃瓒呮椂鏈搷搴�"));
+                }, 20000);
+
+                jcapi.printData(
+                  imageJsonObj,
+                  {
+                    printQuantity: 1,
+                  },
+                  function (r) {
+                    if (r.code != 0) {
+                      // 鎭㈠鍘熷鍥炶皟
+                      jcapi.didReadPrintCountInfo(originalPrintCountCallback);
+                      // 缁撴潫褰撳墠鎵撳嵃浠诲姟
+                      reject(new Error(r.msg || "鎵撳嵃澶辫触"));
+                    }
+                    // 鎵撳嵃鏁版嵁鍙戦�佹垚鍔熷悗绛夊緟鎵撳嵃璁℃暟鍥炶皟纭瀹為檯鎵撳嵃瀹屾垚
+                  }
+                );
+              } else {
+                reject(new Error(r.msg || "璁剧疆鎵撳嵃浠诲姟澶辫触"));
+              }
             }
-          })
-        } else {
-          console.log("璁剧疆鎵撳嵃浠诲姟澶辫触")
+          );
+        } catch (error) {
+          reject(error);
         }
-      })
+      });
     },
     tapQuery(item) {
-      this.maskShow = false
+      this.maskShow = false;
       // 杩炴帴鎵撳嵃鏈�
       let _this = this;
-      console.log(item)
-      jcapi.openPrinterByDevice({
-        address: item.address,
-        name: item.name,
-        deviceType: item.deviceType // 璁惧绫诲瀷锛�0-钃濈墮锛�1-缃戠粶
-      }, function (r) {
-        uni.showToast({
-          title: (r.code == 0) ? "杩炴帴鎴愬姛" : "杩炴帴澶辫触",
-          duration: 2 * 1000
-        })
-        if (r.code == 0) {
-          _this.connectedDevice = item
-          // 缁樻爣绛捐繘琛屾墦鍗�
-          _this.pritList.forEac(async item => {
-            await _this.printQrCode(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,
+            });
+            // 寮�濮嬪鐞嗘墦鍗伴槦鍒�
+            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({ // 纭钃濈墮鏄惁鎵撳紑
+      let _this = this;
+      uni.openBluetoothAdapter({
+        // 纭钃濈墮鏄惁鎵撳紑
         success(r) {
           uni.showLoading({
-            title: "鎼滅储涓�..."
-          })
+            title: "鎼滅储涓�...",
+          });
           // 鏈巿浜堣摑鐗欑浉鍏虫潈闄愬拰鏈墦寮�鎵嬫満瀹氫綅浼氭悳绱笉鍒拌澶�
           jcapi.getBluetoothDevices(function (r) {
-            console.log("device:" + JSON.stringify(r))
+            console.log("device:" + JSON.stringify(r));
             // 鎼滅储鍒拌澶囧洖璋�
-            uni.hideLoading()
+            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
-          })
+            _this.maskShow = true;
+          });
         },
         fail(e) {
           uni.showModal({
-            confirmText: "鎵撳紑钃濈墮澶辫触"
-          })
-          console.log("寮�鍚摑鐗欒澶囧け璐�" + e)
-        }
-      })
+            title: "鎻愮ず",
+            content: "鎵撳紑钃濈墮澶辫触锛岃妫�鏌ヨ摑鐗欐槸鍚﹀紑鍚�",
+            showCancel: false,
+          });
+          console.log("寮�鍚摑鐗欒澶囧け璐�" + e);
+        },
+      });
     },
-    // 缁樺埗妯嚎 瀹炵嚎
+    // 缁樺埗妯嚎
     getDrawLabelLine(x, y, width, height, rotate, lineType) {
       jcapi.drawLabelLine({
         x: x,
@@ -419,11 +657,25 @@
         width: width,
         height: height,
         rotate: rotate,
-        lineType: lineType
+        lineType: lineType,
       });
     },
     // 濉啿鏂囧瓧鏍囬
-    getDrawLabelText(x, y, width, height, value, fontSize, rotate, lineMode, lineSpace, letterSpace, textAlignHorizontal, textAlignVertical) {
+    getDrawLabelText(
+      x,
+      y,
+      width,
+      height,
+      value,
+      fontSize,
+      rotate,
+      lineMode,
+      lineSpace,
+      letterSpace,
+      textAlignHorizontal,
+      textAlignVertical,
+      bold
+    ) {
       jcapi.drawLabelText({
         x: x,
         y: y,
@@ -436,34 +688,56 @@
         lineSpace: lineSpace,
         letterSpace: letterSpace,
         textAlignHorizontal: textAlignHorizontal,
-        textAlignVertical: textAlignVertical
-      })
+        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 pages = getCurrentPages();
 
       // 鑾峰彇涓婁竴椤垫爤
-      let prevPage = pages[pages.length - 2]
+      let prevPage = pages[pages.length - 2];
 
       // 瑙﹀彂涓婁竴椤� upData 鍑芥暟(骞舵惡甯﹀弬鏁�)
-      prevPage.$vm.setNo(no)
+      prevPage.$vm.setNo(no);
 
       // 杩斿洖涓婁竴椤�
       uni.navigateBack({
-        delta: 1
-      })
+        delta: 1,
+      });
     },
-  }
+  },
 };
 </script>
 <style lang="scss">
 .finishProductIn-locno-bg {
-  background-color: #F6F9FF;
-  background-image: url('~@/static/custom/finishProductIn/locNoBg.png');
+  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;
@@ -597,4 +871,90 @@
   line-height: 36rpx;
   margin-right: 32rpx;
 }
-</style>
+
+/* 妯℃�佹鏍峰紡浼樺寲 */
+.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: 28rpx;
+  font-weight: 500;
+  color: #333333;
+  margin-bottom: 10rpx;
+  display: flex;
+  justify-content: space-between;
+}
+
+/* 妯℃�佹鏍囬 */
+.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