快乐的昕的电脑
2025-10-14 b07b8cf446b40799e62bb9531b724d05e3d232b0
components/WorkOrderPrint.vue
@@ -38,7 +38,7 @@
            </table>
         </view>
         <!-- 统计行(刷新按钮移到这里右侧) -->
         <!-- 统计行 -->
         <view class="status-row">
            <view class="status-box">
               <text>机台面板数:</text>
@@ -68,32 +68,13 @@
            </view>
         </view>
         <!-- 基础信息(已去掉 图号 / 材质 / 颜色) -->
         <view class="basic-info">
            <view class="form-row">
               <view class="form-item">
                  <label>产品编码:</label>
                  <input class="inp" type="text" v-model="order.daa002" disabled />
               </view>
               <view class="form-item">
                  <label>产品名称:</label>
                  <superwei-combox :candidates="DAA003List" v-model="order.daa003"
                               @select="onDaa003Change" class="inp"></superwei-combox>
               </view>
               <view class="form-item">
                  <label>产品规格:</label>
                  <input class="inp" type="text" v-model="order.daa004" disabled />
               </view>
            </view>
         </view>
         <!-- 已移除: 产品编码 / 产品名称 / 产品规格 输入区域 -->
         <!-- 不良数量 -->
         <view class="print-section" style="margin-top:10px;">
            <view class="barcode-info">
               <view class="user-select">
                  <text style="display:inline-block;float:left;">不良数量:</text>
                  <input v-model="customAmount" class="inp"
                        style="width:55%;height:60px;border:3px solid #808080;font-size:32px;text-align:center;margin-top:5px;"
                  <text>不良数量:</text>
                  <input v-model="customAmount" class="inp bad-input"
                        placeholder="请输入数量" />
               </view>
               <view class="user-select" style="margin-left:30px;">
@@ -106,7 +87,7 @@
         <view>
            <view class="reason-section" style="margin-bottom:-10px">
               <text>报工人:</text>
               <view class="reason-buttons" style="font-size:20px;">
               <view class="reason-buttons">
                  <button v-for="(u,index) in users" :key="index"
                        :class="{'reason-btn':true,'selected': staffNo===u}"
                        @click="toggleUser(u)" v-text="u"></button>
@@ -120,7 +101,7 @@
            <button class="cancel-btn" @click="cancel">取消</button>
         </view>
         <!-- 保留弹窗 -->
         <!-- 弹窗保留 -->
         <view v-if="isShow" class="overlay">
            <view class="popup">
               <view class="bottom-section1">
@@ -153,9 +134,7 @@
                     <uni-td align="center"><input v-model="item.okQty" /></uni-td>
                  </uni-tr>
               </uni-table>
               <view>
                  <button class="clean-btn" type="warn" @click="barcodeIsShow=false">关闭</button>
               </view>
               <view><button class="clean-btn" type="warn" @click="barcodeIsShow=false">关闭</button></view>
            </view>
         </view>
      </view>
@@ -171,60 +150,22 @@
         return {
            currentUser: '',
            barcodeAmount: '',
            users: [],
            userForm: [],
            staff: [],
            user: {},
            productionCount: 0,
            printedCount: 0,
            defectiveCount: 0,
            order: {},
            icount: 1,
            bqty: 0,
            sQuantity: 0,
            kgQty: 0,
            initialValue: 0,
            qqty: 0,
            ngStaid: 0,
            bufferData: '',
            dataToPrint: [],
            isLoading: false,
            but: false,
            DAA003List: [],
            lineList: [],
            isShow: false,
            barcodeIsShow: false,
            barcodeList: [],
            staffNo: '',
            printStr: '',
            printMac: '',
            bluetoothSocket: {},
            device: '',
            uuid: '',
            printNum: 1,
            reportingList: [],
            printLoading: false,
            customAmount: '',
            isGeneratingBarcode: false,
            lastGenerateTime: 0,
            generateRequestId: null,
            nowTimeTimer: null,
            nowTime: ''
         };
            users: [], userForm: [], staff: [], user: {},
            productionCount: 0, printedCount: 0, defectiveCount: 0, order: {},
            icount: 1, bqty: 0, sQuantity: 0, kgQty: 0, initialValue: 0, qqty: 0,
            ngStaid: 0, bufferData: '', dataToPrint: [], isLoading: false, but: false,
            DAA003List: [], lineList: [], isShow: false, barcodeIsShow: false, barcodeList: [],
            staffNo: '', printStr: '', printMac: '', bluetoothSocket: {}, device: '', uuid: '',
            printNum: 1, reportingList: [], printLoading: false, customAmount: '',
            isGeneratingBarcode: false, lastGenerateTime: 0, generateRequestId: null,
            nowTimeTimer: null, nowTime: ''
         }
      },
      computed: {
         calculatedCurrentCount() {
            return (this.productionCount || 0) - (this.initialValue || 0);
         },
         calculatedTotalProduction() {
            return (this.kgQty || 0) + this.calculatedCurrentCount;
         },
         calculatedDefectiveCount() {
            return this.calculatedTotalProduction - (this.sQuantity || 0);
         },
         planQtyDisplay() {
            return this.order.planQty || this.order.planQuantity || this.order.daa007 || this.order.daa010 || 0;
         }
         calculatedCurrentCount() { return (this.productionCount || 0) - (this.initialValue || 0); },
         calculatedTotalProduction() { return (this.kgQty || 0) + this.calculatedCurrentCount; },
         calculatedDefectiveCount() { return this.calculatedTotalProduction - (this.sQuantity || 0); },
         planQtyDisplay() { return this.order.planQty || this.order.planQuantity || this.order.daa007 || this.order.daa010 || 0; }
      },
      created() {
         this.initializeData();
@@ -234,9 +175,7 @@
         this.updateNowTime();
         this.nowTimeTimer = setInterval(this.updateNowTime, 60000);
      },
      beforeDestroy() {
         if (this.nowTimeTimer) clearInterval(this.nowTimeTimer);
      },
      beforeDestroy() { if (this.nowTimeTimer) clearInterval(this.nowTimeTimer); },
      methods: {
         updateNowTime() {
            const d = new Date(), p = n => n.toString().padStart(2, '0');
@@ -249,9 +188,7 @@
            this.isGeneratingBarcode = false; this.lastGenerateTime = 0; this.generateRequestId = null;
         },
         resetGenerateState() {
            this.isGeneratingBarcode = false;
            this.generateRequestId = null;
            this.lastGenerateTime = 0;
            this.isGeneratingBarcode = false; this.generateRequestId = null; this.lastGenerateTime = 0;
            this.$showMessage("已重置条码生成状态");
         },
         refresh() {
@@ -259,9 +196,7 @@
               url: "http://192.168.0.94:9095/Numerical/RefreshDev",
               data: { machineNo: this.order.machineNo },
               contentType: "application/json"
            }).then(r => {
               if (r.code == 200) this.fetchData(true); else this.$showMessage("同步失败");
            });
            }).then(r => { r.code == 200 ? this.fetchData(true) : this.$showMessage("同步失败"); });
         },
         onDaa003Change(v) {
            let o = this.lineList[this.DAA003List.indexOf(v)];
@@ -318,10 +253,11 @@
               });
         },
         getXS0101() {
            this.$post({ url: "/MesStaff/GetAllXS0101" }).then(res => {
               this.staff = res.data.tbBillList;
               this.users = this.staff.map(s => s.staffNo + ":" + s.staffName);
            });
            this.$post({ url: "/MesStaff/GetAllXS0101" })
               .then(res => {
                  this.staff = res.data.tbBillList;
                  this.users = this.staff.map(s => s.staffNo + ":" + s.staffName);
               });
         },
         getWomdaaPrintById() {
            this.$post({ url: "/Womdaa/GetWomdaaPrintById", data: { orderId: this.orderId } })
@@ -343,7 +279,7 @@
         init() {
            try {
               const v = this.getAndroidVersion();
               if (v >= 12) this.initForAndroid12Plus(); else this.initForAndroidLegacy();
               v >= 12 ? this.initForAndroid12Plus() : this.initForAndroidLegacy();
            } catch (e) { console.error(e); }
         },
         getAndroidVersion() {
@@ -389,16 +325,11 @@
            this.isShow = false;
            this.isGeneratingBarcode = false;
            this.generateRequestId = null;
            this.bufferData = '';
            this.dataToPrint = [];
            this.staffNo = null;
            this.user = '';
            this.barcodeAmount = '';
            this.icount = 1;
            this.staff = null;
            this.bufferData = ''; this.dataToPrint = [];
            this.staffNo = null; this.user = ''; this.barcodeAmount = ''; this.icount = 1; this.staff = null;
         }
      }
   };
   }
</script>
<style scoped>
@@ -511,25 +442,6 @@
      padding: 6px 14px;
   }
   .basic-info .form-row {
      display: flex;
      justify-content: space-between;
      margin: 4px 0 10px;
   }
   .form-item {
      width: 32%;
   }
   .inp {
      width: 100%;
      padding: 6px;
      font-size: 14px;
      border: 1px solid #808080;
      border-radius: 6px;
      box-sizing: border-box;
   }
   .print-section {
      padding: 4px 0 10px;
      margin-bottom: 8px;
@@ -541,6 +453,23 @@
      gap: 20px;
   }
   .inp {
      padding: 6px;
      font-size: 14px;
      border: 1px solid #808080;
      border-radius: 6px;
      box-sizing: border-box;
   }
   .bad-input {
      width: 55%;
      height: 60px;
      border: 3px solid #808080;
      font-size: 32px;
      text-align: center;
      margin-top: 5px;
   }
   .details-btn {
      padding: 10px 26px;
      background: #00a2e9;