核磅录入页面的打印功能调试,修复全部打印只出一张的问题,修复首次连接蓝牙后推出页面再进蓝牙无法连接问题
已修改1个文件
454 ■■■■ 文件已修改
pages/wareHouse/nuclearScale/nuclearscalerecord.vue 454 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/wareHouse/nuclearScale/nuclearscalerecord.vue
@@ -1,26 +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">
            <!-- 连接和打印状态指示器 -->
            <view class="status-indicator" :class="{
      <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>
        <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)">
      <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>
@@ -101,18 +124,31 @@
                    </view>
                </u-cell-group>
                <view class="loadmore" @click="getmoreList()">
                    <u-loadmore :status="status" :load-text="loadText" @loadmore="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">
        <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
            v-for="(item, index) in listDevice"
            :key="index"
            @click="tapQuery(item)"
            class="device-item"
          >
                        <view class="device-name">
                            <text>名称:</text>
                            <text>{{ item.name || "未知设备" }}</text>
@@ -188,25 +224,34 @@
                connectionStatus: "disconnected", // 连接状态: disconnected, connecting, connected
                printStatus: "idle", // 打印状态: idle, printing, error
                errorMessage: "", // 错误信息
                verificationNo:''
      verificationNo: "",
      failedPrintJobs: [],
            };
    },
    onLoad(options) {
            this.verificationNo = JSON.parse(decodeURIComponent(options.verificationNo))
    this.verificationNo = JSON.parse(
      decodeURIComponent(options.verificationNo)
    );
            this.getlist();
            // 初始化SDK
            jcapi.initSDK();
    // 尝试恢复之前的蓝牙连接状态
    this.restoreBluetoothConnection();
            // 监听页码回调
            jcapi.didReadPrintCountInfo(function(r) {
                console.log('页码',r);
      console.log("页码", r);
            });
            // 监听错误回调
            jcapi.didReadPrintErrorInfo((r) => {
                console.log('错误',r);
      console.log("错误", r);
                if (r.code == 23) {
                    // 打印机断开连接
                    this.connectedDevice = null;
        // 清除本地存储的连接信息
        uni.removeStorageSync("bluetoothConnection");
                    uni.showToast({
                        icon: "none",
                        title: "打印机连接已断开,请重新连接",
@@ -222,6 +267,40 @@
            });
        },
        methods: {
    restoreBluetoothConnection() {
      try {
        // 从本地存储获取之前保存的连接信息
        const savedConnection = uni.getStorageSync("bluetoothConnection");
        if (savedConnection && savedConnection.address) {
          console.log("尝试恢复蓝牙连接:", savedConnection);
          // 设置为连接中状态
          this.connectionStatus = "connecting";
          // 尝试重新连接
          jcapi.openPrinterByDevice(
            {
              address: savedConnection.address,
              name: savedConnection.name,
              deviceType: 0, // 设备类型:0-蓝牙,1-网络
            },
            (r) => {
              if (r.code == 0) {
                this.connectedDevice = savedConnection;
                this.connectionStatus = "connected";
                console.log("蓝牙连接已恢复");
              } else {
                this.connectionStatus = "disconnected";
                // 如果重连失败,清除保存的连接信息
                uni.removeStorageSync("bluetoothConnection");
                console.log("蓝牙重连失败:", r);
              }
            }
          );
        }
      } catch (e) {
        console.error("恢复蓝牙连接失败:", e);
      }
    },
            getmoreList() {
                if (this.pageSize >= this.total) {
                    this.status = "nomore";
@@ -234,13 +313,11 @@
                }, 1000);
            },
            getlist() {
                this.$u.api.NuclearScaleEntry
                    .queryPacking({
      this.$u.api.NuclearScaleEntry.queryPacking({
                        current: this.pageNum,
                        size: this.pageSize,
                        verificationNo: this.verificationNo,
                    })
                    .then((res) => {
      }).then((res) => {
                        this.list = res.data;
                        this.total = res.data.length;
                        if (this.pageSize >= this.total) {
@@ -254,13 +331,11 @@
                if (value) {
                    this.list = [];
                    this.pageSize = 10;
                    this.$u.api.NuclearScaleEntry
                        .queryPacking({
        this.$u.api.NuclearScaleEntry.queryPacking({
                            current: this.pageNum,
                            size: this.pageSize,
                            moNo: value,
                        })
                        .then((res) => {
        }).then((res) => {
                            this.list = res.data.records;
                            this.total = res.data.total;
                            if (this.pageSize >= this.total) {
@@ -403,7 +478,7 @@
            maskclose() {},
            //打印二维码
             printQrCode(item) {
                // return new Promise(async (resolve, reject) => {
      return new Promise(async (resolve, reject) => {
                    // const params = {
                    //     rwMatlBindId: item.id
                    // };
@@ -418,14 +493,14 @@
                            return;
                        }
                        const ht =  item.contractNo
                        const lj =  item.partNo
                        const ljms =  item.ccontrProModel
                        const fh =  item.newNetWeight
                        const scdt =  item.outboundDate
                        const scph =  item.batchNo
                        const shdw =  item.customerName
                        const fhdw = '江东合金技术有限公司'
          const ht = item.contractNo;
          const lj = item.partNo;
          const ljms = item.ccontrProModel;
          const fh = item.newNetWeight;
          const scdt = item.outboundDate;
          const scph = item.batchNo;
          const shdw = item.customerName;
          const fhdw = "江东合金技术有限公司";
                        // 初始化画板
                        jcapi.initDrawingBoard({
@@ -444,7 +519,7 @@
                          total_qty : item.newNetWeight,
                          qty_arrived : item.newNetWeight,
                          release_no : item.relNo,    
                        }
          };
                        
                        jcapi.drawLabelQrCode({
                            x: 43.5,
@@ -474,47 +549,269 @@
                        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(
            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);
          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({
          jcapi.startJob(
            {
                                totalCount: 1,
                                density: this.printDensity,
                                labelType: this.labelType,
@@ -541,20 +838,19 @@
                                    // 添加打印超时处理
                                    const printTimeout = setTimeout(() => {
                                        jcapi.didReadPrintCountInfo(
                                            originalPrintCountCallback);
                  jcapi.didReadPrintCountInfo(originalPrintCountCallback);
                                        reject(new Error("打印超时未响应"));
                                    }, 20000);
                                    jcapi.printData(
                                        imageJsonObj, {
                  imageJsonObj,
                  {
                                            printQuantity: 1,
                                        },
                                        function(r) {
                                            if (r.code != 0) {
                                                // 恢复原始回调
                                                jcapi.didReadPrintCountInfo(
                                                    originalPrintCountCallback);
                      jcapi.didReadPrintCountInfo(originalPrintCountCallback);
                                                // 结束当前打印任务
                                                reject(new Error(r.msg || "打印失败"));
                                            }
@@ -569,7 +865,7 @@
                    } catch (error) {
                        reject(error);
                    }
                // });
      });
            },
            tapQuery(item) {
                this.maskShow = false;
@@ -579,15 +875,19 @@
                // 设置为连接中状态
                this.connectionStatus = "connecting";
                jcapi.openPrinterByDevice({
      jcapi.openPrinterByDevice(
        {
                        address: item.address,
                        name: item.name,
                        deviceType: 0, // 设备类型:0-蓝牙,1-网络
                    },
                    function(r) {
          // 在tapQuery方法中,连接成功时添加保存连接信息的代码
                        if (r.code == 0) {
                            _this.connectedDevice = item;
                            _this.connectionStatus = "connected";
            // 保存连接信息到本地存储
            uni.setStorageSync("bluetoothConnection", item);
                            uni.showToast({
                                title: "连接成功",
                                duration: 1500,